問題:
最近在學習 Spring Boot,實戰的時候遇到了問題,就是添加了 spring-boot-starter-security 依賴後,使用 thymeleaf 提交表單後報 403 錯誤。
原因是:
添加上述依賴後,默認開啓了防止跨域攻擊的功能,任何 POST 提交到後臺的表單都要驗證是否帶有 _csrf 參數,一旦傳來的 _csrf 參數不正確,服務器便返回 403 錯誤;
解決方案:
1、比較常規的解決方案就是,在 form 表單中添加 th:action 屬性, thymeleaf 會 自動在 form 表單中生成 _csrf 隱藏域,代碼如下:
<form method="POST" th:action="@{/add}">...</form>
可以打開頁面調試,在 Network 欄目下查看提交數據,可以觀察到 Form Data 裏面生產了 _csrf 數據。
2、還有比較直接的解決方案,就是在重寫的 configure(HttpSecurity http) 方法中關閉防跨域攻擊功能,不太推薦:
http.csrf().disable()
3、還有一種就是在 form 表單中手動添加隱藏 _csrf,比較麻煩,有興趣的可以網上搜索一下具體做法。