关于在Spring Boot + SpringSecurity工程中Sercurity上下文对象无法传递至新线程的问题解决

关于在Spring Boot + SpringSecurity工程中Sercurity上下文对象无法传递至新线程的问题解决

背景

OJ系统后端开发过程中,前端用户提交代码后,后端接收到请求开始对提交记录进行保存并开启一个新线程用于判题,但是由于开启了Mybatis-plus自动填充功能,在保存数据时需要从Sercurity上下文对象中取得UserDetail信息,由于新线程的SercurityConxt中的UserDetail信息为空导致空指针异常。最终通过Security自动传递解决问题

添加线程池Bean

java 复制代码
@Configuration
public class AsyncConfig implements AsyncConfigurer {
    @Override
    public Executor getAsyncExecutor() {
        // 使用 DelegatingSecurityContextExecutorService 包装线程池
        return new DelegatingSecurityContextExecutorService(Executors.newFixedThreadPool(5));
    }
}

添加后通过@Async注解开启的异步线程可在创建时获取到SercurityContext对象。

相关推荐
Light604 分钟前
破局“数据孤岛”:构建业务、财务、指标三位一体的智能数据模型
java·大数据·开发语言
中文很快乐5 分钟前
从零到一:用 SpringBoot 打造 RESTful API 实战指南
java·spring boot·后端·restful
泉城老铁7 分钟前
springboot+redis 如何实现订单的过期
java·后端·架构
哈哈哈笑什么10 分钟前
在高并发分布式SpringCloud系统中,什么时候时候并行查询,提高查询接口效率,从10s到100ms
java·分布式·后端
IMPYLH11 分钟前
Lua 的 warn 函数
java·开发语言·笔记·junit·lua
Java水解12 分钟前
Django实现接口token检测的实现方案
后端·django
南雨北斗12 分钟前
kotlin密封类的主要用途
后端
泉城老铁14 分钟前
如何用Spring Boot实现分布式锁?
java·redis·后端
飞Link15 分钟前
【Django】Django 调用外部 Python 程序的完整指南
后端·python·django·sqlite
周杰伦_Jay21 分钟前
【Java集合与线程池深度解析】底层原理+实战选型+避坑指南(附代码)
java·开发语言·python