首页 > 基础资料 博客日记
keycloak~jwks-rsa中使用的设计模式
2024-04-23 11:30:02基础资料围观529次
这篇文章介绍了keycloak~jwks-rsa中使用的设计模式,分享给大家做个参考,收藏Java资料网收获更多编程知识
com.auth0.jwk组织下面的jwks-rsa包,主要实现的是通过公钥对jwt的签名进行验证,在这个包中,它使用了包装器
的设计模式,对默认的jwks提供者添加了一缓存的支持,通过建立一个GuavaCachedJwkProvider
类,传入一个默认的UrlJwkProvider
来将这个Provider进行包装,让它具有缓存的能力!
包装器模式
包装器模式(Wrapper Pattern)是一种结构型设计模式,它允许在不改变原始对象接口的情况下,动态地向对象添加新的功能。包装器模式通过创建一个包装类,将原始对象作为包装类的成员,并在包装类中定义额外的行为或功能来扩展原始对象的功能。
以下是包装器模式的一些关键角色和特点:
-
Component(组件):定义了被包装对象的接口,可以是一个抽象类或接口。
-
ConcreteComponent(具体组件):实现了Component接口,是被包装的原始对象。
-
Wrapper(包装器):也称为Decorator,持有一个指向Component的引用,并实现了与Component相同的接口。在包装器中可以添加额外的功能,以增强原始对象的行为。
包装器模式的优点包括:
- 灵活性:可以动态地为对象添加新的功能,而无需修改原始对象的代码。
- 遵循开闭原则:可以在不修改现有代码的情况下扩展对象的功能。
- 简化代码:将功能分散到多个小类中,避免了单个类变得庞大复杂。
总的来说,包装器模式可以帮助我们在运行时动态地为对象添加新的功能,同时保持代码的灵活性和可维护性。常见的应用场景包括日志记录、缓存、加密等功能的动态添加。
jwks-rsa中的体现
- 组件 JwkProvider
- 具体组件 UrlJwkProvider
- 包装器
- GuavaCachedJwkProvider 缓存能力
- RateLimitedJwkProvider 限流能力
我们为UrlJwkProvider进行缓存的包装
/**
* 缓存包装器.
* @throws MalformedURLException
* @throws JwkException
*/
@Test
public void jwkReadCacheWrapper() throws MalformedURLException, JwkException {
UrlJwkProvider jwkProvider = new UrlJwkProvider(new URL(jwksUrl));
JwkProvider cachedJwkProvider = new GuavaCachedJwkProvider(jwkProvider);
Jwk jwk = cachedJwkProvider.get("certsId");
Algorithm algorithm = Algorithm.RSA256((RSAPublicKey) jwk.getPublicKey(), null);
DecodedJWT jwt = JWT.decode(token);
// check JWT is valid
algorithm.verify(jwt);
}
程序员的修养,多看好的开源框架,多思考与总结。
文章来源:https://www.cnblogs.com/lori/p/18152405
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签:
相关文章
最新发布
- springboot~3.x项目中使用集成测试
- Java测试类、工具类与JavaBean对比解析
- SpringBoot-日志
- springboot~http2的支持
- 解疑释惑 - 日志体系之 slf4j + logback 组合(一)
- Web server failed to start. Port 8080 was already in use. 端口被占用
- Springboot 项目配置多数据源
- 伙伴匹配系统(移动端 H5 网站(APP 风格)基于Spring Boot 后端 + Vue3 - 05
- 剑指offer-23、搜索⼆叉树的后序遍历序列
- 一个表示金额的数字是 100000000L,这是多少米?