Spring Security request.getUserPrincipal()始终为null

Fla*_* Ru 4 java spring spring-security

在我们的应用程序中观察到一个非常奇怪的情况(具有所有默认BOM依赖性的Spring Boot 1.5.6):您可以完美地登录(with AbstractPreAuthenticatedProcessingFilter),但这仍然留Principal在请求中null!即request.getUserPrincipal()null,而SecurityContextHolder.getContext().getAuthentication()不是!

这反过来会影响我们的健康端点敏感的能力:它使用Principal(参见HealthMvcEndpoint.exposeHealthDetails(HttpServletRequest,Principal)),它被注入ServletRequestMethodArgumentResolver,然后从请求中获取它...

看起来我错过了一些简单的东西,但仍然无法找到它:(

Fla*_* Ru 5

因此,在创建一个新的Spring Boot应用程序并将其调试到它的内部之后,我发现没有人真正设置Principal到请求中.它是Spring将它包装成另一个使用Spring的SecurityContext(以及其他一些方法).这个包装是SecurityContextHolderAwareRequestFilter由默认完成的(见HttpSecurity.servletApi())...

但有人已禁用我们项目的默认Spring Security配置,因此过滤器不存在!