티스토리 뷰

반응형

기존에 구현해둔 게시판 프로젝트에 Spring security를 적용 중이다.

 

관련 설정을 다 한 후, 실행시켜보니 화면의 Header 부분에서 Category List를 불러오는 것이 갑자기 동작을 안했다..

이 부분이 로드가 안됏다ㅜㅜ

 

콘솔 창을 보니 AccessDeniedHandler을 구현해놓은 DeniedHandler.class에서 출력되는 문구가 자꾸 나오길래 이게 나올리가 없는데!! 그래서 request의 url을 찍어봤더니 Header에서 ajax 요청하는 url이 나왔다...

DeniedHandler.class
에러 메세지

 

해결하려고 해당 url을 permitAll로 설정하고, header.jsp도 설정해보고 별 삽질을 다했는데ㅜㅜ 결론은 CSRF 때문이였다!!

 

Security 적용 시 CSRF 설정을 안해줘도 자동으로 설정되는 것 같다.

혹시 CSRF때문인가..? 하고 요청 방식을 POST->GET으로 바꿔줬더니 동작한다..😂😂

 

문제가 된 요청이 값을 받아오기만 하는 거라 저렇게 해결했지만,

다른 POST 요청이 필요한 곳에선 CSRF Token을 요청header에 포함시켜 보내면 된다고 한다.

<html>
  <head>
    <meta name="_csrf" content="${_csrf.token}"/>
    <!-- default header name is X-CSRF-TOKEN -->
    <meta name="_csrf_header" content="${_csrf.headerName}"/>
    <!-- ... -->
  </head>
  <!-- ... -->
$(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);
  });
});

 

Form으로 Post 요청 시 아래와 같은 코드를 추가해줘야 한다.

 <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" />
반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함