반응형
상황:
스프링 시큐리티로 로그인을 구현한 상태에서 회원가입 시 username 중복검사 함수를 ajax post 방식으로 구현했는데 403 에러가 발생함.
원인:
csrf(Cross-site request forgery)의 token의 누락
해결방법1:
http.csrf().disable() 코드를 추가하여 csrf를 비활성화 (보안 문제가 발생할 수 있어서 권장하지 않음)
해결방법2:
Ajax 요청하는 Header에 csrf token 값을 추가하여 전송
* html 의 <head>태그 안에 csrf meta tag 추가
<meta name="_csrf" th:content="${_csrf.token}">
<meta name="_csrf_header" th:content="${_csrf.headerName}">
* .js 에 아래 추가 -> request header가 이 정보를 이용하도록 설정
var token = $("meta[name='_csrf']").attr("content");
var header = $("meta[name='_csrf_header']").attr("content");
$.ajax({
//beforeSend
beforeSend: function(xhr){
xhr.setRequestHeader(header, token);
},
url: "/account/duplicateUsername",
type: "POST",
dataType: "json",
contentType: "application/json; charset=UTF-8",
data: data.username
}).done(function(resp){
alert(resp);
});
반응형
'스프링' 카테고리의 다른 글
[Spring] 스프링부트 스케줄러 사용하기 (0) | 2022.03.29 |
---|---|
[Spring] application.properties 또는 application.yml 파일에 미리 값을 지정해둔 다음 사용하기 (0) | 2022.03.29 |
스프링부트에서 JSP 로 화면 보여주기 (0) | 2022.02.17 |
WebSecurityConfigurerAdapter의 configure() 오버라이딩 (0) | 2022.01.27 |
스프링 시큐리티 동작 순서 (0) | 2022.01.27 |