스프링

스프링 시큐리티 + Ajax post → 403 에러

nan2 2022. 1. 29. 22:30
반응형

상황:

스프링 시큐리티로 로그인을 구현한 상태에서 회원가입 시 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);
});

 

 

반응형