Spring Security + JWT 에러(full authentication is required to access this resource) 해결 과정

seojun·2023년 6월 1일
0

이 글은 부부개발단님의
https://www.youtube.com/watch?v=3NRGhA19fqM&list=PLHpaQi-LiUCzoALNuLOqLdyRGrlhn7sMD&index=2 영상을 따라하다 생긴 에러를 해결한 과정을 적은 글이다.

우선 영상의 스프링 버전은 2.7.8 버전이고, 나는 3.1.0 버전을 사용했다.

1일차

영상을 따라하던중

에러가 발생했다.

일반적인 에러처럼 인터넷에 복붙해서 넣어봤지만 에러를 해결하는 방법은 보이지 않았다. 하지만 권한과 관련된 문제라는 것을 알았다.



2일차

스프링 시큐리티 필터를 찾아보니 FilterSecurityInterceptor가 권한을 처리하는 filter라고 한다. 하지만 스프링이 6.1 버전으로 바뀌며 AuthorizationFilter를 사용한다는 것을 알게 되었다.
그리고 디버깅을 해보니 AuthorizationFilter에서 AccessDeniedException이 발생한다는 것을 알게 되었다.


AuthorizationFilter

조금 더 디버깅을 해보니 authorizationManager.check를 할 때 권한에 문제가 발행한 것 같아 찾아보니 RequestMatcherDelegatingAuthorizationManager를 구현체로 사용한다고 한다.



3일차

RequestMatcherDelegatingAuthorizationManager

RequestMatcherDelegatingAuthorizationManager를 디버깅을 더 해보니 manager.check에서 뭔가 문제가 생긴것 같아 또 하나씩 디버깅을 해보니 manager.check를 하면 AuthoritiesAuthorizationManager의 check가 실행된다는 것을 알게 되었다.

AuthoritiesAuthorizationManager

AuthoritiesAuthorizationManager를 디버깅 해보니 JwtAuthenticationToken을 확인은 하는데 role이 없어서 anonymous로 실행됐기 때문에 에러가 발생한 것 같다.

그러면 JwtAuthenticationToken을 고치면 되겠다는 생각이 들었고, 생각대로

위의 코드를 아래로 바꾸고, 관련된 코드도 조금씩 바꿨더니 해결됐다.




글로 써서 별거 없어 보이지만 하루에 5~6시간씩 디버깅 하면서 해결한 문제였다. 그래서인지 재미있었던 에러였다.
그리고 스프링 시큐리티 권한 필터를 자세히 알 수 있는 계기가 되기도 했고, 스프링 시큐리티 필터 전체를 더 공부해야 겠다고 생각이 들었다.

0개의 댓글