如何使用来自 ReactiveSecurityContextHolder.getContext() 的参数调用 void 方法
Posted
技术标签:
【中文标题】如何使用来自 ReactiveSecurityContextHolder.getContext() 的参数调用 void 方法【英文标题】:How can I call a void method with a parameter coming from ReactiveSecurityContextHolder.getContext() 【发布时间】:2020-08-27 05:54:40 【问题描述】:我对 reactor 还很陌生,我已经被以下代码卡住了太多时间,这些代码对我不起作用,我不知道下一步该做什么。
我已将我的代码简化如下:
@RestController
public class HelloController
@Autowired
@Qualifier("currentUserService")
private CurrentUserContextService userContextService;
@GetMapping("/v1/hello2")
public Mono<PulseUser> getHello2()
final Mono<PulseUser> currentUser2 = Mono
.just(new PulseUser("login", "pasdsword", Collections.emptyList(), 65));
currentUser2.subscribe(user ->
System.out.println("+++++++++" + user);
);
userContextService.getCurrentUser().subscribe(user ->
System.out.println("*************" + user);
);
return userContextService.getCurrentUser();
像这样使用 userContextService:
@Service("currentUserService")
public class CurrentUserContextServiceImpl implements CurrentUserContextService
@Override
public Mono<PulseUser> getCurrentUser()
final Mono<SecurityContext> context = ReactiveSecurityContextHolder.getContext();
return context.map(security ->
final PulseUser details = (PulseUser) security.getAuthentication().getDetails();
return details;
);
有了这个,代码,我得到了什么:
如果我点击 /v1/hello2,我会收到当前用户的 json 响应:OK 我还获得了第一个 Sysout,带有“+++”分隔符的那个:好的 但我没有得到第二个,带有“****”分隔符的那个:KO我是这样诊断的:
我收到 json 响应,证明 getCurrentUser() 确实有效。 我得到了第一个 sysout,证明订阅代码确实有效 我没有得到我绝对无法理解的第二个系统输出。显然,我对第二个 sysout 感兴趣,因为它看起来像是我想要开始工作的代码,即:
调用myMethod(PulseUser myUser)
,其中myUser 来自userContextService.getCurrentUser()
。
稍微清楚一点:
public void touch(MyData data)
//use the mono value of userContextService.getCurrentUser()
//and call a method on data using the current PulseUser of the Mono
有人可以帮帮我吗?
【问题讨论】:
【参考方案1】:终于用ReactiveSecurityContextHolder is empty in Spring WebFlux这个帖子找到了解决办法
我试图访问通量之外的安全上下文,这导致了一个空的 Mono。
【讨论】:
以上是关于如何使用来自 ReactiveSecurityContextHolder.getContext() 的参数调用 void 方法的主要内容,如果未能解决你的问题,请参考以下文章
如何使用社交框架呈现来自 SKscene 的 UIViewController?
如何知道请求是不是来自缓存或不使用 AFNetworking
如何使用 RestTemplate 在 Spring MVC 应用程序中访问来自(来自 Spring RESTful 服务)的巨大 JSON