对于异步请求,spring security filterchain是否总是运行两次?

时间:2016-05-10 12:26:11

标签: spring asynchronous spring-security

据我所知,Spring安全过滤链每次请求@Async请求时运行两次,因为它在入站请求线程上运行,传递给在不同线程上运行的异步代码,然后在尝试时写入响应线程,安全过滤链再次运行。我相信这是由于使用ThreadLocal存储安全上下文。

我能够成功地将安全上下文传递给异步代码,问题是每当我尝试编写响应时,filterchain再次运行。

我遇到了类似这里描述的情况:

http://forum.spring.io/forum/spring-projects/security/747178-security-filter-chain-is-always-calling-authenticationmanager-twice-per-request

这是我们在使用spring security时应该考虑的简单预期的行为,还是我缺少一个会阻止第二次执行过滤链的配置?

2 个答案:

答案 0 :(得分:1)

在这里得到答案:https://github.com/spring-projects/spring-security-oauth/issues/736

显然修复是configure security.filter-dispatcher-types=REQUEST, ERROR

答案 1 :(得分:0)

设置属性spring.security.filter.dispatcher-types=REQUEST,ERROR。 Spring不会将过滤器应用于从异步上下文中调度的呼叫。