我正在使用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;
}
}
即使我已登录,输出也始终为“未经身份验证的用户”。
答案 0 :(得分:3)
尝试在每次方法调用期间调用SecurityContextHolder.getContext()。只需删除private SecurityContext security
属性并直接使用SecurityContextHolder.getContext()。