gpt4 book ai didi

java - 如何使用来自 ReactiveSecurityContextHolder.getContext() 的参数调用 void 方法

转载 作者:行者123 更新时间:2023-12-01 16:48:38 26 4
gpt4 key购买 nike

我对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 响应:好的
  • 我还得到了第一个 Sysout ,即带有“+++”分隔符的 Sysout :好的
  • 但我没有得到第二个,即带有“****”分隔符的:KO

我是这样诊断的:

  • 我收到了 json 响应,证明 getCurrentUser() 确实有效。
  • 我得到了第一个系统输出,这证明订阅代码确实有效
  • 我没有得到第二个系统输出,我绝对无法理解。

显然,我对第二个系统输出感兴趣,因为它看起来像我想要开始工作的代码,即:调用 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
}

有哪位高人可以帮帮我吗?

最佳答案

最后,使用这篇文章找到了解决方案 ReactiveSecurityContextHolder is empty in Spring WebFlux

我试图访问 Flux 之外的安全上下文,这导致了一个空的 Mono。

关于java - 如何使用来自 ReactiveSecurityContextHolder.getContext() 的参数调用 void 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61733975/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com