在parallelStream中获取安全性上下文时为空主体

时间:2018-01-03 11:24:43

标签: java spring spring-boot spring-security stream

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

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

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

文档说:

  

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

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

谢谢!

1 个答案:

答案 0 :(得分:2)

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