본문 바로가기

Backend/Spring | SpringBoot

[Spring Security] CSRF 토큰

반응형

토큰 재생성시 Model에 담아야함

 

Controller

String csrf = getCsrfToken(request);
model.addAttribute("newToken", csrf);

 

JavaScript

function sample() {
	...
	// 토큰과 헤더의 meta데이터 수정
	const token = $("meta[name='_csrf']").attr("content");
	const header = $("meta[name='_csrf_header']").attr("content");

	var tags = "";
	$.ajax({
		url: '/amng/dataVariableMng/uploadExcelFile',
		data: formData,
		processData: false,
		contentType: false,
		type: "POST",
		beforeSend: function(xhr) {
			xhr.setRequestHeader(header, token);
		},
		error: function(jqXHR, textStatus, errorThrown) {
			alert(errorThrown);
		},
		success: function(data){
			if (data.newToken != '') {
				$("#new_token").val(data.newToken);
				$("meta[name='_csrf']").attr("content", data.newToken);
				if ($("input[name='_csrf']").val() != undefined) {
					$("input[name='_csrf']").val(data.newToken);
				}
			}
			...
			// 성공시 새 토큰 발행
			const newToken = $("#new_token").val();
			$("meta[name='_csrf']").attr("content", newToken);
			$("input[name='_csrf']").val(newToken);
		}
	})
}

 

JSP

<input type="hidden" name="new_token" id="new_token"/>
...
<div id="popup" class="uploadExcel">
	<div class="inner">
		<p class="tit">업로드</p>
		<div class="excelUpload" style="margin-bottom: 10px; border: 1.5px solid black;">
			<form id="uploadForm" name="uploadForm" method="post" enctype="multipart/form-data">
			...
			<!-- csrf처리 -->
			<sec:csrfInput/>
			...
			</form>
		</div>
        ...
	</div>
</div>

 

Model에 담았을 때 JSP호출

//Controller
String csrf = getCsrfToken(request);
model.addAttribute("newToken", csrf);
//JSP
<input type="hidden" name="new_token" id="new_token" value="${newToken}" />

 

객체에 담았을 때 JSP호출

//Controller
String csrf = getCsrfToken(request);
객체VO.setNewToken(csrf);
//JSP
<input type="hidden" name="new_token" id="new_token" value="${객체VO.newToken}" />

 


 

Model에는 계속 데이터가 있지만 JSP쪽에서 데이터를 받아오지 못해 알아보니...

Controller단에서 List로 return중이라 list데이터만 넘어가고 있었다.

ResponseEntity로 return하니 정상적으로 반영되어 동작한다.

 

 

반응형