【发布时间】:2011-03-28 22:19:50
【问题描述】:
我在我的服务中使用异步方法(Spring 3 @Async 注释)。而且我遇到了一个问题 - 生成的线程没有安全上下文。原因是 Spring Security 默认使用 SecurityContextHolder.MODE_THREADLOCAL 策略作为其上下文持有者。但我需要使用SecurityContextHolder.MODE_INHERITABLETHREADLOCAL 策略。
目前我在 AuthenticationSuccessHandler 中设置了策略。但在我看来,这不是一个好习惯。
那么如何在上下文配置文件中进行设置呢?
Spring Security 的版本是 3.0.0。
【问题讨论】:
-
请注意,对于 Web 应用程序,这是一个错误的问题。使用
MODE_INHERITABLETHREADLOCAL可能会导致线程池包含具有错误安全上下文的异步任务线程。更好的方法是使用在运行任务时委托安全上下文的执行程序。见这里:Spring Security and @Async (Authenticated Users mixed up)