기존의 JWT Filter 는 그저 리스트의 형태로써 URL만 사용할수 있고 와일드카드또한 사용할수 없었다.
이는 생각보다 매우 불편하다.
이는 프로젝트가 커지면 커질수록 불편해지고 심지어 와일드카드를 사용할 수 없게 되어 이렇게 징그러운 코드가 발생하게 되는것이다. 하지만 이는 해결책이 있었다. 물론 와일드까지 사용할수 있는 것이다.
OncePerRequestFilter의 shouldNotFilter
이 필터는 OncePerRequestFilter 내부에 존재하는 메서드이다. 이 메소드의 주 용도는 내가 원하는 URL을 그냥 통과하게 만드는 것인데
정확한 공식문서는
Can be overridden in subclasses for custom filtering control, returning true to avoid filtering of the given request.
The default implementation always returns false.
번역)
사용자 지정 필터링 제어를 위해 하위 클래스에서 재정의할 수 있으며, 지정된 요청의 필터링을 피하기 위해 true를 반환합니다. 기본 구현은 항상 false를 반환합니다.
짧게 말하면 true 를 반환하게 해준다면 그냥 넘어간다는 뜻이다. 코드로 한번 설명해보자
우선 나는 내가 그냥 넘어갔으면 하는 URL을 상수로 설정해주고 그안에 통과되었으면 하는 경로를 넣어준다.
그 후 이렇게 구현을 해주게 된다
자세한 설명
.anyMatch(exclude -> exclude.equalsIgnoreCase(request.getServletPath()))
이것은 상수의 EXCLUDE_URL의 리스트에서 하나의 URL 패턴과 현재 요청하는 서블릿의 경로를 비교하는 로직이다.
람다식을 통해 EXCLUDE_URL 리스트의 각 요소를 대입하고, 그 요소와 현재 요청의 서블릿 경로를 대소문자를 구분하지 않고 비교한다.
return EXCLUDE_URL.stream().anyMatch()
상수 안에 있는 리스트 중에서 현재 요청의 서블릿 경로와 일치하는 URL 패턴이 있다면 true 없다면 false를 반환한다.
이렇게 우리가 원하는 URL 을 통과시켜주는 매우 중요한 로직이 되었다.
Reference
https://jangjjolkit.tistory.com/26
[Spring Security] 3. Spring Security 적용하기 (JWT, Access Token, Refresh Token)
들어가며 지난 게시글에서 스프링 시큐리티를 이용한 로그인 구현 시 Session을 사용하는 방법을 알아보았다. 스프링 시큐리티는 기본적으로 Session을 사용하는 것이 기본이지만 JWT를 이용하여 로
jangjjolkit.tistory.com
'Spring > 👨💻 SpringSecurity' 카테고리의 다른 글
JWT (0) | 2023.07.11 |
---|---|
UsernamePasswordAuthenticationFilter ( feat. FormLogin ) (0) | 2023.06.27 |
ExceptionTranslationFilter 와 RequestCacheAwareFilter (0) | 2023.06.26 |
권한 설정 (0) | 2023.06.26 |
AnonymousAuthenticationFilter (0) | 2023.06.26 |