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));
    }

}

猜你喜欢

转载自blog.csdn.net/weixin_40461281/article/details/107017983