【问题标题】:SpringBoot2 + Webflux - WebTestClient always returns “401 UNAUTHORIZED”SpringBoot2 + Webflux - WebTestClient 总是返回“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 文件
  • 我已经在上面更新了。非常感谢

标签: spring spring-boot junit spring-security spring-webflux


【解决方案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();
  }
}

【讨论】:

  • 非常感谢您的帮助!
猜你喜欢
  • 2018-09-06
  • 1970-01-01
  • 2021-10-11
  • 2023-01-20
  • 1970-01-01
  • 2020-12-15
  • 2019-06-12
  • 2015-03-13
  • 2021-09-02
相关资源
最近更新 更多