하루하루는 성실하게 인생 전체는 되는대로

[JAVA] JWT 인증 적용 (+WebMvcConfigurer와 Interceptor) 구현 본문

JAVA

[JAVA] JWT 인증 적용 (+WebMvcConfigurer와 Interceptor) 구현

희롭 2022. 9. 15. 00:02

# 진행 순서

사용자 요청(Request) -> Servlet Filter -> Dispatcher Servlet -> Interceptor -> Controller

 

1. WebMvcConfigure 클래스 생성 (WebMvcConfigurer를 implements로 상속받음)

  : WebMvcConfigure가 제일 앞단에서 사용자의 HttpRequest를 잡아 처리해줄 것이다.

- @ComponentScan (패키지 경로)로 interceptor에 대한 componentScan이 가능하도록 지정해주었다.

- @EnableWebMvc : dispatcherServlet 생성시 필요한 config들을 알아서 생성해준다. (interceptor도)

- JwtAuthProvider를 final로 선언. AuthHandlerInterceptor는 autowired 로 주입

- 상속받은 WebMvcConfigurer에서 현재 필요한 2가지 메서드를 구현해줬다.

(1) addCorsMappings

 : cors 관련 설정해줌

(2) addInterceptors

 : interceptor를 적용해줌. (이때 적용한 interceptor 클래스가 authHandlerInterceptor)

  - excludePathPatterns를 통해 interceptor 적용되지 않을 경로를 지정할 수 있다.

 

# (참고) final의 가이드라인

: immutable 즉 read-only하도록 만들때, 개발 구성원 간의 합의하에 사용
(상속 불가 / Entity를 한 번만 할당하게 함 ..)

 

2. AuthHandlerInterceptor

: 위의 WebMvcConfigure의 addInterceptors를 통해 interceptor 적용이 확정된 요청들을 처리한다.

- HttpServletResponse에서 header를 가져와 AUTHORIZATION되어있는지 확인한다. (bearer 방식일 경우)

- 위 값이 미존재시 토큰이 존재하지 않는 것이다. JwtAuthProvider로 문자열에서 토큰값 추출했을 때 그 값이 유효한지 확인해준다.

 

3. JwtAuthProvider

: jwt토큰을 생성, 파싱하는 메서드를 생성할 클래스이다.

(1) JWT 토큰 생성

- BASE 64 HS256

(2) 토큰 유효성 검사 및 파싱

- JWts.parser() 사용

(3) 문자열에서 토큰값 추출

- header의 jwt 키에 대한 값을 가져온다.

 

4. 토큰을 생성하고 확인하는 시점 (Controller단)

- 로그인시에는, 토큰을 확인할 필요가 없고, 토큰을 생성해서 반환해줘야 한다.

=> url 경로를 interceptor가 적용되지 않도록 excludePathPatterns을 적용하여 지정한다.

=> response에 "jwt-auth-token"으로 header 키를 달아서 토큰을 value로 담아 return해준다. (jwt-auth-token 방식일 경우)

- 홈, 마이페이지 등에서는, 토큰을 확인해줘야 한다.

 

-----------------------------------------------------------------------------------------------------------------

 

(작업 메모)

현재 bearer랑 jwt-auth-token이 혼재되어 있기 때문에 => 하나로 방향잡아서 개발해야 한다.

그리고 pointcut 등을 활용한 loggingAop도 구현하자.

'JAVA' 카테고리의 다른 글

[JWT] JSON Web Token이란  (0) 2022.09.10
[JAVA] JVM - Heap Memory와 GC(가비지 콜렉션)  (0) 2022.02.16
[JAVA] 예외처리의 중요성  (0) 2022.01.20
Comments