单元测试在Spring WebFlux Security中的允许路由上返回401未经授权

cnwbcb6i  于 2023-02-04  发布在  Spring
关注(0)|答案(1)|浏览(226)

我尝试测试返回对象数组的路由,但测试失败,因为它返回Unauthorized而不是200 OK
我的测试课

@RunWith(SpringRunner.class)
@WebFluxTest(value = CatController.class)
class ContentManagementTestApplicationTests {

    @Autowired
    ApplicationContext context;
    @Autowired
    private WebTestClient webTestClient;
    
    @MockBean
    CatRepository catRepository;

    @BeforeEach
    public void setup(){
        webTestClient=WebTestClient.bindToApplicationContext(context)
                .apply(SecurityMockServerConfigurers.springSecurity())
                .configureClient()
                .build();
    }
    @Test
    void contextLoads() {

    }
    

  @Test
  public void getApprovedCats(){
        webTestClient.get()
                .uri("/cat")
                .accept(MediaType.APPLICATION_JSON)
                .exchange()
                .expectStatus().isOk();
  }

}

和应用程序安全配置类,有一个安全网络过滤器链Bean

@Bean
    SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http, AuthConverter jwtAuthConverter, AuthManager jwtAuthManager){

        AuthenticationWebFilter jwtFilter = new AuthenticationWebFilter(jwtAuthManager);
        jwtFilter.setServerAuthenticationConverter(jwtAuthConverter);

        return http .csrf().disable()
              .authorizeExchange()

              .pathMatchers(HttpMethod.GET,"/cat").permitAll()
              
                .anyExchange()
               .authenticated()
               .and()
              .addFilterAt(jwtFilter, SecurityWebFiltersOrder.AUTHORIZATION)
              .formLogin().disable()
               .httpBasic().disable()

               .build();
    }

JUint测试上的错误显示如下
java.lang.AssertionError:预期状态:〈200 OK〉,但实际为:〈401 UNAUTHORIZED〉预期状态:200 OK实际状态:401 UNAUTHORIZED
在测试失败并显示未授权之前,在控制台中打印"使用生成的安全密码:8e5dd468 - 3fd1 - 42b6 - 864a-c4c2ed2227b7 "我认为不应打印该内容,因为我在securityFilterChain中禁用了它

nhhxz33t

nhhxz33t1#

@WebFluxTestJavadoc开始:
可用于关注Spring WebFlux组件的Spring WebFlux测试的注解。使用此注解将禁用完全自动配置,而仅应用与WebFlux测试相关的配置
如果您希望加载完整的应用程序配置并使用WebTestClient,则应该考虑将@SpringBootTest与@AutoConfigureWebTestClient结合使用,而不是使用此注解。
换句话说,在测试中使用@WebFluxTest时,SecurityWebFilterChain不会被选中。
试着用@SpringBootTest来注解你的类。

相关问题