웹프로그래밍/spring~~
Spring Security에서 Ajax post 방식 사용할 때
발전하는개발자
2019. 8. 31. 15:17
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>
반응형