From 436043fb4414f4209b1300ef97d32e5bb28996cc Mon Sep 17 00:00:00 2001 From: injoon2019 Date: Tue, 24 Sep 2024 01:07:42 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EB=A6=AC=ED=94=84=EB=A0=88=EC=8B=9C=20?= =?UTF-8?q?=ED=86=A0=ED=81=B0=20=EB=A7=8C=EB=A3=8C=20=EA=B2=80=EC=A6=9D=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bottles/api/auth/component/JwtTokenProvider.kt | 5 +---- api/src/main/resources/sql/ddl/table_query.sql | 3 ++- .../nexters/bottles/app/admin/service/AdminService.kt | 9 +++++++-- .../com/nexters/bottles/app/auth/domain/BlackList.kt | 11 ++++++----- .../nexters/bottles/app/auth/domain/enum/TokenType.kt | 7 +++++++ 5 files changed, 23 insertions(+), 12 deletions(-) create mode 100644 app/src/main/kotlin/com/nexters/bottles/app/auth/domain/enum/TokenType.kt diff --git a/api/src/main/kotlin/com/nexters/bottles/api/auth/component/JwtTokenProvider.kt b/api/src/main/kotlin/com/nexters/bottles/api/auth/component/JwtTokenProvider.kt index de4dbdef..6d6f3056 100644 --- a/api/src/main/kotlin/com/nexters/bottles/api/auth/component/JwtTokenProvider.kt +++ b/api/src/main/kotlin/com/nexters/bottles/api/auth/component/JwtTokenProvider.kt @@ -83,10 +83,7 @@ class JwtTokenProvider( } fun validateToken(token: String, isAccessToken: Boolean): Boolean { - var expiredAccessToken: BlackList? = null - if (isAccessToken) { - expiredAccessToken = blackListService.findLastExpiredToken(token) - } + var expiredAccessToken = blackListService.findLastExpiredToken(token) val claims = getClaimsFromToken(token, isAccessToken) val now = Date() return expiredAccessToken == null && claims != null && !claims.expiration.before(now) diff --git a/api/src/main/resources/sql/ddl/table_query.sql b/api/src/main/resources/sql/ddl/table_query.sql index a9787a6a..2b19cfce 100644 --- a/api/src/main/resources/sql/ddl/table_query.sql +++ b/api/src/main/resources/sql/ddl/table_query.sql @@ -114,8 +114,9 @@ CREATE TABLE black_list ( id BIGINT AUTO_INCREMENT PRIMARY KEY, expired_access_token VARCHAR(512) NOT NULL, + token_type VARCHAR(50) NOT NULL DEFAULT 'ACCESS_TOKEN' comment 'ACCESS_TOKEN, REFRESH_TOKEN', created_at DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL, - updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL + updated_at DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL ON UPDATE CURRENT_TIMESTAMP ); CREATE INDEX idx_expired_access_token ON black_list (expired_access_token); diff --git a/app/src/main/kotlin/com/nexters/bottles/app/admin/service/AdminService.kt b/app/src/main/kotlin/com/nexters/bottles/app/admin/service/AdminService.kt index 8d6e38ec..d79ea143 100644 --- a/app/src/main/kotlin/com/nexters/bottles/app/admin/service/AdminService.kt +++ b/app/src/main/kotlin/com/nexters/bottles/app/admin/service/AdminService.kt @@ -1,6 +1,7 @@ package com.nexters.bottles.app.admin.service import com.nexters.bottles.app.auth.domain.BlackList +import com.nexters.bottles.app.auth.domain.enum.TokenType import com.nexters.bottles.app.auth.repository.BlackListRepository import com.nexters.bottles.app.auth.repository.RefreshTokenRepository import com.nexters.bottles.app.bottle.domain.Bottle @@ -48,8 +49,12 @@ class AdminService( @TestOnly @Transactional fun expireRefreshToken(token: String, userId: Long) { - refreshTokenRepository.findAllByUserId(userId) - .forEach { refreshTokenRepository.deleteById(it.id) } + blackListRepository.save( + BlackList( + expiredAccessToken = token, + tokenType = TokenType.REFRESH_TOKEN + ) + ) } @TestOnly diff --git a/app/src/main/kotlin/com/nexters/bottles/app/auth/domain/BlackList.kt b/app/src/main/kotlin/com/nexters/bottles/app/auth/domain/BlackList.kt index ff4b1342..18367270 100644 --- a/app/src/main/kotlin/com/nexters/bottles/app/auth/domain/BlackList.kt +++ b/app/src/main/kotlin/com/nexters/bottles/app/auth/domain/BlackList.kt @@ -1,10 +1,8 @@ package com.nexters.bottles.app.auth.domain +import com.nexters.bottles.app.auth.domain.enum.TokenType import com.nexters.bottles.app.common.BaseEntity -import javax.persistence.Entity -import javax.persistence.GeneratedValue -import javax.persistence.GenerationType -import javax.persistence.Id +import javax.persistence.* @Entity class BlackList( @@ -12,5 +10,8 @@ class BlackList( @GeneratedValue(strategy = GenerationType.IDENTITY) val id: Long = 0, - val expiredAccessToken: String, + @Enumerated(EnumType.STRING) + val tokenType: TokenType = TokenType.ACCESS_TOKEN, + + val expiredAccessToken: String, // refreshToken도 저장할 수 있게 변경되었으나 과거에 작성한 변수명이라 그냥 둠 ) : BaseEntity() diff --git a/app/src/main/kotlin/com/nexters/bottles/app/auth/domain/enum/TokenType.kt b/app/src/main/kotlin/com/nexters/bottles/app/auth/domain/enum/TokenType.kt new file mode 100644 index 00000000..8b2de8b4 --- /dev/null +++ b/app/src/main/kotlin/com/nexters/bottles/app/auth/domain/enum/TokenType.kt @@ -0,0 +1,7 @@ +package com.nexters.bottles.app.auth.domain.enum + +enum class TokenType { + ACCESS_TOKEN, + REFRESH_TOKEN, + ; +}