Skip to content

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();
    }
});

MIT版权,未经许可禁止任何形式的转载