尽管可以通过SecurityContextHolder.getContext()

时间:2018-01-24 10:42:20

标签: java spring spring-security jaas

我正在使用Spring Security(版本3.2.3)和Jaas的应用程序中工作。 为此,我们基本上添加了一个扩展J2eePreAuthenticatedProcessingFilter的自定义过滤器。它适用于简单的过滤器:

<http pattern="/intern/**" auto-config="false" use-expressions="true"
    entry-point-ref="preAuthenticatedProcessingFilterEntryPoint">
    <custom-filter ref="myJ2eePreAuthenticatedProcessingFilter" before="FIRST" />
    <csrf />
</http>

但对于像这样的安全控制器方法:

@Secured({ ROLE_RIGHT_ADMIN })
@RequestMapping(method = RequestMethod.GET, produces = "application/json")
@ResponseBody
public SearchResult getAll(SearchParams searchParams) throws ModelException {
    return getService().searchEntities(searchParams);
}

Spring返回禁止,403。 进行一些调试和代码潜水,我们发现其中一个过滤器HttpSessionSecurityContextRepository无法找到安全上下文。代码如下:

// Session exists, so try to obtain a context from it.

Object contextFromSession = httpSession.getAttribute(springSecurityContextKey);

if (contextFromSession == null) {
    if (debug) {
        logger.debug("HttpSession returned null object for SPRING_SECURITY_CONTEXT");
    }
    return null;
}

但安全上下文创建良好并存储。此外,当我调试代码时,我能够使用以下方式访问HttpSessionSecurityContextRepository中的安全上下文:

SecurityContextHolder.getContext()

那么,这个SecurityContextPersistenceFilter和HttpSessionSecurityContextRepository的问题是什么?

注意:我做了一个解决方法,手动存储HttpSessionSecurityContextRepository将要查找的上下文。

0 个答案:

没有答案