【发布时间】:2018-11-15 12:59:32
【问题描述】:
我使用以下配置创建了 Spring Boot 应用程序:
- 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();
}
}
我需要您的帮助来解决这个问题。
【问题讨论】:
-
尝试自动装配主体对象,而不是直接从安全上下文持有者那里获取它并检查问题是否消失。
-
您是否将 Authentication 对象设置为 spring 安全上下文?
-
请出示您的配置文件
标签: spring spring-boot spring-security