Closed renfei closed 3 years ago
当使用 @Async 时,会使用线程池中的子线程运行。Spring Security 安全上下文默认策略为MODE_THREADLOCAL,ThreadLocal 机制来保存每个使用者的安全上下文。这就造成了在子线程中无法获取到安全上下文。
@Async
MODE_THREADLOCAL
SecurityContextHolder.setStrategyName(SecurityContextHolder.MODE_INHERITABLETHREADLOCAL)
当使用
@Async
时,会使用线程池中的子线程运行。Spring Security 安全上下文默认策略为MODE_THREADLOCAL
,ThreadLocal 机制来保存每个使用者的安全上下文。这就造成了在子线程中无法获取到安全上下文。解决方案
@Async
使用同步执行,不使用子线程异步执行SecurityContextHolder.setStrategyName(SecurityContextHolder.MODE_INHERITABLETHREADLOCAL)
安全上下文策略