据我所知,Spring安全过滤链每次请求@Async请求时运行两次,因为它在入站请求线程上运行,传递给在不同线程上运行的异步代码,然后在尝试时写入响应线程,安全过滤链再次运行。我相信这是由于使用ThreadLocal存储安全上下文。
我能够成功地将安全上下文传递给异步代码,问题是每当我尝试编写响应时,filterchain再次运行。
我遇到了类似这里描述的情况:
这是我们在使用spring security时应该考虑的简单预期的行为,还是我缺少一个会阻止第二次执行过滤链的配置?
答案 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不会将过滤器应用于从异步上下文中调度的呼叫。