0

如何测试我的反应式应用程序逻辑,注入 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 很少。我试图做一些蛮力的模拟,但被持有者的静态性质和反应上下文的额外复杂性挫败了。任何帮助将非常感激!

4

0 回答 0