스프링 시큐리티와 JWT에서 URL 허용하기

반응형

 

스프링 시큐리티와 JWT를 적용해서 인증 및 인가 절차를 만들어서 사용하는 경우가 많습니다.

 

하지만 특정 URL에 대해서는 모든 접근을 허용해주어야 하는 상황도 있는데요.

예를들면, 네이버에서 뉴스를 볼 때는 유저가 로그인을 했던 안했던 무조건 볼 수 있는 것과 같은 상황입니다.

 

우선 JWT를 적용한 스프링 시큐리티의 인증/인가 처리 과정에서, 특정 URL을 허용해주기 위한 설정 파일의 역할은 아래와 같습니다.

참고로, 허용시켜줄 URL은 PERMIT_URL_ARRAY에 담아놓았다고 가정하겠습니다.

 

1) SecurityConfiguration

  • SecurityFilterChain에서 설정한 PERMIT_URL_ARRAY는 스프링 시큐리티의 기본 보안 검사에서 해당 URL들을 허용하도록 합니다.
  • 하지만 이 허용은 스프링 시큐리티의 기본 필터 체인에만 적용됩니다.

 

2) JwtFilter의 역할

  • JwtFilter는 커스텀 필터로 헤더에서 토큰을 추출해서 검증하는 역할을 합니다.
  • SecurityFilterChain과는 별개로 동작합니다.
  • addFilterBefore를 통해 필터 체인에 추가됩니다.
  • addFilterBefore(jwtFilter, UsernamePasswordAuthenticationFilter.class);이 코드를 통해 UsernamePasswordAuthenticationFilter.class 앞쪽에 jwtFilter를 추가했기 때문에 모든 요청은 jwtFilter를 가장 먼저 통과해야 합니다.

즉 처리 순서는

HTTP 요청 → JwtFilter → Spring Security 기본 필터들 → 컨트롤러

 

위와 같은 과정을 거칩니다.


따라서 만약에 SecurityConfiguration에서 URL을 허용하더라도, JwtFilter에서 해당 URL을 허용시키는 URL로 추가하지 않으면 JwtFilter에서 먼저 인증 체크를 하고 차단하게 됩니다.

반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유