SpringBoot2 异步处理@Async 拿不到 SpringSecurity 认证信息问题

1.问题描述

main方法开启异步处理
在这里插入图片描述

使用异步注解
在这里插入图片描述

在这里插入图片描述

springSecurity 获取认证信息返回null,无法获取相关信息。

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

所以说 新线程里是没有 认证信息的
在这里插入图片描述

2.解决方案

在SecurityConfig配置类中加入以下配置,重写AsyncConfigurer 使用SpringSecurity 的 装饰线程池 这样就可以携带认证信息
在这里插入图片描述

    /**
     * SpringBoot2 异步处理@Async 拿不到 SpringSecurity 认证信息问题
     */
//    @Bean
//    public MethodInvokingFactoryBean methodInvokingFactoryBean() {
//        MethodInvokingFactoryBean methodInvokingFactoryBean = new MethodInvokingFactoryBean();
//        methodInvokingFactoryBean.setTargetClass(SecurityContextHolder.class);
//        methodInvokingFactoryBean.setTargetMethod("setStrategyName");
//        methodInvokingFactoryBean.setArguments((Object) new String[]{SecurityContextHolder.MODE_INHERITABLETHREADLOCAL});
//        return methodInvokingFactoryBean;
//    }

    /**
     * SpringBoot2 异步处理@Async 拿不到 SpringSecurity 认证信息问题
     * @return
     */
    @Bean
    public InitializingBean initializingBean(){
        return () -> SecurityContextHolder.setStrategyName(SecurityContextHolder.MODE_INHERITABLETHREADLOCAL);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值