在我们的应用程序中观察到一个非常奇怪的情况(具有所有默认BOM依赖性的Spring Boot 1.5.6):您可以完美地登录(使用AbstractPreAuthenticatedProcessingFilter
),但这仍然会留下Principal
请求null
!即request.getUserPrincipal()
为null
而SecurityContextHolder.getContext().getAuthentication()
不是!
这又会影响我们的健康端点敏感的能力:它使用Principal
(参见 HealthMvcEndpoint.exposeHealthDetails(HttpServletRequest,Principal)),它由{{1}注入},然后从请求中获取它......
看起来我错过了一些简单的东西,但仍然无法找到它:(
答案 0 :(得分:5)
因此,在创建一个新的Spring Boot应用程序并将其调试到它的内部之后,我发现没有人真正将Principal
设置到请求中。将Spring包装成另一个使用Spring SecurityContext
进行上述(以及其他一些方法)的Spring。这个包装是由SecurityContextHolderAwareRequestFilter
完成的,默认情况下是这样(见HttpSecurity.servletApi()
)...
但有人已禁用我们项目的默认Spring Security配置,因此过滤器不在那里!