반응형
현재 로그아웃 시 Set<String> blacklist = new HashSet<>() 으로
메모리에 blackList.add 로 list를 만들고 filter 에서 검증하는 구조의 프로젝트
블랙리스트는 서버 메모리에 저장 → 서버 재시작하면 초기화되지만
그 사이 로그아웃이 빈번하게 일어나는 업무프로세스
여러 건의 로그아웃 시 메모리 부담이 될 수 있어 스케줄을 통한 블렉리스트 초기화를 구현 하려고 함
추가 할 프로젝트 구조
Project
├─ blacklist/ <-- 블랙리스트 관련 서비스
│ └─ BlacklistService.java (블랙리스트 서비스를 따로 관리 할 경우)
└─ scheduler/ <-- 스케줄러 관련 코드
└─ BlacklistCleanupScheduler.java
└─ MyApplication.java <-- 메인 애플리케이션
BlacklistService.java
package com.example.blacklist;
import org.springframework.stereotype.Service;
import java.util.HashSet;
import java.util.Set;
@Service
public class BlacklistService {
private final Set<String> blacklist = new HashSet<>();
// 토큰 추가
public void add(String token) {
blacklist.add(token);
}
// 블랙리스트 포함 여부 체크
public boolean contains(String token) {
return blacklist.contains(token);
}
// 블랙리스트 초기화
public void clear() {
blacklist.clear();
}
// 내부 Set 직접 반환 (스케줄러용)
public Set<String> getBlacklist() {
return blacklist;
}
}
BlacklistCleanupScheduler.java
package com.example.scheduler;
import com.example.blacklist.BlacklistService;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class BlacklistCleanupScheduler {
private final BlacklistService blacklistService;
public BlacklistCleanupScheduler(BlacklistService blacklistService) {
this.blacklistService = blacklistService;
}
// 운영용: 매일 새벽 3시에 블랙리스트 초기화
@Scheduled(cron = "0 0 3 * * *")
public void clearBlacklistDaily() {
blacklistService.clear();
System.out.println("블랙리스트 초기화 완료 (cron)");
}
/*
// 개발/테스트용: 1분마다 초기화하려면 주석 해제 후 사용
@Scheduled(fixedRate = 60000)
public void clearBlacklistTest() {
blacklistService.clear();
System.out.println("블랙리스트 초기화 완료 (fixedRate)");
}
*/
}
MyApplication.java (메인 애플리케이션)
package com.example;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication
@EnableScheduling
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}반응형
'STUDY > Spring boot' 카테고리의 다른 글
| JWT Httponly (헤더 기반에서 쿠키 사용으로 변경) (0) | 2025.08.11 |
|---|---|
| 다중 datasource 사용 (0) | 2025.04.23 |
| 프로젝트 로컬서버에 외부에서 접속하기(IPTIME 공유기 환경) (2) | 2022.08.10 |
| Spring Boot로 만드는 도서관리시스템웹 프로젝트_06(끝 oracle cloud 배포) (2) | 2022.07.01 |
| Spring Boot로 만드는 도서관리시스템웹 프로젝트_05 (0) | 2022.06.29 |