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

Spring Security v3.0.0与Thymeleaf集成CSRF时出现403禁止错误

解决Spring Security提交表单出现403 Forbidden(CSRF验证失败)的问题

问题根源

你遇到的403错误是CSRF令牌验证失败导致的。虽然Thymeleaf确实会自动为表单注入CSRF令牌,但前提是你的表单必须正确使用Thymeleaf语法,否则令牌不会被添加,最终触发Spring Security的拦截。

排查与解决步骤

1. 检查表单的Thymeleaf语法是否正确

确保你的<form>标签使用Thymeleaf的th:action属性,而非普通的action。示例:

<!-- 正确写法:Thymeleaf会自动注入CSRF令牌 -->
<form th:action="@{/design}" method="post">
  <!-- 表单内容 -->
</form>

<!-- 错误写法:不会自动添加CSRF令牌 -->
<form action="/design" method="post">
  <!-- 表单内容 -->
</form>

普通action无法触发Thymeleaf的CSRF令牌自动注入逻辑,必须使用th:action绑定请求路径。

2. 验证页面是否生成了CSRF令牌

打开浏览器开发者工具查看页面源码,搜索是否存在以下字段:

<input type="hidden" name="_csrf" value="xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx"/>

如果没有这个字段,说明Thymeleaf未生成令牌,回到第一步修正表单语法。

3. 确认请求方式为POST

Spring Security默认仅对POST、PUT、DELETE等修改型请求做CSRF验证,GET请求不会触发该拦截。如果你的表单用GET提交数据,虽不会触发CSRF错误,但GET不适合提交修改类操作,建议改为POST。

4. 保留当前SecurityConfig的CSRF配置

你当前的配置仅忽略H2Console的CSRF校验,其他路径正常启用,这是符合安全规范的正确配置,无需修改。除非特殊场景,否则不建议全局禁用CSRF,会降低应用安全性。

额外排查点

如果以上步骤都没问题,可检查:

  • 用户登录后的会话Cookie是否正常存在(CSRF令牌依赖会话传递)
  • 浏览器是否禁用了Cookie(会导致CSRF令牌无法正常传递)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 21:30:25