@Bean
public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory connectionFactory) {
// RedisTemplate<K: key, V: val> 넣을 것이다. 다만 Redis는 내부적으로 byte[]만 저장!
RedisTemplate<String, String> template = new RedisTemplate<>();
template.setConnectionFactory(connectionFactory);
template.setKeySerializer(new StringRedisSerializer()); // Key를 문자열 그대로 저장
template.setValueSerializer(new StringRedisSerializer()); // Val를 문자열 그대로 저장
return template;
}
만약 객체 저장을 하는 경우.
RedisTemplate<String, User>
Jackson2JsonRedisSerializer<User> serializer =
new Jackson2JsonRedisSerializer<>(User.class);
template.setValueSerializer(serializer);
2) jwt 발급 코드
private static final long REFRESH_EXPIRE_DAYS = 7; // 만료시간
private static final String REFRESH_KEY_PREFIX = "refresh:"; // key 입력시 사용
private TokenResponseDTO issueToken(Long userId, String role) {
String accessToken = jwtProvider.createAccessToken(userId, role);
String refreshToken = jwtProvider.createRefreshToken(userId);
// redisTemplate.opsForValue().set("key", "value",만료시간, 시간 유닛);
// redisTemplate.opsForValue().set("key", "value"); 기본은 이렇게
redisTemplate.opsForValue().set(
REFRESH_KEY_PREFIX + userId,
refreshToken,
REFRESH_EXPIRE_DAYS,
TimeUnit.DAYS
);
return new TokenResponseDTO(accessToken, refreshToken, userId, role);
-----------------------------
// 이를 적용한 코드
@Override
public TokenResponseDTO login(LoginRequestDTO dto) {
// 1. signId로 계정 조회
AuthLocalAccount account = localAccountRepository.findBySignId(dto.getSignId())
.orElseThrow(() -> new IllegalArgumentException("아이디 또는 비밀번호가 올바르지 않습니다."));
// 2. 비밀번호 검증
if (!passwordEncoder.matches(dto.getPassword(), account.getPassword())) {
throw new IllegalArgumentException("아이디 또는 비밀번호가 올바르지 않습니다.");
}
// 3. JWT 발급
return issueToken(account.getUserId(), account.getRoleName().name());
}