如何测试我的反应式应用程序逻辑,注入 ReactiveSecurityContext,而不通过在真实应用程序中设置身份验证的 rsocket 基础设施?
对于我正在进行的测试,我想避免创建 rsocket 客户端的额外复杂性,跳过 Web 服务器和控制器并直接调用服务并在返回的通量上使用 StepVerifier。但是,我不知道如何将 ReactiveSecurityContext 注入 ReactiveSecurityContextHolder。在实际应用中,我们使用 oauth2、JwtReactiveAuthenticationManager 和 @EnableRSocketSecurity,并像这样检索用户名:
class ReactorUtils {
// ...
public static Mono<String> getUserId() {
return ReactiveSecurityContextHolder.getContext()
.map(SecurityContext::getAuthentication)
.map(Principal::getName);
}
然后像这样使用它:
@Service
class DataQueryService {
// ...
public Flux<String> getUpdates(...) {
return ReacorUtils.getUserId().flatMapMany(userId -> {
// return flux of data that the user is permitted to see
});
}
}
我已经看到了很多常规 MVC,从 @WithMockUser 开始,但对于 ReactiveSecurityContextHolder 很少。我试图做一些蛮力的模拟,但被持有者的静态性质和反应上下文的额外复杂性挫败了。任何帮助将非常感激!