在SecurityContext中找不到身份验证对象 我有一个导出web服务的应用程序,配置了Spring SecuritySecurityFilterChain(其中包括SecurityContextPersistenceFilter,其余都需要它) 我的应用程序还使用Spring安全性来保护方法调用

在SecurityContext中找不到身份验证对象 我有一个导出web服务的应用程序,配置了Spring SecuritySecurityFilterChain(其中包括SecurityContextPersistenceFilter,其余都需要它) 我的应用程序还使用Spring安全性来保护方法调用,spring,authentication,spring-security,authorization,security-context,Spring,Authentication,Spring Security,Authorization,Security Context,触发方法安全性时,我出现以下错误: org.springframework.security.authentication.AuthenticationCredentialsNotFoundException: An Authentication object was not found in the SecurityContext 第二部分需要SecurityContextHolder中的身份验证,如org.springframework.security.access.intercept.

触发方法安全性时,我出现以下错误:

org.springframework.security.authentication.AuthenticationCredentialsNotFoundException: An Authentication object was not found in the SecurityContext
第二部分需要
SecurityContextHolder
中的
身份验证
,如
org.springframework.security.access.intercept.AbstractSecurityInterceptor
(第195行)所示:

但是,
SecurityContextPersistenceFilter
在触发方法调用之前将其删除,如中所示
org.springframework.security.web.context.SecurityContextPersistenceFilter
(第84行)

当触发方法调用时,如何将此对象置于
SecurityContextHolder

先谢谢你


我正在使用Spring Security 3.0.8-RELEASE

SecurityContextHolder。只有在请求处理完成后才会调用clearContext()。因此,通常所有的应用程序逻辑代码都将在这一行之前执行,根本没有问题。但是,如果在代码中执行一些新线程,则可能会出现问题(默认情况下,不会传播安全上下文)。如果这是你的情况,那么你可以。如果您只使用一个线程,那么请确保所有代码都包含在spring security filter链中(可能您有一些自定义的过滤器在spring security filter链周围执行?)。

SecurityContextHolder.clearContext()
将仅在请求处理完成后调用。因此,通常所有的应用程序逻辑代码都将在这一行之前执行,根本没有问题。但是,如果在代码中执行一些新线程,则可能会出现问题(默认情况下,不会传播安全上下文)。如果这是你的情况,那么你可以。如果您只使用一个线程,那么请确保所有代码都包含在spring security filter链中(可能是您有一些自定义过滤器在spring security filter链周围执行了

好的,我的应用程序被放置在上面以生成REST端点。Apache CXF拦截器导致意外行为,并在完成请求处理之前调用
SecurityContextHolder.clearContext()


可以找到有关此错误的更多信息。

好的,我的应用程序将被放置以生成REST端点。Apache CXF拦截器导致意外行为,并在完成请求处理之前调用
SecurityContextHolder.clearContext()

可以找到有关此错误的更多信息

SecurityContextHolder.getContext().getAuthentication();
SecurityContextHolder.clearContext();