From f449b32ccd05ca189af51ead9d6b74fa1f713df8 Mon Sep 17 00:00:00 2001 From: forge-bot Date: Mon, 13 Jul 2026 10:30:34 +0000 Subject: [PATCH] =?UTF-8?q?=EC=9D=B8=EC=A6=9D/=EA=B6=8C=ED=95=9C=20?= =?UTF-8?q?=EC=97=85=EB=AC=B4=20=EA=B7=9C=EC=B9=99=EA=B3=BC=20=EC=A0=84?= =?UTF-8?q?=ED=99=98=20=EB=B6=88=EB=B3=80=EC=8B=9D=20=EC=B6=94=EC=B6=9C=20?= =?UTF-8?q?(codex-bais-final3-20260713-192718-BAIS-SPRING-ANA-AUTH-001)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auth/security/TokenBlacklistService.java | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 auth-migration/src/main/java/com/example/auth/security/TokenBlacklistService.java diff --git a/auth-migration/src/main/java/com/example/auth/security/TokenBlacklistService.java b/auth-migration/src/main/java/com/example/auth/security/TokenBlacklistService.java new file mode 100644 index 0000000..a191089 --- /dev/null +++ b/auth-migration/src/main/java/com/example/auth/security/TokenBlacklistService.java @@ -0,0 +1,29 @@ +package com.example.auth.security; + +import org.springframework.stereotype.Service; + +import java.time.Instant; +import java.util.concurrent.ConcurrentHashMap; + +/** + * Token Blacklist Service - preserves AUTH-012 invariant. + * Logout immediately invalidates token. + */ +@Service +public class TokenBlacklistService { + + private final ConcurrentHashMap blacklist = new ConcurrentHashMap<>(); + + public void blacklist(String token) { + blacklist.put(token, Instant.now()); + } + + public boolean isBlacklisted(String token) { + return blacklist.containsKey(token); + } + + public void cleanupExpired() { + Instant cutoff = Instant.now().minusSeconds(7 * 24 * 60 * 60); + blacklist.entrySet().removeIf(entry -> entry.getValue().isBefore(cutoff)); + } +}