默认的凭证的刷新服务,类似token失效,它是一个周期性的服务, token续约的服务, 使用Function <Duration, Long> refreshDelayStrategy, 一旦凭证提供者已经续约了,将会回调注册,重新发送一个新的秘密到AMQP的连接 , 这里也使用构造器模式
- DefaultCredentialsRefreshService 实现了CredentialsRefreshService接口
1、CredentialsRefreshService 接口
- 凭证续约接口
1.1、方法
方法名 | 描述 | 图示 |
---|---|---|
String register | 注册需要续约实体 | |
void unregister | 取消注册 | |
boolean isApprochingExpiration | 是否过期失效 |
2、DefaultCredentialsRefreshService
2.1、成员变量
变量名 | 值 | 描述 |
---|---|---|
SheduledExecutorService scheduler | 周期刷新token续约 | |
ConcurrentMap<CredentialsProvider, CredentialsProviderState> credentialsProviderStates | 证书提供状态map | |
boolean privateSheduler | 是否为私有周期任务(传入,还默认生成的) | |
Function<3, Duration> refreshDelayStrategy | 延迟刷新策略 | |
Function<Duration, Boolean> approachingExpirationStrategy | 是否失效,一般需要提前续约 |
2.2、方法
方法名 | 描述 | 图示 |
---|---|---|
构造方法 | 一般使用DefaultCredentialsRefreshServiceBuilder构建 | |
ratioRefreshDelayStrategy(double ratio) | 延迟刷新,实例化RatioRefreshDelayStrategy对象 | |
fixedDelayBeforeExpirationRefreshDelayStrategy(Duration duration) | 间隔时间执行,实例化 FixedDelayBeforeExpirationRefreshDelayStrategy | |
fixedTimeApproachingExpirationStrategy(Duration limitBeforeExpiration) | 固定失效时间 FixedTimeApproachingExpirationStrategy | |
String register() | 注册 | 1 |
void unregister() | 取消注册(移除注册信息) | |
2.2.1、String register()
3、RatioRefreshDelayStrategy
-
实现了Function<Duration, Duration>接口
-
说明输入参数是Duration, 输出也是Duration (秒)
-
实现apply方法
-
return Duration.ofSeconds((long) ((double) duration.getSeconds() * ratio));
-
-
举个例子,比如一个token有效期是60秒,且ratio是0.8, 那么它刷新时间就是 48秒的时候
4、FixedDelayBeforeExpirationRefreshDelayStrategy
-
减去一个延迟时间间隔 (分钟)
-
Duration refreshTimeBeforeExpiration = timeBeforeExpiration.minus(delay); if (refreshTimeBeforeExpiration.isNegative()) { return timeBeforeExpiration; } else { return refreshTimeBeforeExpiration; }
5、FixedTimeApproachingExpirationStrategy
-
毫秒
-
return timeBeforeExpiration.toMillis() <= limitBeforeExpiration;
-
输入时间少于等于限制时间
6、Registration
- 注册对象
6.1、成员变量
变量名 | 值 | 描述 |
---|---|---|
Callable refreshAction | 刷新动作 | |
AtomicInteger errorHistory | 0 | 错误历史 |
String id | 注册id |
7、CredentialsProviderState
- 凭证提供状态
7.1、成员变量
变量名 | 值 | 描述 |
---|---|---|
CredentialsProvider credentialsProvider | 凭证 | |
Map<String, Registration> registrations | 注册map(id是注册id | |
AtomicReference<ScheduledFuture<?>> refreshTask | 刷新任务 | |
AtomicBoolean refreshTaskSet | 刷新task的set |
7.2、方法
方法名 | 描述 | 图示 |
---|---|---|
构造方法 | 只传递 credentialsProvider | |
add(Registration) | 添加注册对象 | |
maybeSetRefreshTask(Supplier<ScheduledFuture<?>>) | 可能刷新task任务 | |
refresh() | 刷新方法 | 1 |
unregister(registrationId) | 移除注册信息 |
7.2.1、refresh() (图示1)
-
需要注意
-
刷新CredentialProvider
-
刷新Registration(注册信息)
-
8、 DefaultCredentialsRefreshServiceBuilder
- 默认构建器
8.1、成员变量
-
方法名 值 描述 ScheduledExecutorService scheduler 周期任务 Function<Duration, Duration> refreshDelayStrategy 默认是0.8 * 失效时间 失效策略 Function<Duration, Boolean> approachingExpirationStrategy ttl -> false 判断是否失效,重新获取
9、总结
- 这里可以用于通用token刷新实现方案
- 这里核心概念,失效策略, 注册,注销