- Ajax Post 방식 전송 시 아래와 같이 Ajax 전송 시 CSRF 토큰을 함께 전달하기 위한 코드를 작성한다.
var csrfHeaderName = "${_csrf.headerName}";
var csrfTokenValue = "${_csrf.token}"
$(document).ajaxSend(function(e, xhr, options){
xhr.setRequestHeader(csrfHeaderName, csrfTokenValue);
});
- 그런데 똑같은 Ajax 전송 메서드를 각기 다른 JSP에서 실행했는데 한 페이지에서만 정상적으로 동작하지 않는 문제가 발생하였다. (500에러 발생. 상기 AjaxSend 코드를 타지 못함.. )
-> 궁여지책으로 Ajax 전송 시 beforeSend 속성 작성을 통해 해당 Ajax 코드에 직접 csrf 토큰 정보를 전달하여 해결..
=> 노트북 재부팅하니까 잘 됨.. 또 이러면 프로젝트 clean, 서버 clean 필수적으로 먼저 해보자..
java.lang.NoClassDefFoundError: org/springframework/core/log/LogMessage at org.springframework.security.web.csrf.CsrfFilter.doFilterInternal(CsrfFilter.java:126)
var like = {
commentCd : commentCdValue,
movieCd: movieCdValue,
userid : userid,
csrfHeaderName: csrfHeaderName,
csrfTokenValue: csrfTokenValue
}
likeService.add(like, function(result){
alert(result);
});
function add(like, callback){
console.log("like.............");
$.ajax({
type: 'post',
url: '/rest/likes/new',
data: JSON.stringify(like),
contentType: "application/json; charset=utf-8",
beforeSend : function(xhr){
xhr.setRequestHeader(like.csrfHeaderName, like.csrfTokenValue);
},
success: function(result, status, xhr) {
if(callback) {
callback(result);
}
},
error : function(xhr, status, err) {
if(err) {
error(err);
console.log("e");
}
}
})
}