import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import java.util.UUID;
import java.time.Duration;
@Service
public class LoginService {
@Autowired
private UserRepository userRepository;
@Autowired
private StringRedisTemplate redisTemplate;
public String loginAndGetToken(String username, String password) {
String cachedToken = getCachedToken(username);
if (cachedToken != null) {
return cachedToken;
}
User user = userRepository.findByUsername(username);
if (user != null && user.getPassword().equals(password)) {
String token = generateRandomToken();
cacheToken(username, token);
return token;
}
return null;
}
private String getCachedToken(String username) {
return redisTemplate.opsForValue().get("token:" + username);
}
private void cacheToken(String username, String token) {
redisTemplate.opsForValue().set("token:" + username, token, Duration.ofMinutes(60));
}
private String generateRandomToken() {
return UUID.randomUUID().toString();
}
}