SpringBoot2 + Webflux - WebTestClient 总是返回“401 UNAUTHORIZED”

Posted

技术标签:

【中文标题】SpringBoot2 + Webflux - WebTestClient 总是返回“401 UNAUTHORIZED”【英文标题】:SpringBoot2 + Webflux - WebTestClient always returns “401 UNAUTHORIZED” 【发布时间】:2020-02-09 09:10:02 【问题描述】:

我正在尝试在 Springboot 2.1.8 和 Junit5 下使用 WebTestClient 编写一些测试

它总是返回

该项目是使用 JHipster 生成的。这是build.gradle

-----------------UimApiServiceImplTest.java-------------------

...


@ExtendWith(SpringExtension.class)
@WebFluxTest(controllers = UserGuidController.class)
@ContextConfiguration(classes = UserGuidController.class, UimApiServiceImpl.class)

public class UimApiServiceImplTest 

    @Autowired
    private WebTestClient webTestClient;

    @Test
    public void testGetGuidByEmail() 

        webTestClient.get()
            .uri("/uimapi/getguid/email", "someone@xxxxx.com")
            .accept(MediaType.APPLICATION_JSON_UTF8)
            .exchange()
            .expectStatus().isOk();
    

--------UserGuidController.java--------

...
@RestController
@RequestMapping("/uimapi")
public class UserGuidController 

    @Autowired
    private UimApiServiceImpl uimApiService;

    private static final Logger logger = LoggerFactory.getLogger(UserGuidController.class);

    @GetMapping("/getguid/email")
    public String getUserGuid(@PathVariable String email) 
        return uimApiService.getUserGuid(email);
    

【问题讨论】:

请分享你的 pom 文件 我已经在上面更新了。非常感谢 【参考方案1】:

对于 webflux,您可以通过排除 ReactiveSecurityAutoConfiguration 类来禁用 SecurityAutoconfiguration,如下所示:

@WebFluxTest(controllers = YourController.class,excludeAutoConfiguration = ReactiveSecurityAutoConfiguration.class))

【讨论】:

效果很好,谢谢!这应该被标记为解决方案...【参考方案2】:

您的 gradle 依赖项中有 implementation "org.springframework.boot:spring-boot-starter-security"。默认情况下,当在类路径中找到此依赖项时,Spring Boot 会自动在所有端点上启用安全性。

您可以选择通过更新主类来禁用此默认配置:

@SpringBootApplication(exclude =  SecurityAutoConfiguration.class, ManagementWebSecurityAutoConfiguration.class )

这将禁用所有端点的安全性。

如果您想控制要从中删除安全性的端点,您可以使用以下代码和符合您要求的更新来做到这一点:

@Configuration
public class SecurityConfiguration 

  @Bean
  public SecurityWebFilterChain securityFilterChain(ServerHttpSecurity http) 
    http.authorizeExchange().anyExchange().permitAll();
    return http.build();
  

【讨论】:

非常感谢您的帮助!

以上是关于SpringBoot2 + Webflux - WebTestClient 总是返回“401 UNAUTHORIZED”的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot2 + Webflux - WebTestClient 总是返回“401 UNAUTHORIZED”

springboot2 webflux 响应式编程学习路径

SpringBoot2.0WebFlux响应式编程知识总结

[转]springboot2 webflux 响应式编程学习路径

Springboot2.0中webflux到底优秀在哪里

好课推荐:SpringBoot2.0不容错过的新特性WebFlux响应式编程高清完整