import org.apache.shiro.SecurityUtils;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.ThreadContext;
import java.util.concurrent.*;
public class ShiroAwareThreadPoolExecutor extends ThreadPoolExecutor {
public ShiroAwareThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime,
TimeUnit unit, BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory, RejectedExecutionHandler handler) {
super(corePoolSize, maximumPoolSize, keepAliveTime, unit, workQueue, threadFactory, handler);
}
@Override
public void execute(Runnable command) {
super.execute(wrap(command, ThreadContext.getSubject()));
}
private Runnable wrap(final Runnable task, final Subject subject) {
return () -> {
try {
ThreadContext.bind(subject);
task.run();
} finally {
ThreadContext.unbindSubject();
ThreadContext.unbindSecurityManager();
}
};
}
}
public class ThreadPoolDemo {
public static void main(String[] args) {
// 建立自定義執行緒池
ExecutorService threadPool = new ShiroAwareThreadPoolExecutor(
10, 50, 60, TimeUnit.SECONDS, new LinkedBlockingQueue<>(100),
Executors.defaultThreadFactory(), new ThreadPoolExecutor.AbortPolicy()
);
// 提交任務到執行緒池
threadPool.submit(() -> {
System.out.println("執行任務: " + Thread.currentThread().getName());
// 執行需要 Shiro SecurityManager 的操作
// 注意:這裡需要確保 Shiro 已經正確初始化
System.out.println("當前使用者: " + SecurityUtils.getSubject().getPrincipal());
});
// 關閉執行緒池
threadPool.shutdown();
}
}
多執行緒中自定義執行緒池與shiro導致的許可權錯亂問題解決
相關文章
- WebMagic多執行緒導致註解失效問題Web執行緒
- 多執行緒【執行緒池】執行緒
- Java多執行緒中執行緒安全與鎖問題Java執行緒
- java多執行緒與併發 - 執行緒池詳解Java執行緒
- 解決POI多執行緒匯出時資料錯亂問題執行緒
- Qt中的多執行緒與執行緒池淺析+例項QT執行緒
- Java多執行緒-執行緒池的使用Java執行緒
- Android多執行緒之執行緒池Android執行緒
- kuangshenshuo-多執行緒-執行緒池執行緒
- 多執行緒之手撕執行緒池執行緒
- java多執行緒9:執行緒池Java執行緒
- java--執行緒池--建立執行緒池的幾種方式與執行緒池操作詳解Java執行緒
- 執行緒與多執行緒執行緒
- python實現自定義執行緒池Python執行緒
- iOS多執行緒全套:執行緒生命週期,多執行緒的四種解決方案,執行緒安全問題,GCD的使用,NSOperation的使用iOS執行緒GC
- 【Java】【多執行緒】執行緒池簡述Java執行緒
- 多執行緒問題解釋執行緒
- 多執行緒------執行緒與程式/執行緒排程/建立執行緒執行緒
- Json序列化與反序列化導致多執行緒執行速度和單執行緒執行速度一致問題JSON執行緒
- 敲開阿里大門的執行緒、多執行緒和執行緒池面試專題阿里執行緒面試
- 多執行緒系列(三):執行緒池基礎執行緒
- Android程式框架:執行緒與執行緒池Android框架執行緒
- Java多執行緒學習(八)執行緒池與Executor 框架Java執行緒框架
- Java中解決多執行緒資料安全問題Java執行緒
- 詳解執行緒池的作用及Java中如何使用執行緒池執行緒Java
- 多執行緒的安全問題及解決方案執行緒
- 執行緒和執行緒池執行緒
- 執行緒 執行緒池 Task執行緒
- java中執行緒池的生命週期與執行緒中斷Java執行緒
- 【連載 05】自定義執行緒池(上)執行緒
- 【連載 06】自定義執行緒池(下)執行緒
- 執行緒與執行緒池的那些事之執行緒池篇(萬字長文)執行緒
- Java併發 之 執行緒池系列 (1) 讓多執行緒不再坑爹的執行緒池Java執行緒
- 深入淺出Java多執行緒(十二):執行緒池Java執行緒
- 多執行緒:執行緒池理解和使用總結執行緒
- java多執行緒:執行緒池原理、阻塞佇列Java執行緒佇列
- 多執行緒之間通訊及執行緒池執行緒
- C#多執行緒開發-執行緒池03C#執行緒