Ajax(Asynchronous Javascript and XML)
웹 페이지 전체를 새로고침하지 않고 웹 페이지의 일부만을 갱신할 수 있게한다.
CSRF(Cross Site Request Forgery)
사용자가 이미 로그인해서 들고있는 세션정보를 악의적인 링크를 클릭하게 해서 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(등록, 수정, 삭제)를 특정 웹 사이트에 요청하게 만드는 공격이고, 이를 막기위해 csrf 토큰을 사용한다.
Spring MVC를 사용하면 디폴트로 csrf 토큰 관리를 제공하고, Spring Security를 사용하면 디폴트로 csrf 보호가 시작된다.
Thymeleaf 템플릿 엔진은 프론트 엔드단에서의 csrf 토큰 관리를 지원해줘 별다른 추가 없이도 POST 요청을 보낼 수 있었지만 Ajax의 요청 헤더에는 CSRF토큰 관리가 필요하다.
Thymelaef 제공 CSRF
<script type="application/javascript" th:inline="javascript" th:fragment="ajax-csrf-header">
$(function () {
var csrfToken = /*[[${_csrf.token}]]*/ null;
var csrfHeader = /*[[${_csrf.headerName}]]*/ null;
$(document).ajaxSend(function (e, xhr, options) {
xhr.setRequestHeader(csrfHeader, csrfToken);
});
});
타임리프가 페이지를 응답받을 때 들고있는 CSRF 토큰의 값에 접근해 Ajax 요청 헤더에 포함될 수 있도록 한다.
참고
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-JPA-%EC%9B%B9%EC%95%B1/dashboard