我正在开发一个带有 Spring Security 设置的 Spring MVC 应用程序,该设置通过 LDAP 对 Active Directory 用户进行身份验证。我正在尝试设置 AOP 来记录每个被调用的控制器方法。我一切正常,我可以拦截该方法..但我似乎无法访问 SecurityContext 来获取正在执行该方法的登录用户的用户名。
UserInvokedMethodLogger.java
public class UserInvokedMethodLogger implements MethodInterceptor
{
private SecurityContext security = SecurityContextHolder.getContext();
@Override
public Object invoke(MethodInvocation interceptedMethod) throws Throwable
{
long start = System.currentTimeMillis();
Object result = interceptedMethod.proceed();
long end = System.currentTimeMillis();
String dbgMessage =
(security.getAuthentication() != null)
? "User '" + security.getAuthentication().getName() + "' called method '"
: "Unauthenticated user called method '"
+ interceptedMethod.getMethod().getName()
+ "' which executed in " + (end - start) + "ms.";
System.out.println(dbgMessage);
return result;
}
}
即使我登录,输出始终是“未经身份验证的用户”。