운영상의 자바 클래스 파일을 교체한 이후에 예상치 못한 에러가 발생했다.
회원가입 페이지에서 이메일 중복체크 버튼을 누르면 aJax 통신을 통해 중복여부 확인 이후 alert창을 띄워주게 되어 있는데
이 기능이 외부 API인 주소검색 API 통신을 하고 난 이후에는 정상적으로 동작하지 않았다. 게다가 결제 기능까지 동작하지 않았다.
개발자도구를 열어 이메일 중복체크 버튼을 눌러보았는데 누를때마다 JSON.parse할 때 JSON이 아닌 HTML 파일을 줬기 때문에 오류가 발생한 것이라는 에러 메세지를 볼 수 있었다.
개발자 도구의 application의 쿠키를 열어 보았고 JSESSIONID가 외부 API 통신 (주소검색 API) 이후 변경된 것을 확인할 수 있었고 바뀐 JSESSIONID로 aJax통신을 시도했기 때문에 서버의 세션조회에서 해당 JSESSIONID를 찾을 수 없기에 JSON 타입의 response가 아니라 에러페이지 (<DOCTYPE> HTML)를 response에 전달하여 발생한 에러임을 짐작할 수 있었다.
// 이메일 중복 체크
function duplicateEmailCheck(email) {
var data = fnAjax("apiUrl", {email : email});
if (data.cnt == 0) {
return true;
} else {
return false;
}
}
var fnAjax = function (url, params, method) {
method = method || "POST";
var result = JSON.parse($.ajax({
url: url,
type: method,
data: JSON.stringify(params),
contentType: 'application/json',
async: false,
error: function() {
console.log('error');
}
}).responseText);
...
}
교체 직전의 class 파일을 디컴파일해서 교체한 class 파일의 디컴파일 소스와 비교한 결과 preHandle과 postHandle의 esponse.setHeader("Set-Cookie", "JSESSIONID=" + request.getRequestedSessionId() + "; path=/; Secure; SameSite=None");
response.setHeader (JSESSIONID를 유지하게끔 하는) 코드가 의도치않게 교체된 class파일에 빠져있는 것을 확인할 수 있었다.
Java Decompiler
The “Java Decompiler project” aims to develop tools in order to decompile and analyze Java 5 “byte code” and the later versions. JD-GUI is a standalone graphical utility that displays Java source codes of “.class” files. You can browse the reco...
java-decompiler.github.io
WinMerge 다운로드 - WinMerge
WinMerge 다운로드 WinMerge를 설치하는 가장 쉬운 방법은 설치 프로그램을 다운로드하여 실행하는 것입니다. 온라인 설명서 사용에 대한 도움말을 참조하십시오. WinMerge 2.16.40 현재 WinMerge 버전은 2.1...
winmerge.org
일단은 preHandle과 postHandle에 대해 chatGPT 검색해봤고 spring MVC 요청의 전처리, 후처리라는 것을 알 수 있었다.


회원가입 페이지에서 주소검색 버튼을 누르면 내부 API 통신을 통해서 주소검색 팝업창을 띄워준다. 팝업창에서 주소검색을 하면 외부 API 통신을 통해서 주소목록을 가져와서 보여주는데 이때 브라우저의 JSESSIONID가 변경될 것으로 추정된다.
그러나 preHandle, postHandle에
esponse.setHeader("Set-Cookie", "JSESSIONID=" + request.getRequestedSessionId() + "; path=/; Secure; SameSite=None");
로 브라우저의 쿠키를 유지시키므로서 위와 같은 현상을 막을 수 있는 것으로 보인다.
'spring' 카테고리의 다른 글
자바 접근제어자 개념과 JPA @Embeddable에서 기본생성자에 proteced를 사용하는 이유 (0) | 2024.11.24 |
---|---|
JPA기초 @Entity & @Id & @GeneratedValue & 영속성 컨텍스트 (0) | 2024.11.23 |
[Spring] Spring Bean 과 Servlet에 관한 질의응답 (ChatGPT) (5) | 2024.09.02 |
[Spring] 서블릿 컨테이너와 스프링 컨테이너에 관한 질의응답 (ChatGPT) (0) | 2024.08.31 |
BasicErrorController에서 @RequestMapping("${server.error.path:${error.path:/error}}")의 의미 (0) | 2024.01.08 |
댓글