SpringBoot2 + Webflux - WebTestClient всегда возвращает «401 НЕСАНКЦИОНИРОВАННО» - PullRequest
0 голосов
/ 11 октября 2019

Я пытаюсь написать какой-нибудь тест с использованием WebTestClient под Springboot 2.1.8 и Junit5

Он всегда возвращает <401 UNAUTHORIZED Unauthorized, но на самом деле он вообще не дошел до уровня контроллера или сервиса. Это может быть связано с весенней безопасностью, только мое предположение. </p>

Проект создан с использованием 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);
    }
}

1 Ответ

0 голосов
/ 15 октября 2019

У вас implementation "org.springframework.boot:spring-boot-starter-security "в ваших зависимостях gradle. Spring boot автоматически включает безопасность на всех конечных точках по умолчанию, когда эта зависимость обнаруживается в classpath.

Вы можете отключить эту конфигурацию по умолчанию, обновивmain class:

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

Это отключит защиту на всех конечных точках.

Если вы хотите контролировать, с каких конечных точек снимать защиту, вы можете сделать это с помощью приведенного ниже кода с соответствующими обновлениями. Ваши требования:

@Configuration
public class SecurityConfiguration {

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