我猜想
MODE_INHERITABLETHREADLOCAL线程池不能正常工作。
作为一种可能的解决方案,你可以尝试继承
ThreadPoolTaskExecutor并覆盖其方法以进行
SecurityContext手动传播,然后声明该
executor而不是
<task:executor>,如下所示:
public void execute(final Runnable r) { final Authentication a = SecurityContextHolder.getContext().getAuthentication(); super.execute(new Runnable() { public void run() { try { SecurityContext ctx = SecurityContextHolder.createEmptyContext(); ctx.setAuthentication(a); SecurityContextHolder.setContext(ctx); r.run(); } finally { SecurityContextHolder.clearContext(); } } });}


