spring - SecurityContextHolder.getContext().getAuthentication() 总是返回“anonymousUser”
问题描述
我使用以下配置创建了 Spring Boot 应用程序:
- 春季启动 2.1.0.RELEASE
- OpenJDK 11
我的项目中有一个AuditConfiguration
类,如下所示:
@Configuration
@EnableJpaAuditing(auditorAwareRef = "auditorProvider")
public class AuditConfiguration {
@Bean
public AuditorAware<String> auditorProvider() {
return new AuditorAwareImpl();
}
class AuditorAwareImpl implements AuditorAware<String> {
@Override
public Optional<String> getCurrentAuditor() {
Principal principal =
SecurityContextHolder.getContext().getAuthentication();
return Optional.of(principal.getName());
}
}
}
并且SecurityContextHolder.getContext().getAuthentication()
总是返回anonymousUser
。
但是,以下代码返回正确的用户名。
@RestController
@RequestMapping("/history")
public class HistoryEndpoint {
@RequestMapping(value = "/username", method = RequestMethod.GET)
@ResponseBody
public String currentUserName(Principal principal) {
return principal.getName();
}
}
我需要你的帮助来解决这个问题。
解决方案
我使用以下课程获得了经过身份验证的用户。我遇到了 JPA 审计的问题。@CreatedBy 始终保存null
。然后我尝试SecurityContextHolder.getContext().getAuthentication()
使用此方法获取经过身份验证的用户。该方法返回annonymousUser
。但是我的问题是固定的。
@ManagedBean
@EnableJpaAuditing
public class SpringSecurityAuditorAware implements AuditorAware<String> {
private final HttpServletRequest httpServletRequest;
public SpringSecurityAuditorAware(HttpServletRequest httpServletRequest) {
this.httpServletRequest = httpServletRequest;
}
@Override
public Optional<String> getCurrentAuditor() {
return Optional.ofNullable(httpServletRequest.getUserPrincipal())
.map(Principal::getName);
}
}
推荐阅读
- github - 如何在 GitHub Hub 发布创建中设置描述
- node.js - 找不到 git-bash 上的全局命令 $ live-server?
- ssl - Cakephp + RDS + SSL:证书验证失败
- python - 如何在 for 循环中向 Pandas Dataframe 添加字符串值?
- terraform - terraform中布尔值的“”等价物是什么?
- sql - 我在 Oracle SQL 中的代码的查询优化
- node.js - 设置Ruby开发环境时出错:找不到nodejs,无法连接到服务器
- angular - Angular 代码在使用 http post 时不断出错
- c++ - ReadFileFromDisk 内核模式
- java - QR 码图像未从我的 android 应用程序中的位图中保存