Spring Boot集成Spring Security后购物车出现403错误排查
Spring Security 集成后购物车删除功能403错误排查与解决
集成Spring Security后,购物车删除操作触发403禁止访问,CartController的delete方法中logger.info("NUMBER"+cart_id)完全未执行,核心原因是CSRF令牌未正确传递,导致Spring Security拦截了请求。
问题代码分析
前端Cart.html中的CSRF隐藏字段存在表达式解析问题:
<input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}"/>
这段代码未使用Thymeleaf的th:前缀,导致Thymeleaf不会解析${_csrf.parameterName}和${_csrf.token}表达式,提交的表单中CSRF参数名和令牌是原始字符串,而非Spring Security生成的有效令牌,因此被CSRF防护拦截。
解决方案
修改CSRF隐藏字段,添加Thymeleaf前缀以正确解析表达式:
<input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}"/>
额外优化(可选)
如果使用Thymeleaf与Spring Security集成,可通过th:action自动注入CSRF令牌,无需手动编写隐藏字段:
<form method="post" th:action="@{/orderAdd}">
Thymeleaf会自动为带有th:action的表单添加CSRF隐藏字段,简化代码。
验证步骤
- 修改代码后,刷新页面并查看HTML源码,确认CSRF隐藏字段的
name为_csrf(或Spring Security配置的参数名),value为随机字符串格式的有效令牌。 - 测试删除操作,检查CartController的
delete方法是否执行,logger.info日志是否正常打印。
内容的提问来源于stack exchange,提问作者YuCheng Lin
相关产品推荐
相关产品推荐

