0
  1. 我有一个应用程序导出 Web 服务,并配置了 Spring Security SecurityFilterChainSecurityContextPersistenceFilter除其他外,其余部分都需要)。
  2. 我的应用程序还使用 Spring Security 来保护方法调用。

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

org.springframework.security.authentication.AuthenticationCredentialsNotFoundException: An Authentication object was not found in the SecurityContext

第二部分需要输入AuthenticationSecurityContextHolderorg.springframework.security.access.intercept.AbstractSecurityInterceptor(第 195 行)所示:

SecurityContextHolder.getContext().getAuthentication();

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

SecurityContextHolder.clearContext();

SecurityContextHolder当触发方法调用时,我该怎么做才能让这个对象进入?

先感谢您。

我正在使用 Spring Security 3.0.8-RELEASE

4

2 回答 2

3

SecurityContextHolder.clearContext()只有在请求处理完成后才会调用。所以通常你所有的应用程序逻辑代码都会在这行之前执行,完全没有问题。但是如果您在代码中执行一些新线程,则可能会出现问题(默认情况下不会传播安全上下文)。如果这是您的情况,那么您可以尝试强制将上下文传播到子线程。如果您只使用一个线程,请确保您的所有代码都被弹簧安全过滤器链覆盖(可能您有一些围绕弹簧安全过滤器链执行的自定义过滤器?)。

于 2013-05-15T08:16:06.710 回答
0

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

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

于 2013-06-03T13:04:18.890 回答