방구석 컴퓨터/방구석 스프링

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

CCEO 2024. 12. 18. 17:20
반응형

 

스프링 시큐리티와 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`에서 먼저 인증 체크를 하고 차단하게 됩니다.

반응형