회원토큰 처리
- Redis -> Valkey로 이전되도록 수정
This commit is contained in:
		| @@ -7,7 +7,9 @@ import kr.co.vividnext.sodalive.member.MemberRepository | ||||
| import kr.co.vividnext.sodalive.member.MemberRole | ||||
| import kr.co.vividnext.sodalive.member.login.LoginRequest | ||||
| import kr.co.vividnext.sodalive.member.login.LoginResponse | ||||
| 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.springframework.beans.factory.annotation.Value | ||||
| import org.springframework.data.repository.findByIdOrNull | ||||
| import org.springframework.security.authentication.UsernamePasswordAuthenticationToken | ||||
| @@ -22,6 +24,7 @@ import kotlin.concurrent.write | ||||
| class CreatorAdminMemberService( | ||||
|     private val repository: MemberRepository, | ||||
|     private val tokenRepository: MemberTokenRepository, | ||||
|     private val tokenRepositoryV2: MemberTokenRepositoryV2, | ||||
|     private val tokenProvider: TokenProvider, | ||||
|     private val authenticationManagerBuilder: AuthenticationManagerBuilder, | ||||
|  | ||||
| @@ -47,13 +50,29 @@ class CreatorAdminMemberService( | ||||
|  | ||||
|         val lock = getOrCreateLock(memberId = memberId) | ||||
|         lock.write { | ||||
|             val memberToken = tokenRepository.findByIdOrNull(memberId) | ||||
|                 ?: throw SodaException("로그인 정보를 확인해주세요.") | ||||
|             val memberToken = saveAndGetTokenById(memberId) | ||||
|  | ||||
|             if (memberToken != null) { | ||||
|                 memberToken.tokenSet.remove(token) | ||||
|             tokenRepository.save(memberToken) | ||||
|                 tokenRepositoryV2.save(memberToken) | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     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 | ||||
|     } | ||||
|  | ||||
|     private fun login(email: String, password: String): LoginResponse { | ||||
|         val member = repository.findByEmail(email = email) ?: throw SodaException("로그인 정보를 확인해주세요.") | ||||
|   | ||||
| @@ -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() | ||||
|   | ||||
| @@ -35,9 +35,11 @@ import kr.co.vividnext.sodalive.member.stipulation.StipulationIds | ||||
| import kr.co.vividnext.sodalive.member.stipulation.StipulationRepository | ||||
| import kr.co.vividnext.sodalive.member.tag.MemberCreatorTag | ||||
| import kr.co.vividnext.sodalive.member.tag.MemberTagRepository | ||||
| import kr.co.vividnext.sodalive.member.token.MemberToken | ||||
| import kr.co.vividnext.sodalive.member.token.MemberTokenRepository | ||||
| import kr.co.vividnext.sodalive.utils.generateFileName | ||||
| import kr.co.vividnext.sodalive.utils.generatePassword | ||||
| import kr.co.vividnext.sodalive.v2.MemberTokenRepositoryV2 | ||||
| import org.springframework.beans.factory.annotation.Value | ||||
| import org.springframework.data.repository.findByIdOrNull | ||||
| import org.springframework.security.authentication.UsernamePasswordAuthenticationToken | ||||
| @@ -62,6 +64,7 @@ import kotlin.concurrent.write | ||||
| class MemberService( | ||||
|     private val repository: MemberRepository, | ||||
|     private val tokenRepository: MemberTokenRepository, | ||||
|     private val tokenRepositoryV2: MemberTokenRepositoryV2, | ||||
|     private val stipulationRepository: StipulationRepository, | ||||
|     private val stipulationAgreeRepository: StipulationAgreeRepository, | ||||
|     private val creatorFollowingRepository: CreatorFollowingRepository, | ||||
| @@ -435,11 +438,12 @@ class MemberService( | ||||
|  | ||||
|         val lock = getOrCreateLock(memberId = memberId) | ||||
|         lock.write { | ||||
|             val memberToken = tokenRepository.findByIdOrNull(memberId) | ||||
|                 ?: throw SodaException("로그인 정보를 확인해주세요.") | ||||
|             val memberToken = saveAndGetTokenById(memberId) | ||||
|  | ||||
|             if (memberToken != null) { | ||||
|                 memberToken.tokenSet.remove(token) | ||||
|             tokenRepository.save(memberToken) | ||||
|                 tokenRepositoryV2.save(memberToken) | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
| @@ -451,7 +455,25 @@ class MemberService( | ||||
|         member.pushToken = null | ||||
|  | ||||
|         val lock = getOrCreateLock(memberId = memberId) | ||||
|         lock.write { tokenRepository.deleteById(memberId) } | ||||
|         lock.write { | ||||
|             tokenRepository.deleteById(memberId) | ||||
|             tokenRepositoryV2.deleteById(memberId) | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     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 | ||||
|     } | ||||
|  | ||||
|     @Transactional | ||||
|   | ||||
| @@ -5,4 +5,4 @@ import org.springframework.data.repository.CrudRepository | ||||
| import org.springframework.stereotype.Repository | ||||
| 
 | ||||
| @Repository | ||||
| interface NewMemberTokenRepository : CrudRepository<MemberToken, Long> | ||||
| interface MemberTokenRepositoryV2 : CrudRepository<MemberToken, Long> | ||||
		Reference in New Issue
	
	Block a user