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

}

 

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