問題描述
main方法開啓異步處理
service使用異步註解
springSecurity 獲取認證信息返回null
問題原因
SpringSecurity 是線程綁定的 異步處理是重新new一個線程進行業務處理
所以說 新線程裏是沒有 認證信息的
解決方案
需要重寫AsyncConfigurer 使用SpringSecurity 的 裝飾線程池 這樣就可以攜帶認證信息了
@Configuration
public class AsyncConfig extends AsyncConfigurerSupport {
/**
* 異步執行需要使用權限框架自帶的包裝線程池 保證權限信息的傳遞
*/
@Override
public Executor getAsyncExecutor() {
return new DelegatingSecurityContextExecutorService(Executors.newFixedThreadPool(5));
}
}