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请求中携带令牌:
- 先通过GET请求访问
/csrf端点,获取CSRF令牌(Spring Security默认提供该端点) - 在DELETE请求的请求头中添加
X-XSRF-TOKEN,值为获取到的令牌
额外说明
你的WebSecurityCustomizer配置中,web.ignoring().requestMatchers(HttpMethod.GET).requestMatchers("/user")会忽略所有GET请求和/user路径的安全校验,但这不会影响DELETE请求的CSRF校验——CSRF是独立于权限校验的防护机制。
内容的提问来源于stack exchange,提问作者user20574784
相关产品推荐
相关产品推荐

