我想在为springboot应用程序进行集成测试时禁用csrf。我已经尝试过security.enable-csrf = false,但似乎没有任何效果。我也试过通过SecurityMockMvcRequestPostProcessors.csrf方法在我的测试中传递csrf令牌,但无济于事。
在我的应用程序中,有自定义SecurityConfig,它扩展了WebSecurityConfigurerAdapter,代码如下:
http
.csrf() .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
.and()
.authorizeRequests()
.antMatchers(LOGIN_URL).permitAll()
.antMatchers("/api/v1/forgotpwd").permitAll()
.antMatchers("/api/v1/changepwd").permitAll()
.antMatchers("/api/v1/isLoggedIn").permitAll()
.antMatchers("/api/**").authenticated()
.and()
.logout().logoutUrl("/api/v1/logout").deleteCookies("JSESSIONID").invalidateHttpSession(true)
.logoutSuccessHandler(new HttpStatusReturningLogoutSuccessHandler())
.and()
.addFilter(jsonUsernamePasswordAuthenticationFilter())
.addFilterAfter(new MDCEmailSetterFilter(),JsonUsernamePasswordAuthenticationFilter.class);
如果我设置http.csrf()。disable(),我的测试工作并且csrf令牌认证失败不会发生,否则会抛出403,消息说csrf令牌无法验证。
任何帮助?
答案 0 :(得分:1)
http.csrf().disable()
您只能为测试配置文件调用它,例如
@Value("${spring.profiles.active}")
private String activeProfile;
if (activeProfile.trim().equalsIgnoreCase("integrational-tests")) {
http.csrf().disable();
}