在parallelStream中获取安全上下文时为空主体[重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在parallelStream中获取安全上下文时为空主体[重复]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

当我尝试从并行流中的安全上下文中获取主体时,它总是在不在主线程中时返回null。

用户通过身份验证后,以下代码失败:

listOfSomething.parallelStream()
                .foreach(el -> { 
if (SecurityContextHolder.getContext().getAuthentication().getPrincipal() == null){
            throw new RuntimeException();
}});

文件说:

定义与当前执行线程关联的最小安全信息的接口。

但是,有什么办法吗?它从主线程开始并使用ForkJoinPool

谢谢!

答案

看来你需要使用不同的SecurityContextHolder策略。有关如何更改它的更多详细信息,请参阅https://docs.spring.io/spring-security/site/docs/5.0.0.RELEASE/reference/htmlsingle/#securitycontextholder-securitycontext-and-authentication-objects

以上是关于在parallelStream中获取安全上下文时为空主体[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Qml 上下文对象在应用程序关闭时为空

深入浅出parallelStream

Java 8 的 parallelStream 中产生了多少线程?

Stream的collect方法是怎么保证线程安全的

从 Spring 安全上下文中获取 userAuthentication 对象

带有 spring 注释方法的 Java .parallelStream()