我使用的代码是:
Map<String, ?> result = Flux.range(1, 2)
.parallel(2)
.runOn(Schedulers.parallel())
.map(this::mapWithSecurityContextHolder)
.sequential()
.publishOn(Schedulers.single())
.collect(Collectors.toMap(Pair::getFirst, Pair::getSecond))
.block();
``` `mapWithSecurityContextHolder` 代码为:
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
Claims claims = (Claims) authentication.getDetails();
所以, `authentication` 是 `null` 因为flux线程不是请求线程和 `NullPointerException` 升起。
有什么想法吗?
1条答案
按热度按时间iyfamqjs1#
您可以(至少)通过两种方式来实现这一点,要么使用钩子,要么将其放在reactor上下文中。这基本上是一个选择,或多或少的明确。
(未测试,伪代码,可能要检查auth是否不为null等)
对于hooks解决方案,我将向您介绍作者使用hooks设置/使用mdc上下文的这篇博客文章。我自己从来没用过,但也可以用