Spring Security 적용 이후에는 post 방식을 이용할 때
csrf프로텍션이 적용되서 그렇다고 합니다.
CSRF(Cross Request Forgery: 사이트 간 요청 위조)인데 보안 대책으로 필수적으로 요구 된다고 합니다.
ajax post방식 사용시 해결 방법은
https://docs.spring.io/spring-security/site/docs/4.2.2.RELEASE/reference/htmlsingle/#the-csrfmetatags-tag 여기 나와있는데 코드가 깔끔하지 못한 것 같아 다른 방법을 찾아서 정리를 해보았습니다.
befornSend에서 토큰 값을 보내는 것이 중요합니다.
<meta id="_csrf" name="_csrf" th:content="${_csrf.token}"/>
<meta id="_csrf_header" name="_csrf_header" th:content="${_csrf.headerName}"/>
<script>
var token = $("meta[name='_csrf']").attr("content");
var header = $("meta[name='_csrf_header']").attr("content");
$.ajax({
data : data
,url : "url"
,type : "POST"
/*데이터를 전송하기 전에 헤더에 csrf값을 설정한다*/
,beforeSend : function(xhr){
xhr.setRequestHeader(header, token);
}
,success : function(data) {
if(data == true)
alert("성공");
}
});
</script>
위에 처럼 meta 태그 를 안쓰고 직접 값을 써서 사용할 수 도 있습니다.
<script th:inline="javascript">
var header = /*[[${_csrf.headerName}]]*/;
var token = /*[[${_csrf.token}]]*/;
$.ajax({
data : data
,url : "url"
,type : "POST"
/*데이터를 전송하기 전에 헤더에 csrf값을 설정한다*/
,beforeSend : function(xhr){
xhr.setRequestHeader(header, token);
}
,success : function(data) {
if(data == true)
alert("성공");
}
});
</script>
반응형
'웹프로그래밍 > spring~~' 카테고리의 다른 글
intellij로 개발하면서 import가 안될 때 (0) | 2020.01.27 |
---|---|
Spring 으로 ajax 사용 할 때~ (0) | 2019.09.20 |
GCP에 그레이들 설치 (0) | 2019.09.12 |
Spring Dispatcher-Servlet이란? (0) | 2019.09.08 |
form 태그의 th:action을 동적으로 바꾸는 방법 (0) | 2019.08.23 |
@PathVariable, URL에 파라미터 전달하기 (0) | 2019.08.20 |
오류 : cannot find symbol (0) | 2019.08.13 |
Spring Security를 적용해보자(2) (0) | 2019.08.13 |