package com.kamco.cd.kamcoback.auth; import java.time.Duration; import lombok.RequiredArgsConstructor; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.core.ValueOperations; import org.springframework.stereotype.Service; /** redis token handler */ @Service @RequiredArgsConstructor public class RefreshTokenService { private final StringRedisTemplate redisTemplate; private static final String PREFIX = "RT:"; /** * Refresh Token 저장 * * @param username 사용자 식별값 (보통 username or userId) * @param refreshToken 발급된 Refresh Token * @param ttlMillis 토큰 만료 시간 (밀리초 단위) */ public void save(String username, String refreshToken, long ttlMillis) { ValueOperations ops = redisTemplate.opsForValue(); ops.set(PREFIX + username, refreshToken, Duration.ofMillis(ttlMillis)); } /** * Refresh Token 검증 * *

1. Redis에 저장된 값 조회 2. 클라이언트가 보낸 refreshToken과 비교 3. 동일하면 true */ public boolean validate(String username, String refreshToken) { String stored = redisTemplate.opsForValue().get(PREFIX + username); return stored != null && stored.equals(refreshToken); } /** * Refresh Token 삭제 * *

로그아웃 시 호출 Redis에서 해당 사용자 토큰 제거 */ public void delete(String username) { redisTemplate.delete(PREFIX + username); } }