spring 如何在Sping Boot 3中禁用CSRF仅用于测试

e4yzc0pl  于 2023-09-29  发布在  Spring
关注(0)|答案(1)|浏览(156)

我正在使用Sping Boot 3.1.2为应用程序编写测试。应用程序启用了csrf,但是当csrf打开时,测试中的授权失败,因此我只想在测试中关闭它。
我的安全配置目前看起来像这样:

@Bean
protected SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
    http
        .authorizeHttpRequests(auth -> auth
            .requestMatchers(openUrls).permitAll()
            .anyRequest().hasAuthority(applicationRoleKey))
        .oauth2ResourceServer(oauth -> oauth
            .jwt(jwt -> jwt.jwtAuthenticationConverter(jwtAuthenticationConverter())));
    return http.build();
}

失败的示例测试(得到406而不是400):

@Test
@WithMockUser(authorities = "user=admin")
void asAdmin_canGetPhoto() throws Exception {
  mockMvc.perform(MockMvcRequestBuilders.get("/photo")).andExpect(status().isOk());
}

仅在测试时禁用CSRF的推荐方法是什么?我只能找到使用过时版本的Spring Security的解决方案。
感谢任何指导!
编辑:通过将.with(csrf())添加到测试中解决。

guicsvcw

guicsvcw1#

通过将.with(csrf())添加到测试中而不是禁用测试的csrf解决了这个问题。

相关问题