You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring 5中csrf()方法所属包是哪个?测试如何避免CSRF 403错误

解决Spring 5集成测试CSRF配置报错403的方案

方案1:导入对应依赖复用原有csrf()方法(优先推荐)

org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors类并未在Spring 5中被移除,它属于独立的spring-security-test模块,需要显式引入测试依赖:

  • Maven 配置(pom.xml):
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-test</artifactId>
    <version>与项目使用的Spring Security版本保持一致</version>
    <scope>test</scope>
</dependency>
  • Gradle 配置:
testImplementation 'org.springframework.security:spring-security-test:<你的Spring Security版本号>'

依赖导入完成后即可正常静态导入方法使用,原有测试代码无需修改:

import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.csrf;

方案2:测试环境临时关闭CSRF校验

如果你的接口是服务端对接类接口,本身不需要CSRF防护,可以在测试专属的安全配置中关闭CSRF,无需调整测试请求代码:

@Configuration
@EnableWebSecurity
public class TestSecurityConfig {
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        // 保留原有其他安全配置,仅关闭CSRF校验
        http.csrf(csrf -> csrf.disable());
        return http.build();
    }
}

在测试类上添加@Import(TestSecurityConfig.class)引入该配置即可。
注意:该方案仅建议在测试环境或确认业务无CSRF风险时使用,生产环境开启CSRF可防范跨站请求伪造攻击。

方案3:手动携带CSRF Token发起请求

如果不想引入额外依赖也不想修改安全配置,可以手动生成并携带合法CSRF Token:

// 生成合法CSRF Token
CsrfToken csrfToken = new HttpSessionCsrfTokenRepository().generateToken(null);
mockMvc.perform( post("/my_endpoint")
            .contentType(MediaType.APPLICATION_JSON)
            .header("Authorization", my_credentials)
            // 携带CSRF Token请求头
            .header(csrfToken.getHeaderName(), csrfToken.getToken())
            .content(jsonPayload)
        )
        .andExpect(status().isOk());

内容的提问来源于stack exchange,提问作者Alex Vergara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 16:30:05