반응형
파일 다운로드 기능이 연동되어야 해서 GET방식으로 ajax를 진행해야 해서 CSRF갱신에 애를 먹었다
Controller단
/**
* 다운로드 CSRF방지
*
* @param HttpServletRequest
* @return
* @throws
*/
@GetMapping("/refreshCsrfToken")
public ResponseEntity<String> refreshCsrfToken(HttpServletRequest request) {
CsrfToken csrfToken = (CsrfToken) request.getAttribute("_csrf");
String newToken = csrfToken.getToken();
return ResponseEntity.ok(newToken);
}
JS단
// csrf토큰 획득
function fn_downloadTemplate() {
$.ajax({
url: '/refreshCsrfToken',
type: 'GET',
success: function (newToken) {
$("meta[name='_csrf']").attr("content", newToken);
downloadFile(newToken);
}
});
}
// csrf토큰 재획득
function refreshGet(){
$.ajax({
url: '/refreshCsrfToken',
type: 'GET',
success: function (newToken) {
$("meta[name='_csrf']").attr("content", newToken);
}
});
}
// 다운로드 작업
function downloadFile(csrfToken) {
const token = $("meta[name='_csrf']").attr("content");
const header = $("meta[name='_csrf_header']").attr("content");
$.ajax({
url: '/data/excelDown.do',
method: 'GET',
xhrFields: {
responseType: 'blob'
},
beforeSend: function (xhr) {
xhr.setRequestHeader(header, csrfToken);
},
success: function (data, status, xhr) {
var disposition = xhr.getResponseHeader('Content-Disposition');
var filename = '';
if (disposition && disposition.indexOf('attachment') !== -1) {
var matches = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/.exec(disposition);
if (matches != null && matches[1]) {
filename = matches[1].replace(/['"]/g, '');
}
}
var blob = new Blob([data], {type: 'application/vnd.openxmlformats-officedocument
.spreadsheetml.sheet'});
var link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.download = filename;
link.click();
// 작업 후 csrf토큰 재갱신
refreshGet();
},
error: function (xhr, status, error) {
}
});
}
+ ) DB에서 VARCHAR타입으로 정렬이 안될때
인코딩의 문제일수도 있다고 함
MariaDB의 경우에는 다음과 같이 처리할 수 있음
select table_kor_name, * from cdp_cust_data_variable
order by table_kor_name collate "ko_KR.utf8";
반응형
'Backend > Spring | SpringBoot' 카테고리의 다른 글
Tomcat 에러 (0) | 2024.02.19 |
---|---|
[Spring] 예외처리(Exception Handler)(2) (0) | 2023.11.30 |
[Spring] 예외처리(Exception Handler)(1) (0) | 2023.11.28 |
[Spring] RedirectAttributes (0) | 2023.11.07 |
[Spring] SQLErrorCodesFactory (0) | 2023.10.06 |