반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- ubuntu자바설치
- 통영
- gradle
- 파이썬
- 한성대맛집
- 한남동맛집
- 영화추천
- 돈암동맛집
- 스페인여행
- 뚝섬역맛집
- ELK
- 자바스크립트에러처리
- 국가직
- 퇴사후공무원
- 통영예쁜카페
- react
- npm
- 방이편백육분삼십
- JavaScript
- 성북구맛집
- 통영에어비앤비
- 통영여행
- 성신여대편백집
- 꼴뚜기회
- 성신여대맛집
- springboot
- tomcat7
- 공무원
- 방이편백육분삼십성신여대
- 서울숲누룽지통닭구이
Archives
- Today
- Total
코린이의 기록
[JSP] setRequestHeader 에서 csrfHeader is not defined 오류 발생 본문
javascript,HTML,CSS
[JSP] setRequestHeader 에서 csrfHeader is not defined 오류 발생
코린이예요 2018. 7. 10. 16:57반응형
아래와 같은 csrfHeader is not defined 발생함.
Uncaught ReferenceError: csrfHeader is not defined at Object.beforeSend (full:841) at Function.ajax (jquery.js:7933) at HTMLSpanElement.<anonymous> (full:833) at HTMLSpanElement.dispatch (jquery.js:3063) at HTMLSpanElement.eventHandle (jquery.js:2681) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | $.ajax({ url : "${ctx}/overview/save_location_full", type : "POST", contentType : "application/json; charset=utf-8", cache : false, dataType : "json", data : JSON.stringify(machineLocations), beforeSend : function(xhr) { xhr.setRequestHeader(csrfHeader, csrfToken); }, success : function(data) { if (data != null) { if (data.status == "success") { alert("Succeed Save Location."); } else { alert("Fail !!"); } } else { alert("No Data Received !!"); } }, error : function(xhr, status, error) { alert("xhr:" + xhr + ", status:" + status + ", error:" + error); } }); | cs |
▲ full.jsp
원인
decorators tag를 사용하여 layout을 공통적으로 부여하고 있는데 위 jsp파일이 exclude 되어 csrfHeader와 Token을 찾아오지 못함.
아래 decorators.xml을 보면 excludes tag로 <pattern>/overview/full</pattern> 가 설정되어 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <?xml version="1.0" encoding="euc-kr"?> <decorators defaultdir="/WEB-INF/jsp/common/layout"> <excludes> //생략 <pattern>/overview/full</pattern> // 생략 <pattern>/index.jsp</pattern> <pattern>/index.html</pattern> <pattern>*.js</pattern> <pattern>*.css</pattern> </excludes> <decorator name="default" page="default.jsp"> <pattern>/*</pattern> </decorator> </decorators> | cs |
▲ decorators.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <%@ page language="java" contentType="text/html; charset=UTF-8"%> <%@ include file="/WEB-INF/jsp/common/include/taglibs.jsp"%> <%@ page import="org.springframework.security.core.context.SecurityContextHolder" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="ko"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <sec:csrfMetaTags /> <script type="text/javascript"> var csrfParameter = $("meta[name='_csrf_parameter']").attr("content"); var csrfHeader = $("meta[name='_csrf_header']").attr("content"); var csrfToken = $("meta[name='_csrf']").attr("content"); // 생략 </body> </html> | cs |
▲default.jsp
해결 방법
<head> tag안에 아래 <meta> data를 추가한 후
1 2 | <meta id="_csrf" name="_csrf" content="${_csrf.token}" /> <meta id="_csrf_header" name="_csrf_header" content="${_csrf.headerName}" /> | cs |
ajax 호출하는 function 내부에 아래 csrfToken과 csrfHeader를 정의해준다.
1 2 | var csrfToken = $("meta[name='_csrf']").attr("content"); var csrfHeader = $("meta[name='_csrf_header']").attr("content"); | cs |
▲ full.jsp
반응형
'javascript,HTML,CSS' 카테고리의 다른 글
[HTML] <form:select> 과 itemValue & itemLabel (0) | 2018.10.08 |
---|---|
[javascript] 모듈화 js 분리 (0) | 2018.08.20 |
[javascript] Tomcat, JBoss 차이 (0) | 2018.08.14 |
[JSP] ' WAS' 와 ' Web Server' 의 차이 (0) | 2018.08.14 |
[javascript] Javascript 기초 (0) | 2018.07.04 |
Comments