gpt4 book ai didi

java - 如何在 MethodInterceptor 中访问 SecurityContext?

转载 作者:行者123 更新时间:2023-12-04 04:51:09 28 4
gpt4 key购买 nike

我正在使用 Spring Security 设置开发 Spring MVC 应用程序,该应用程序通过 LDAP 对 Active Directory 用户进行身份验证。我正在尝试设置 AOP 以记录调用的每个 Controller 方法。我已经让一切正常,我可以拦截该方法..但我似乎无法访问 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;
}
}

即使我登录,输出也始终是“未经身份验证的用户”。

最佳答案

尝试在每个方法调用期间调用 SecurityContextHolder.getContext()。只需删除您的 private SecurityContext security属性并直接使用 SecurityContextHolder.getContext() 。

关于java - 如何在 MethodInterceptor 中访问 SecurityContext?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17452467/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com