반응형
토큰 재생성시 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하니 정상적으로 반영되어 동작한다.
반응형
'Backend > Spring | SpringBoot' 카테고리의 다른 글
[Spring] MessageSource를 이용한 Exception처리 (0) | 2024.03.14 |
---|---|
[Spring] redirect경로 (0) | 2024.03.13 |
[JPA] Auto Increase가 안될 때 (0) | 2024.03.11 |
[JDBC] java.sql.SQLException: No suitable driver found for jdbc:mariadb (0) | 2024.03.07 |
[REST API] @Controller / @RestController (0) | 2024.03.05 |