티스토리 뷰
[Spring Security - JWT] (6) : 재발급 / 로그아웃 API + Postman 테스트
evolutioning 2026. 4. 28. 23:14
[Spring Security - JWT] (5) : Refresh Token 구현
https://ekeprl.tistory.com/66 [Spring Security - JWT] (4) : 로그인 API 및 Postman 테스트https://ekeprl.tistory.com/65 [Spring Security - JWT] (3) : JwtFilter이전 포스팅을 통해 JWT 토큰의 생성과 검증을 담당하는 JwtUtil을 작성
ekeprl.tistory.com
이전포스팅은 RefreshToken 구현에 대해 알아보았다.
이번 포스팅은 이어서 재발급 / 로그아웃 API 및 Postman을 이용한 테스트를 진행해보려 한다.
1. UserService
fun refresh(refreshToken: String): String {
// 토큰 유효성 검증
if (!jwtUtil.validateToken(refreshToken)) {
throw IllegalArgumentException("유효하지 않은 토큰입니다.")
}
// DB에서 토큰 조회
val savedToken = refreshTokenMapper.findByToken(refreshToken)
?: throw IllegalArgumentException("존재하지 않는 토큰입니다.")
// 만료 시간 체크
if (savedToken.expiredAt.isBefore(LocalDateTime.now())) {
throw IllegalArgumentException("만료된 토큰입니다.")
}
// 새 Access Token 발급
val user = userMapper.findById(savedToken.userId)
?: throw IllegalArgumentException("존재하지 않는 유저입니다.")
return jwtUtil.generateAccessToken(user.id, user.email, user.role.toAuthority())
}
fun logout(userId: String) {
refreshTokenMapper.deleteByUserId(userId)
}
1) Refresh Token의 유효성을 검증하고
2) DB를 조회
3) 만료시간 체크 순으로 검증을 하고 새로운 Access Token을 반환하도록 로직을 구성했다.
2. Controller
@PostMapping("/refresh")
fun refresh(@RequestBody request: RefreshRequest): ApiResponse<String> {
val accessToken = userService.refresh(request.refreshToken)
return ApiResponse.success(accessToken)
}
@PostMapping("/logout")
fun logout(): ApiResponse<Unit> {
val userId = SecurityContextHolder.getContext().authentication?.principal as String
userService.logout(userId)
return ApiResponse.success()
}
/refresh /logout을 추가했다.
/logout은 SecurityContext에서 인증된 userId를 꺼내 Refresh Token을 삭제하도록 작성했다.
이어서 Postman을 이용해 테스트를 진행해 보겠다.
3. Postman테스트
3.1 Refresh Token 발급테스트

200 OK가 나타나면서 정상적으로 발급된 것을 확인할 수 있다.
3.2 Logout 테스트

로그아웃 역시 정상적으로 테스트 완료를 확인할 수 있다.
이상으로 6편에 걸친 Spring Security - JWT 시리즈를 마무리했습니다.
감사합니다.
'Spring > Security(JWT)' 카테고리의 다른 글
| [Spring Security - JWT] (5) : Refresh Token 구현 (0) | 2026.04.28 |
|---|---|
| [Spring Security - JWT] (4) : 로그인 API 및 Postman 테스트 (0) | 2026.04.27 |
| [Spring Security - JWT] (3) : JwtFilter (0) | 2026.04.24 |
| [Spring Security - JWT] (2) : JwtUtil (1) | 2026.04.24 |
| [Spring Security - JWT] (1) : SecurityConfig 설정 (0) | 2026.04.22 |
- Total
- Today
- Yesterday
- CRUD
- MariaDB
- null
- jwt
- 명령줄이 너무 깁니다
- session저장
- securityconfig
- ubuntu
- dependencies
- Postman
- Powershell
- AI
- 게시판
- insert
- JAR매니패스트
- 서버호스트
- 의존성
- Column count doesn't match value count at row 1
- Spring Security
- 특일정보
- kotlin
- spring ai
- InetAddress
- Git
- springsecurity
- gradle
- Insert오류
- GitHub
- 백엔드
- dbeaver
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 | 29 |
| 30 | 31 |