SpringSecurity框架的解决方式
java
// 异步之前主线程获取上下文
SecurityContext securityContext = SecurityContextHolder.getContext();
//异步操作
CompletableFuture.runAsync(() -> {
try {
// 上下文重新赋值,保证后续逻辑可以使用
SecurityContextHolder.setContext(securityContext);
// 业务逻辑调用(获取方式和主线程的写法一致)
// todo...
} catch (Exception e) {
e.printStackTrace();
} finally {
// 最终清理
SecurityContextHolder.clearContext();
}
});SpirngBoot框架的解决方式
java
// 异步之前主线程获取上下文
RequestAttributes attributes = RequestContextHolder.getContext();
// 异步操作
CompletableFuture.runAsync(() -> {
try {
// 上下文重新赋值,保证后续逻辑可以使用
RequestContextHolder.setRequestAttributes(attributes);
// 业务逻辑调用(获取方式和主线程的写法一致)
// todo...
} catch (Exception e) {
e.printStackTrace();
} finally {
// 最终清理
RequestContextHolder.resetRequestAttributes();
}
});