회원토큰 처리

- Redis -> Valkey로 이전되도록 수정
This commit is contained in:
2024-11-22 21:22:02 +09:00
parent 157e3a39b6
commit 68472b234e
4 changed files with 72 additions and 14 deletions

View File

@@ -13,6 +13,7 @@ import kr.co.vividnext.sodalive.member.MemberAdapter
import kr.co.vividnext.sodalive.member.MemberRepository
import kr.co.vividnext.sodalive.member.token.MemberToken
import kr.co.vividnext.sodalive.member.token.MemberTokenRepository
import kr.co.vividnext.sodalive.v2.MemberTokenRepositoryV2
import org.slf4j.LoggerFactory
import org.springframework.beans.factory.InitializingBean
import org.springframework.beans.factory.annotation.Value
@@ -35,7 +36,8 @@ class TokenProvider(
@Value("\${jwt.token-validity-in-seconds}")
private val tokenValidityInSeconds: Long,
private val repository: MemberRepository,
private val tokenRepository: MemberTokenRepository
private val tokenRepository: MemberTokenRepository,
private val tokenRepositoryV2: MemberTokenRepositoryV2
) : InitializingBean {
private val logger = LoggerFactory.getLogger(TokenProvider::class.java)
@@ -65,11 +67,11 @@ class TokenProvider(
val lock = getOrCreateLock(memberId = memberId)
lock.write {
val memberToken = tokenRepository.findByIdOrNull(memberId)
val memberToken = saveAndGetTokenById(memberId)
?: MemberToken(id = memberId)
memberToken.tokenSet.add(token)
tokenRepository.save(memberToken)
tokenRepositoryV2.save(memberToken)
}
return token
@@ -84,7 +86,7 @@ class TokenProvider(
.body
val authorities = claims[AUTHORITIES_KEY].toString().split(",").map { SimpleGrantedAuthority(it) }
val memberToken = tokenRepository.findByIdOrNull(id = claims.subject.toLong())
val memberToken = saveAndGetTokenById(id = claims.subject.toLong())
?: throw SodaException("로그인 정보를 확인해주세요.")
if (!memberToken.tokenSet.contains(token)) throw SodaException("로그인 정보를 확인해주세요.")
@@ -96,6 +98,21 @@ class TokenProvider(
return UsernamePasswordAuthenticationToken(principal, token, authorities)
}
private fun saveAndGetTokenById(id: Long): MemberToken? {
var memberToken = tokenRepositoryV2.findByIdOrNull(id = id)
if (memberToken == null) {
memberToken = tokenRepository.findByIdOrNull(id = id)
if (memberToken != null) {
tokenRepositoryV2.save(memberToken)
tokenRepository.delete(memberToken)
}
}
return memberToken
}
fun validateToken(token: String): Boolean {
try {
Jwts.parserBuilder()