Spring security 可以访问UserDetailsService中的主体吗?

Spring security 可以访问UserDetailsService中的主体吗?,spring-security,Spring Security,我在方法getPreAuthenticatedPrincipal(HttpServletRequest)中实现了一个自定义的AbstractPreAuthenticatedProcessingFilter,它返回一个Principal(实际上是一个对象) 我正在自定义实现一个userdetails服务,它需要以某种方式访问主体。我尝试使用了SecurityContextHolder.getContext().getAuthentication().getPrincipal(),由于getAuth

我在方法
getPreAuthenticatedPrincipal(HttpServletRequest)
中实现了一个自定义的
AbstractPreAuthenticatedProcessingFilter
,它返回一个
Principal
(实际上是一个
对象

我正在自定义实现一个
userdetails服务
,它需要以某种方式访问
主体
。我尝试使用了
SecurityContextHolder.getContext().getAuthentication().getPrincipal()
,由于
getAuthentication()
为空,因此它会抛出一个
NullPointerException


否则如何访问
主体?

它为空的原因是spring security在此之前无法识别主体。从javadoc中摘录:

用于处理处理预认证过滤器的基类 身份验证请求,其中假定主体 已通过外部系统的身份验证


UserDetailService负责加载用户对象。然后,在成功身份验证之后,将设置包含给定用户对象的主体

我实现了
org.springframework.security.core.userdetails.userdetails服务
,而不是
org.springframework.security.core.userdetails.authenticationuserdetails服务
,这是
AbstractPreAuthenticatedProcessingFilter
的实际需要。其中的
loadUserDetails()
方法将
Authentication
对象作为参数,因此我的问题得到了解决