| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
- Stream
- Functional Programming
- 싱글톤
- 인텔리제이 단축키
- optional
- git cli
- producer
- Authentication
- orElseGet
- 디자인패턴
- 패스트캠퍼스 #환급챌린지 #패스트캠퍼스후기 #습관형성 #직장인자기계발 #오공완
- Factory Method Pattern
- orelse
- TDD
- Spring Security
- mokito
- junit5
- SpringBoot
- Java8
- Clean Code
- 함수형 프로그래밍
- effective java
- kafka
- Java
- topic
- JWT
- 카프카
- consumer
- #패스트캠퍼스 #환급챌린지 #패스트캠퍼스후기 #습관형성 #직장인자기계발 #오공완
- signWith
- Today
- Total
goodbye
JWT builder with Spring Security 본문
클라이언트로부터 아이디와 패스워드를 입력받는 로그인 기능을 직접 구현하지 않고
Spring Security를 이용해서 권한을 체크하고 암호화된 패스워드를 비교하여 로그인을 처리하는 기능을 구현해보면서
JWT(Json Web Token)을 이용해보았습니다.
1. build.gradle 의존성 추가

2. Spring Security 설정
기존에는 WebSecurityConfigurerAdapter를 상속받아 오버라이딩 하는 방법으로 구현하면 되었는데
스프링 버전이 업데이트되면서 WebSecurityConfigurerAdapter 과 그 외 몇가지 기능들이 Deprecated 되었습니다.
일단 WebSecurityConfigurerAdapter 를 상속받아 구현하는 방법은 아래와 같습니다
- WebSecurityConfigurerAdapter 을 상속받아 구현하는 방법 ( Deprecated )

- SecurityFilterChain을 Bean으로 등록하는 방법 ( 변경된 방법)

변경된 방법은 모든것들을 Bean 으로 등록해서 스프링 컨테이너가 관리할수 있도록 변경되었습니다.
3. Authentication Filter
권한 인증과 클라이언트의 패스워드 체크가 완료되면 로그인 성공 반환 값을 정의하여 리턴하게 되는데
이때 JWT 토큰을 생성하여 토큰 만료시간과 함께 리턴 할 수 있습니다

4. Jwt signWith deprecated 이슈
서명을 위한 signWith() 메서드를 사용할때 SignatureAlgorithm 를 사용하는것은 괜찮지만
다른 인자인 String secretKey 를 전달하는것은 삭제될 예정일 내용이라고 합니다.

5. JWT Create
따라서 String 이 아닌 Key 객체를 전달할 수 있도록 변경하고 Jwt 를 생성하여 response header 에 전달합니다.

6. Postman & jwt.io 에서 확인
서버에서 리턴받은 token과 userId를 postman에서 확인할수 있고
jwt.io 웹페이지에서 해당 token을 복사하여 입력하면 decoded 된 데이터를 얻을수 있습니다
- 서버에서 전달한 userId
- 서버에서 전달한 인증 만료시간(현재시간 + 갱신시간(24시간)


# 참고
https://docs.spring.io/spring-security/reference/servlet/getting-started.html
https://github.com/jwtk/jjwt/issues/334