gpt4 book ai didi

java - 检索用户所需的最低 SpringSecurity 配置

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

我有一个现有的 Spring MVC 应用程序,当前未使用 SpringSecurity。我为Hibernate审计日志编写了一个AuditInterceptor,它需要一种方法来获取当前登录的用户。根据我在网上找到的信息,最好的方法是通过 SpringSecurity 的 SecurityContextHolder。但是,我目前并不真正需要任何其他 SpringSecurity 功能,并且我不想重写应用程序当前如何进行身份验证或授权。

基本上,我正在寻找的是为了将登录用户存储到 SecurityContextHolder 中所需的最小配置量,并在我的 AuditInterceptor 中将其再次取出。


我的第一次尝试是以下行添加到当前存在的登录页面:

Authentication auth = new UsernamePasswordAuthenticationToken(u.getName(), u.getPassword());
SecurityContextHolder.getContext().setAuthentication(auth);

并将以下内容添加到拦截器:

SecurityContext secureContext = SecurityContextHolder.getContext();
Authentication auth = secureContext.getAuthentication();
Object principal = auth.getPrincipal();

String userName = null;
if (principal instanceof UserDetails) {
UserDetails userDetails = (UserDetails) principal;
userName = userDetails.getUsername();
} else {
userName = principal.toString();
}

这是成功的,但不幸的是不是线程安全的。大家还有其他想法吗?

最佳答案

我不确定你如何称它为非线程安全。您的实现看起来非常好。只要您每次按照您实现的方式检索上下文,它就是线程安全的。SecurityContextHolder 是 ThreadLocalSecurityContextHolderStrategy 的一个实例,它将 SecurityContext 存储在 ThreadLocal 中。

关于java - 检索用户所需的最低 SpringSecurity 配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5427594/

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