扩展ruoyi框架的异步线程并继承线程用户

文章介绍了如何在若依框架中扩展SecurityConfig,配置HttpSecurity以支持异步线程池。通过添加SecurityContextPersistenceFilter,确保在请求线程和异步线程间共享SecurityContext。同时,定义了线程池配置,设置了异步任务的异常处理器和任务装饰器,以处理安全上下文并确保在执行后清除。
摘要由CSDN通过智能技术生成

若依框架扩展支持异步线程池,并且能够将线程用户进行继承。

扩展SecurityConfig

扩展configure(HttpSecurity httpSecurity)

添加SecurityContextPersistenceFilter过滤器

@Override
protected void configure(HttpSecurity httpSecurity) throws Exception {
    // 注解标记允许匿名访问的url
    ExpressionUrlAuthorizationConfigurer<HttpSecurity>.ExpressionInterceptUrlRegistry registry = httpSecurity.authorizeRequests();
    permitAllUrl.getUrls().forEach(url -> registry.antMatchers(url).permitAll());
	// ...
    // 添加 SecurityContextPersistenceFilter 过滤器,用于在请求线程和异步执行线程之间共享 SecurityContext 上下文信息
    httpSecurity.addFilterBefore(new SecurityContextPersistenceFilter(), WebAsyncManagerIntegrationFilter.class);
    // ...
    
}
            

线程池

@Bean(name = "applicationEventExecutor")
public ThreadPoolTaskExecutor taskExecutor() {
    ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
    executor.setCorePoolSize(10);
    executor.setMaxPoolSize(50);
    executor.setQueueCapacity(100);
    executor.setThreadNamePrefix("applicationEventThread-");
    executor.setTaskDecorator(securityContextTaskDecorator());
    executor.initialize();
    return executor;
}

@Override
public Executor getAsyncExecutor() {
    return taskExecutor();
}

异步异常处理器getAsyncUncaughtExceptionHandler

@Override
public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
    return new SimpleAsyncUncaughtExceptionHandler();
}

异步任务装饰器

@Bean
public TaskDecorator securityContextTaskDecorator() {
    return runnable -> {
        SecurityContext securityContext = SecurityContextHolder.getContext();
        return () -> {
            try {
                SecurityContextHolder.setContext(securityContext);
                runnable.run();
            } finally {
                SecurityContextHolder.clearContext();
            }
        };
    };
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值