问题描述
main方法开启异步处理
service使用异步注解
springSecurity 获取认证信息返回null
问题原因
SpringSecurity 是线程绑定的 异步处理是重新new一个线程进行业务处理
所以说 新线程里是没有 认证信息的
解决方案
需要重写AsyncConfigurer 使用SpringSecurity 的 装饰线程池 这样就可以携带认证信息了
@Configuration
public class AsyncConfig extends AsyncConfigurerSupport {
@Override
public Executor getAsyncExecutor() {
return new DelegatingSecurityContextExecutorService(Executors.newFixedThreadPool(5));
}
}