개발/부트캠프

본캠프 : JwtFilter - ArgumentResolver 실습 2(OncePerRequestFilter)

EJ EJ 2025. 3. 14. 10:22

[ JwtFilter - ArgumentResolver 실습 ]

 

(1) JWT 의존성 추가(build.gradle)

// jwt
compileOnly group: 'io.jsonwebtoken', name: 'jjwt-api', version: '0.11.5'
runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-impl', version: '0.11.5'
runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-jackson', version: '0.11.5'

 

(2) jwt.secret.key 추가(application.properties)

jwt.secret.key=OFJSU3pod0t2WUxmaXY2Z2ZncjhJQmVtdlo1UWJId3E=

 

*참고 사이트

https://randomkeygen.com

CodeIgniter Encryption Keys - Can be used for any other 256-bit key requirement.

 

RandomKeygen - The Secure Password & Keygen Generator

RandomKeygen is a free mobile-friendly tool that offers a randomly generated keys and passwords you can use to secure any application, service or device.

randomkeygen.com

https://www.base64encode.org/ko

인코딩

 

Base64 인코딩 및 디코딩 - 온라인

Base64 형식으로 인코딩해보세요. 아니면 다양한 고급 옵션으로 디코딩해보세요. 저희 사이트에는 데이터 변환하기에 사용하기 쉬운 온라인 도구가 있습니다.

www.base64encode.org

 

(3) JwtUtil 클래스 생성

: 여기까지는 로그인(인증)을 통한 Jwt토큰 발급 가능

 

이후에 JwtFilter(JWT 유저 데이터 추출/ request.setAttribute) - ArgumentResolver(AuthUser 객체 생성/ request.getAttribute) - Controller로의 전달 과정이 필요하다.

 

(4) JwtFilter 생성 extends OncePerRequestFilter

: OncePerRequestFilter에서 doFilterInternal을 리팩토링한다.

implements Filter는 여러번 호출되거나 하는 등의 문제가 있다. 이를 해결하기 위해 스프링에서는 OncePerRequestFilter 지원한다. OncePerRequestFilter 이미 Filter interface implements 구현체 클래스이므로, extends 한다는 것이 조금 다를 , 나머지는 동일한 방법으로 사용!

: JWT에 있는 유저 데이터 추출 작업(httpRequest.setAttribute)을 진행한다.

 

(5) FilterConfig로 JwtFilter등록

 

(6) ArgumentResolver 생성

: JWT에서 추출한 데이터(request.getAttribute)로 AuthUser 객체를 만든다. 비로서 Controller에 전달할 수 있는 데이터가 생성된다.

 

(7) WebConfig로 ArgumentResolver 등록

 

(8) AuthUser(dto) 클래스와 Auth(어노테이션) 인터페이스 생성

 

(9) Controller에서 ArgumentResolver를 통해 JWT의 유저 정보를 전달 받는다.

: @Auth AuthUser authUser