默认的凭证的刷新服务,类似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方法
-
举个例子,比如一个token有效期是60秒,且ratio是0.8, 那么它刷新时间就是 48秒的时候
4、FixedDelayBeforeExpirationRefreshDelayStrategy
5、FixedTimeApproachingExpirationStrategy
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刷新实现方案
- 这里核心概念,失效策略, 注册,注销
|