Spring Boot + Spring Security解決POST方式下的CSRF問題

以下配置基於spring boot版本1.4.2.RELEASE,默認引入的spring security版本爲4.1.3.RELEASE,頁面模板採用thymeleaf。

問題現象:
HTTP Status 403-Invalid CSRF Token 'null' was found on the request parameter '_csrf' or header 'X-CSRF-TOKEN'.

關於CSRF的描述,此處不再贅述,解決方案如下。
第1、2、3種方案測試通過,第四種方式未做測試。

1.定義headers,post方式提交的時候帶上headers的信息。

var headers = {};
headers['X-CSRF-TOKEN'] = "[[${_csrf.token}]]";
$.ajax({
    url: url,
    type: "POST",
    headers: headers,
    dataType: "json",
    success: function(result) {
    }
});

2.直接作爲參數提交。

$.ajax({
    url: url,
    data: {
        "[[${_csrf.parameterName}]]": "[[${_csrf.token}]]"
        },
    type: "POST",
    dataType: "json",
    success: function(result) {
    }
});

3.form提交的時候,如果出現csrf問題,可將該參數作爲隱藏項。跟第二種方式類似。

<input type="hidden" th:name="${_csrf.parameterName}" th:value="${_csrf.token}">

4.在 @EnableWebSecurity配置中,禁用CSRF。

http.csrf().disable();


作者:吳俊達
鏈接:https://www.jianshu.com/p/9a7b8b441b24
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章