Как проверить контроллер, который принимает токен jwt через @AuthenticationPrincipal (Spring boot) - PullRequest
0 голосов
/ 23 октября 2018

У меня есть SecurityConfig:

@EnableWebFluxSecurity
public class SecurityConfig {

  @Bean
  SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {
         http
            .authorizeExchange()
            .pathMatchers("/ordermodifyservice/status").permitAll()
            .anyExchange().authenticated()
            .and()
            .cors().configurationSource(corsConfigurationSource())
            .and()
            .oauth2ResourceServer()
            .jwt();
         return http.build();
   }
}

И у моего контроллера покоя есть параметр @AuthenticationPrincipal @RequestHeader Jwt jwt:

    @GetMapping(value = "/api/method", produces = MediaType.APPLICATION_JSON_VALUE)
    public Mono<Something> method(@AuthenticationPrincipal 
                                  @RequestHeader("Authorization") String jwt) {
            // return something
    }

Когда я пытаюсь проверить этот код через почтальона, все в порядке, но яНе понимаю, как я могу написать интеграционный тест для этого, я пытаюсь что-то вроде этого:

@Test
public void test() {
   webTestClient
            .get()
            .uri("/ordermodifyservice/api/orderDetails/aggregated/" + DEFAULT_ORDER_ID)
            .headers(httpHeaders -> {
                httpHeaders.add("Authorization", "Bearer " + someToken);
            })
            .exchange().is2xxSuccessful();
}

Я получаю ошибку java.lang.IllegalArgumentException: headers cannot be empty На самом деле код работает даже без @RequestHeader.Кто-нибудь знает, как я могу легко создать интеграционный тест на контроллере покоя, который нуждается в токене jwt?

...