package com.tourguide.security; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; import java.time.Duration; @Service public class TokenSessionService { private static final String KEY_PREFIX = "tourguide:auth:session:"; private final StringRedisTemplate redisTemplate; public TokenSessionService(StringRedisTemplate redisTemplate) { this.redisTemplate = redisTemplate; } public void save(TokenPayload payload, long expirationSeconds) { redisTemplate.opsForValue().set(key(payload), String.valueOf(payload.getUserId()), Duration.ofSeconds(expirationSeconds)); } public boolean isActive(TokenPayload payload) { String userId = redisTemplate.opsForValue().get(key(payload)); return String.valueOf(payload.getUserId()).equals(userId); } public void remove(TokenPayload payload) { redisTemplate.delete(key(payload)); } private String key(TokenPayload payload) { return KEY_PREFIX + payload.getClientType().name() + ":" + payload.getTokenId(); } }