keycloak~jwks-rsa中使用的计划模式

立山  金牌会员 | 2024-5-18 02:34:27 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 916|帖子 916|积分 2748

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举行缓存的包装
  1.         /**
  2.          * 缓存包装器.
  3.          * @throws MalformedURLException
  4.          * @throws JwkException
  5.          */
  6.         @Test
  7.         public void jwkReadCacheWrapper() throws MalformedURLException, JwkException {
  8.                 UrlJwkProvider jwkProvider = new UrlJwkProvider(new URL(jwksUrl));
  9.                 JwkProvider cachedJwkProvider = new GuavaCachedJwkProvider(jwkProvider);
  10.                 Jwk jwk = cachedJwkProvider.get("certsId");
  11.                 Algorithm algorithm = Algorithm.RSA256((RSAPublicKey) jwk.getPublicKey(), null);
  12.                 DecodedJWT jwt = JWT.decode(token);
  13.                 // check JWT is valid
  14.                 algorithm.verify(jwt);
  15.         }
复制代码
程序员的修养,多看好的开源框架,多思考与总结。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

立山

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表