Class CacheSignedLinkStore

java.lang.Object
io.leandev.appfuse.security.link.store.CacheSignedLinkStore
All Implemented Interfaces:
SignedLinkStore

public class CacheSignedLinkStore extends Object implements SignedLinkStore

快取儲存實作

使用 AppFuse Cache 儲存單次連結的 jti。jti 自然過期後由快取自動清除。

快取 TTL 須涵蓋 SINGLE_USE 連結壽命:本實作不設定 per-entry TTL (框架 Cache API 無此能力),改依快取整體 TTL 清除。因此注入的快取 TTL 必須 不小於最長的 SINGLE_USE 連結有效期,否則 jti 會在 token 仍有效時就被逐出, 導致合法連結被誤判為「已使用」。registerttl 參數在本實作中僅供參考。

執行緒安全性 / 原子性:consume 使用 Cache.remove(K) 的原子條件 刪除;同一 backing store 上同一 jti 僅一個請求能成功。多節點部署仍須讓所有節點共享 同一個具原子條件刪除能力的 store;各節點各自一份本地 cache 不構成叢集級單次保證。

Since:
1.0
  • Constructor Details

    • CacheSignedLinkStore

      public CacheSignedLinkStore(Cache<String,Boolean> cache)
      建構快取儲存實作
      Parameters:
      cache - 快取實例(TTL 須 ≥ 最長 SINGLE_USE 連結有效期)
  • Method Details

    • register

      public void register(String jti, Duration ttl)
      Description copied from interface: SignedLinkStore
      登記一個單次連結的 jti
      Specified by:
      register in interface SignedLinkStore
      Parameters:
      jti - 連結的 JWT ID
      ttl - 連結有效期(供支援 per-entry 過期的實作使用;快取實作可改用快取整體 TTL)
    • consume

      public boolean consume(String jti)
      Description copied from interface: SignedLinkStore
      原子地消費一個 jti
      Specified by:
      consume in interface SignedLinkStore
      Parameters:
      jti - 連結的 JWT ID
      Returns:
      true 若 jti 原本存在且已被本次呼叫移除(首次使用);false 若不存在(已用過 / 已逾期)