자 모든 기능 구현이 끝났다.
POSTMAN으로 테스트를 해보자!
1. 아무 인가/인증도 걸려있지 않은 http://localhost:8080/ 에 접근
- Filter
- Controller
- .anyRequest().permitAll() 에 걸리게 되어 인증하지 않아도 통과할 것이다!
1-1. Success Case
2. 로그인 없이 http://localhost:8080/user에 접근
- Filter
- Controller
- .requestMatchers("/user/**").authenticated() 가 걸려기에 User 권한을 가진 사용자가 로그인 하지 않으면, Error가 날 것!
2-1. Error Case
3. 로그인 테스트
3-1. Success Case : Body에 DB에 있는 사용자로 접근
3-2. Error Case : 형식에 맞지 않은 Body
- 중요한 점은 401 에러
3-3. Error Case : DB에 없는 사용자로 접근
이 부분은 BadCredentialsException이 throw된 것을 알 수 있다.
3-3. 과연 Redis에서 작동한걸까?
- 로그인 후, RefreshToekn이 Redis에 저장되었나?
해당 Key를 조회해보니, RefreshToken이 저장되어 있다!
4. 발급받은 AccessToken을 들고, http://localhost:8080/user에 재접근
4-1. Success Case
4-2. Error Case : AccessToken이 Valid 하지 않을 때!
- MalformedJwtException 이 throw 된 것을 볼 수 있다!
(이에 대한 알맞은 ErrorHandling을 해주자!)
4-3. Error Case : 만료된 AccessToken을 들고 접근
(이 또한, ExpiredJwtException이 났을 때 응답에 대해 Handling 해주자!)
5. RefreshToken을 들고, http://localhost:8080/reissue에 접근하여 재발급 받기
5-1. Success Case
- 토큰 쌍이 재발급 되는 것을 알 수 있다!!
5-2. Error Case : AccessToken이 Valid 하지 않을 때!
5-3. Error Case : 만료기간이 지난 RefreshToken을 들고 접근
(해당 Exception들에 대해서도 핸들링 해주자!)
6. 로그아웃
6-1. Success Case
6-2. 과연 Redis에서 작동한걸까?
- 로그아웃 후, RefreshToken은 지워졌나?
모든 KEYS를 검색해 보았지만, "jinho7"은 찾을 수 없다! => 성공
- 로그아웃 후, AccessToken은 블랙리스트 처리가 되었나?
그리고 방금 보냈던 AccessToken은 "logout" Value값을 가지고 저장되었다!
6-3. 다시 해당 AccessToken으로 접근한다면?
403 Forbidden이 뜬다!!!!!
모든 기능 구현/테스트 완료!
(Error/Exception 처리는 따로 해주도록 하자!)