개요
- 개인 프로젝트를 SSR로 진행하며, Spring Security를 사용할 때 간만에 CSRF 토큰을 활성화 하고자 하였다.
- 하지만 예전에 Ajax를 활용한 프로젝트를 할 때는 아래와 같이 헤더에 별도로 설정 안해도 바로 꺼내서 사용하곤 했었다.
JQuery Ajax 사용 시
let header = $("meta[name='_csrf_header']").attr('content');
let token = $("meta[name='_csrf']").attr('content');
$.ajax({
type: "post",
url: "/comment/create",
beforeSend: function (xhr) {
xhr.setRequestHeader(header, token);
},
data: {
"articleId": articleId,
"secret": secretValue,
"commentContents": contents
},
... 기타 정보
문제점
- 그러면 JavaScript 사용할때도 똑같은거 아니야? 했지만 못꺼내온다.
- Chat GPT는 정말 헛소리 엄청 하다가, 역시 웹검색 돌리고 또 헛소리해도 혼내니까 다시 알려준다.
꺼내서 사용하기
- thymleaf 문법 사용하여 꺼내올 수 있다.
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta th:name="'_csrf'" th:content="${_csrf.token}" />
<meta th:name="'_csrf_header'" th:content="${_csrf.headerName}" />
</head>

JavaScript 사용하기
const header = document
.querySelector("meta[name='_csrf_header']")
?.getAttribute("content")
?? "";
const token = document
.querySelector("meta[name='_csrf']")
?.getAttribute("content")
?? "";
const requestHeaders = {
'Content-Type': 'application/json'
};
if (header && token) {
requestHeaders[header] = token;
}
fetch(
url,
{
method: method,
headers: requestHeaders,
body: JSON.stringify(dataObj)
}
)
- JavaScript에서 CSRF 토큰 꺼내서 API 요청 보내는거 구현중인 누군가에게 도움이 되길~!~!