為了在應用程式的實例間持久化令令牌快取,你需要自訂序列化邏輯。 代幣快取序列化涉及的 Java 類別與介面如下:
- ITokenCache:表示安全性權杖快取的介面。
-
ITokenCacheAccessAspect :介面,代表存取前後執行程式碼的操作。 你會以負責將快取序列化和反序列化的邏輯來實作
@OverridebeforeCacheAccess 和 afterCacheAccess。 - ITokenCacheAccessContext:表示存取權杖快取時內容的介面。
以下是一個簡單的自訂序列化代幣快取實作。
Warning
由於以下範例程式碼未完整呈現快取儲存生命週期,我們強烈建議不要將此複製貼上至生產環境。 務必了解令牌緩存的安全性與存取要求。
static class TokenPersistence implements ITokenCacheAccessAspect {
String data;
TokenPersistence(String data) {
this.data = data;
}
@Override
public void beforeCacheAccess(ITokenCacheAccessContext iTokenCacheAccessContext) {
iTokenCacheAccessContext.tokenCache().deserialize(data);
}
@Override
public void afterCacheAccess(ITokenCacheAccessContext iTokenCacheAccessContext) {
data = iTokenCacheAccessContext.tokenCache().serialize();
}
// Loads cache from file
String dataToInitCache = readResource(this.getClass(), "/cache_data/serialized_cache.json");
ITokenCacheAccessAspect persistenceAspect = new TokenPersistence(dataToInitCache);
// By setting *TokenPersistence* on the PublicClientApplication, MSAL will call *beforeCacheAccess()* before accessing the cache and *afterCacheAccess()* after accessing the cache.
PublicClientApplication app =
PublicClientApplication.builder("my_client_id").setTokenCacheAccessAspect(persistenceAspect).build();