토큰 생명주기 관리를 위해 Redis TTL(Time To Live) 기능을 사용하는 방향으로 수정해 보았다.
TTL기능을 사용하기 위해선 CrudRepository를 상속받아야 한다. 그래서 수정된 코드는 아래와 같다!
1. RefreshToken (entity)
// 기능 : Redis에 Refresh Token 저장
@Getter
@Setter
@NoArgsConstructor
@RedisHash(value = "refreshToken", timeToLive = 7 * 24 * 60 * 60L ) // 초단위 = 7일
public class RefreshToken {
@Id
private String email;
private String refreshToken;
public RefreshToken(String email, String token) {
this.refreshToken = token;
this.email = email;
}
public RefreshToken updateToken(String token) {
this.refreshToken = token;
return this;
}
}
2. RefreshTokenRepository
@Repository
public interface RefreshTokenRepository extends CrudRepository<RefreshToken, String> {
void deleteById(String email);
}
3. RefreshTokenRepository
// 기능 : Redis에 Refresh Token 저장
@Service
@RequiredArgsConstructor
public class RefreshTokenService {
private final RefreshTokenRepository refreshTokenRepository;
// 특정 RefreshToken 조회
public RefreshToken findByEmail(String email){
return refreshTokenRepository.findById(email).orElseGet(
()-> null
);
}
// RefreshToken 저장
public void saveRefreshToken(RefreshToken refreshToken){
RefreshToken refreshToken1 = new RefreshToken(refreshToken.getEmail(), refreshToken.getRefreshToken());
refreshTokenRepository.save(refreshToken1);
}
// RefreshToken 삭제
public void deleteRefreshToken(String email){
refreshTokenRepository.deleteById(email);
}
}
전체 코드는 아래 깃헙을 참고해 주세요 : ) !
https://github.com/namoldak/Backend
'항해99 개발 일지 > [Final] 실전 프로젝트' 카테고리의 다른 글
[28] 동시성 제어 - 낙관적(Optimistic) 락, 비관적(Pessimisitc)락 (0) | 2023.02.06 |
---|---|
[27] 5주차 기술멘토링 피드백 정리 (0) | 2023.02.04 |
[24] Refresh Token 코드 리뷰 (2) (0) | 2023.01.28 |
[23] Refresh Token 코드 리뷰 (1) (0) | 2023.01.27 |
[22] ubuntu 서버에 Redis 설치하기 (0) | 2023.01.26 |