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

这篇具有很好参考价值的文章主要介绍了keycloak~jwks-rsa中使用的设计模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

com.auth0.jwk组织下面的jwks-rsa包,主要实现的是通过公钥对jwt的签名进行验证,在这个包中,它使用了包装器的设计模式,对默认的jwks提供者添加了一缓存的支持,通过建立一个GuavaCachedJwkProvider类,传入一个默认的UrlJwkProvider来将这个Provider进行包装,让它具有缓存的能力!

包装器模式

包装器模式(Wrapper Pattern)是一种结构型设计模式,它允许在不改变原始对象接口的情况下,动态地向对象添加新的功能。包装器模式通过创建一个包装类,将原始对象作为包装类的成员,并在包装类中定义额外的行为或功能来扩展原始对象的功能。

以下是包装器模式的一些关键角色和特点:

  • Component(组件):定义了被包装对象的接口,可以是一个抽象类或接口。

  • ConcreteComponent(具体组件):实现了Component接口,是被包装的原始对象。

  • Wrapper(包装器):也称为Decorator,持有一个指向Component的引用,并实现了与Component相同的接口。在包装器中可以添加额外的功能,以增强原始对象的行为。

包装器模式的优点包括:

  1. 灵活性:可以动态地为对象添加新的功能,而无需修改原始对象的代码。
  2. 遵循开闭原则:可以在不修改现有代码的情况下扩展对象的功能。
  3. 简化代码:将功能分散到多个小类中,避免了单个类变得庞大复杂。

总的来说,包装器模式可以帮助我们在运行时动态地为对象添加新的功能,同时保持代码的灵活性和可维护性。常见的应用场景包括日志记录、缓存、加密等功能的动态添加。

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.toymoban.com/news/detail-856367.html

到了这里,关于keycloak~jwks-rsa中使用的设计模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • AI问答:前端需要掌握的设计模式/vue项目使用了哪些设计模式/vue项目开发可以使用哪些设计模式

    一、理解什么是设计模式 设计模式是对软件设计开发过程中反复出现的某类问题的通用解决方案。 设计模式是一个在软件设计领域中被广泛应用的概念,它指的是一套被公认为有效的解决特定问题的设计思路和方法。 设计模式更多的是指导思想和方法论,而不是现成的代码

    2024年02月09日
    浏览(67)
  • 设计模式的使用——模板方法模式+动态代理模式

    一、需求介绍   现有自己写的的一套审批流程逻辑,由于代码重构,需要把以前的很多业务加上审批的功能,再执行完审批与原有业务之后,生成一个任务,然后再统一处理一个任务(本来是通过数据库作业去处理的,后来说这个任务要马上去处理,只能去统一添加一个处

    2024年02月10日
    浏览(37)
  • 【软件工程_设计模式】——为什么要使用设计模式?

    什么是设计模式? 为什么要使用设计模式? 使用设计模式的原因如下: 提高 代码的可 读性和可维护性 :设计模式是前人根据经验总结出来的,使用设计模式,就相当于是站在了前人的肩膀上。熟悉设计模式的人应该能够很容易读懂运用设计模式编写的程序。 提高代码的 可

    2024年02月07日
    浏览(62)
  • 【设计模式】SpringBoot优雅使用策略模式

    本篇文章主要会描述SpringBoot与策略模式的结合使用,因为不涉及到理论部分,所以在阅读本篇之前,需要对策略模式的理论已经有了一个基本的了解。 策略模式有3种角色,分别为: 选择器 、 抽象策略 、 策略实例 。 其中 选择器 selector 又被称为上下文 context ,其作用为通

    2024年02月10日
    浏览(40)
  • 【设计模式】什么场景可以考虑使用简单工厂模式

    工厂模式是一种创建型模式,主要作用就是创建对象,将对象的创建过程和使用的过程进行解耦。我们平时说的工厂模式实际上是对三种不同类型的工厂模式的统称, 简单工厂、工厂方法、抽象工厂 ,而在23种设计模式中,只定义了工厂方法和抽象工厂,将简单工厂看作是工

    2024年01月18日
    浏览(64)
  • 【设计模式】使用 go 语言实现简单工厂模式

    最近在看《大话设计模式》,这本书通过对话形式讲解设计模式的使用场景,有兴趣的可以去看一下。 第一篇讲的是 简单工厂模式 ,要求输入两个数和运算符号,得到运行结果。 这个需求不难,难就难在类要怎么设计,才能达到可复用、维护性强、可拓展和灵活性高。 运

    2024年02月05日
    浏览(47)
  • 设计模式-外观模式在Java中的使用示例

    外观模式是一种使用频率非常高的结构型设计模式,它通过引入一个外观角色来简化客户端与子系统 之间的交互,为复杂的子系统调用提供一个统一的入口,降低子系统与客户端的耦合度,且客户端调用非常方便。 示例 自己泡茶和去茶馆喝茶的区别,如果是自己泡茶需要自

    2024年02月17日
    浏览(47)
  • 设计模式-建造者模式在Java中使用示例

    复杂对象的组装与创建 没有人买车会只买一个轮胎或者方向盘,大家买的都是一辆包含轮胎、方向盘和发动机等多个部件的完整汽车。 如何将这些部件组装成一辆完整的汽车并返回给用户,这是建造者模式需要解决的问题。 建造者模式又称为生成器模式,它是一种较为复杂

    2024年02月16日
    浏览(49)
  • 【设计模式】腾讯二面:自动贩卖机/音频播放器使用了什么设计模式?

    状态模式是什么? 状态模式,也被称作状态对象模式,是一种行为设计模式。 当一个对象的内在状态改变时,允许改变其行为,这个对象看起来像是改变了其类。 它让对象在其内部状态改变时改变自己的行为。外部调用者无需了解对象内部状态的具体实现,仅需通过简单的

    2024年01月20日
    浏览(46)
  • 设计模式学习笔记 - 设计模式与范式 -行为型:9.迭代器模式(上):相比直接遍历集合数据,使用迭代器模式有哪些优势?

    上篇文章,我们学习了状态模式。状态模式是状态机的一种实现方式。它通过将事件触发的状态转移和动作执行,拆分到不同的状态类中,以此来避免状态机类中的分支判断逻辑,应对状态机类代码的复杂性。 本章,学习另外一种行为型设计模式,迭代器模式。它用来遍历集

    2024年04月15日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包