본문 바로가기

프로그래밍/스프링[Spring]

스프링 시큐리티 CSRF 관련 403 Forbidden 에러 해결



스프링 시큐리티의 버전을 변경하면서 CSRF를 설정해 보았습니다.

 

CSRF 설정 후 콘솔 창에 다음과 같이 403 에러를 볼 수 있습니다.

 

저 같은 경우는 로그인에서 CSRF 토큰을 설정했지만 나머지 페이지에서 CSRF 토큰 설정을 해주지 않아서 생기는 경우였습니다.

 

저는 다음과 같이 해결하였습니다.

 

tiles를 사용하고 있기 때문에 tiles의 공통부분인 layout.jsp 에서 head 태그 내에 삽입 csrf 토큰 정보를 다음과 같이 넣었습니다.

 

head 태그 내에 다음과 같이 코드를 작성해주세요

 

layout.jsp 

<head>
    <meta id="_csrf" name="_csrf" content="${_csrf.token}" />
    <meta id="_csrf_header" name="_csrf_header" content="${_csrf.headerName}" />
</head>

 

그리고 js 파일을 만들어 tiles에서 항상 호출하도록 하였습니다.

 

js 파일은 다음과 같습니다.

 

*. js

$(document).ready(function(){
    var token = $("meta[name='_csrf']").attr("content");
    var header = $("meta[name='_csrf_header']").attr("content");
    $(document).ajaxSend(function(e, xhr, options) {
        xhr.setRequestHeader(header, token);
    });
});

위와 같이 공통으로 사용하는 js 부분에 다음과 같은 코드를 작성하면 됩니다.

 

그리고 POST 방식 AJAX를 사용하는 부분에서 다시 정상 작동하면 성공입니다.

 

감사합니다.