TIL
[TIL] 스프링 서큐리티 사용시 ajax요청 주의점 2022-10-24
아몬드통
2022. 10. 25. 01:00
$.ajax({
type: "POST",
url: "/orders/deleteorders",
contentType: 'application/json; charset=utf-8',
dataType: "json",
data: JSON.stringify({
merchant_uid: merchantId,
cancel_request_amount: totalPrice,
reason: "테스트 결제 환불",
})
}).done((response) => {
alert(response.merchant_uid);
alert("성공")
}).fail(function (error){
alert("실패")
alert(JSON.stringify(error));
});
이런 방식으로 ajax요청을 했는데 403에러부터 여러가지 에러나 발생해서 해결법을 적어둠.
1. 스프링 서큐리티 사용할때, ajax요청시 403에러 발생 해결법
- 오늘 아임포트 결제 취소 구현하려고 여러가지 하다가 ajax요청이 죽어도 컨트롤러로 안가고.. 갔는데 계속 fail로 response가 와서 거의 하루를 다 날렸다. 그래서 적어두는 내용.
- 클라이언트의 javascript에서의 ajax요청시 모든 값들이 정상이라는 가정.
- f12눌러서 나오는 에러가 403일때 스프링 서큐리티 사용한다면 링크를 참고해서 해결하면 된다.
https://velog.io/@jyleedev/514-ajax-post-%ED%86%B5%EC%8B%A0-403-error
[Ajax 에러] - 스프링 시큐리티 ajax post 통신 403 forbidden error
ajax 통신 시 403 forbidden 에러 발생 임시 비밀번호를 전송하는 컨트롤러(/sendPwd) 를 호출하기 위해 생성한 javascript 함수 sendEmail 호출 시 SecurityConfig에서 permit 해줬음에도 불구하고 계속 403 에러가
velog.io
2. 1번의 이유가 발생하는 이유와 csrf의 개념
- 간단히 말해서 스프링 서큐리티에서 csrf 공격을 막기 위해서 token을 사용하는데, 위 링크 방법을 사용하지 않으면 token이 없기 때문에 ajax요청을 해도 서큐리티에서 막아서 우리는 요청을 전달할 수 없다는 것이다.
- 자세한 내용은 아래 링크 참고!
https://codevang.tistory.com/282
Spring Security_CSRF Token의 개념과 사용 방법
- Develop OS : Windows10 Ent, 64bit - WEB/WAS Server : Tomcat v9.0 - DBMS : MySQL 5.7.29 for Linux (Docker) - Language : JAVA 1.8 (JDK 1.8) - Framwork : Spring 3.2.9 Release - Build Tool : Maven 3.6..
codevang.tistory.com
3. readyState=4, status=200 일때 나는 parsererror 이유
- ajax 요청의 dataType 문제다. json으로 작성했는데 controller에서는 String으로, 즉 text로 response해줄 때 나는 오류이다.
- dataType:'text' 로 변경하거나 controller에서 json으로 응답하게끔 오브젝트를 반환해주면 해결된다.