SpringBoot 2.X 异步处理@Async 拿不到 SpringSecurity 认证信息问题 解决方案

问题描述

main方法开启异步处理

service使用异步注解

springSecurity 获取认证信息返回null

问题原因

SpringSecurity 是线程绑定的  异步处理是重新new一个线程进行业务处理

所以说 新线程里是没有 认证信息的

解决方案

需要重写AsyncConfigurer 使用SpringSecurity 的 装饰线程池 这样就可以携带认证信息了

@Configuration
public class AsyncConfig extends AsyncConfigurerSupport {

    /**
     * 异步执行需要使用权限框架自带的包装线程池  保证权限信息的传递
     */
    @Override
    public Executor getAsyncExecutor() {
        return new DelegatingSecurityContextExecutorService(Executors.newFixedThreadPool(5));
    }

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章