This commit is contained in:
@@ -9,12 +9,15 @@ import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
/**
|
||||
* UserBase 作为「应用密钥权威源」的验签密钥提供方。<br><br>
|
||||
* UserBase 作为「应用密钥权威源」的验签密钥提供方。<br>
|
||||
* <br>
|
||||
* 解析优先级:<br>
|
||||
* 1) 本库 application_info —— 覆盖全部「已颁发」应用,新增/重置密钥后即时生效;<br>
|
||||
* 2) 配置式受信应用 {@code yh.app-auth.trusted-apps} —— 平台自身默认密钥(如 应用中心 100616)
|
||||
* 兜底,使其即便尚未落库也可验签,避免「默认 appKey 未建行」导致验签失败。<br><br>
|
||||
* 带 60s 本地 TTL 缓存,避免每次验签直打库(密钥变更最长 60s 后生效)。<br><br>
|
||||
* 兜底,使其即便尚未落库也可验签,避免「默认 appKey 未建行」导致验签失败。<br>
|
||||
* <br>
|
||||
* 带 60s 本地 TTL 缓存,避免每次验签直打库(密钥变更最长 60s 后生效)。<br>
|
||||
* <br>
|
||||
* 这样 UserBase 作为颁发方不依赖 Redis 预热、也不局限于 trustedApps 写死的少量密钥,
|
||||
* 能够验签所有它已颁发的应用。
|
||||
*/
|
||||
@@ -59,6 +62,22 @@ public class UserBaseAppSecretProvider implements AppSecretProvider {
|
||||
return secret;
|
||||
}
|
||||
|
||||
/**
|
||||
* 主动失效:立刻清除本地缓存中指定 appKey 的条目,密钥重置后调用 → 下一次 getSecret 直查 DB 拿新值,
|
||||
* 不再受最长 60s TTL 生效窗口限制。
|
||||
*/
|
||||
public void invalidate(String appKey) {
|
||||
if (appKey == null) {
|
||||
return;
|
||||
}
|
||||
cache.remove(appKey);
|
||||
}
|
||||
|
||||
/** 主动失效:立刻清空全部本地缓存(refreshAll / Redis 全量对账时调用)。 */
|
||||
public void invalidateAll() {
|
||||
cache.clear();
|
||||
}
|
||||
|
||||
private static Integer parse(String appKey) {
|
||||
try {
|
||||
return Integer.parseInt(appKey.trim());
|
||||
|
||||
Reference in New Issue
Block a user