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

Spring Security 6.x与Spring Boot 3.x中如何放行HTTP DELETE端点

问题分析与解决方案

你的DELETE请求返回403 Forbidden的核心原因是Spring Security默认启用的CSRF防护机制。Spring Security 6.x对DELETE、POST、PUT这类非安全HTTP方法,会强制校验CSRF令牌,而你在Postman测试DELETE请求时未携带有效令牌,因此被拦截。

至于POST/PUT请求能正常工作,大概率是你测试时通过浏览器会话或其他方式自动携带了CSRF令牌(比如Cookie中的令牌被自动附加),而Postman未配置该令牌。

解决方案

根据你的场景选择以下方案:

方案1:关闭CSRF保护(适合纯后端API场景)

如果你的服务是无状态的后端API,不需要前端页面的CSRF防护,可以直接关闭CSRF:
修改WebSecurityConfig中的securityFilterChain方法:

@Bean
SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
    http.authorizeRequests((authorizeRequests) -> authorizeRequests
            .requestMatchers("/**").hasAnyAuthority("USER"))
            .httpBasic(withDefaults())
            .csrf(csrf -> csrf.disable()); // 新增:关闭CSRF防护
    return http.build();
}

方案2:携带CSRF令牌(适合有前端页面的场景)

如果需要保留CSRF防护,需在DELETE请求中携带令牌:

  1. 先通过GET请求访问/csrf端点,获取CSRF令牌(Spring Security默认提供该端点)
  2. 在DELETE请求的请求头中添加X-XSRF-TOKEN,值为获取到的令牌

额外说明

你的WebSecurityCustomizer配置中,web.ignoring().requestMatchers(HttpMethod.GET).requestMatchers("/user")会忽略所有GET请求和/user路径的安全校验,但这不会影响DELETE请求的CSRF校验——CSRF是独立于权限校验的防护机制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 22:41:24