jasypt原理

jasypt原理

  • 一、背景知识
  • 二、原理分析
    • 1、(uml中蓝色)加载Encryptor、Detector和Resolver
    • 2、(uml中红色)加载EnableEncryptablePropertiesBeanFactoryPostProcessor
    • 3、(uml中绿色)解密过程

以jasypt 1.14为例

一、背景知识

需要了解spring的加载顺序:

  • step1:主要是了解@EnableAutoConfiguration注解,这个注解的核心是AutoConfigurationImportSelector
  • step2:AutoConfigurationImportSelector会读取所有spring.factories文件,
  • step3:读取到jasypt-springboot-starter.jar中的spring.factories时,会走动加载JasyptSpringBootAutoConfiguration
    背景在这里插入图片描述

二、原理分析

JasyptSpringBootAutoConfiguration的UML图如下
uml

1、(uml中蓝色)加载Encryptor、Detector和Resolver

  • EncryptablePropertyDetector encryptablePropertyDetector()
    初始化DefaultLazyPropertyDetector,校验是否需要解密(存在ENC( 开头,)结尾的value)
    StringEncryptor stringEncryptor()

  • 初始化DefaultLazyEncryptor,加载了加密相关参数,(jasypt.encryptor.password 加密密钥,jasypt.encryptor.algorithm加密算法)
    在这里插入图片描述

  • EncryptablePropertyResolver encryptablePropertyResolver()
    初始化DefaultLazyPropertyResolver,将密文进行解析

2、(uml中红色)加载EnableEncryptablePropertiesBeanFactoryPostProcessor

  • 重写Ordered.getOrder()
    • 指定初始化顺序(order最大,初始化完成后执行,最后进行解密)
  • 重写BeanFactoryPostProcessor.postProcessBeanFactory()
    • 获取所有propertySources
    • 过滤出所有不是EncrytablePropertySource
    • postProcessBeanFactory()调用makeEncryptable()
      • PROXY和WRAPPER
        • PROXY:代理模式
          properties中设置jasypt.encryptor.proxyPropertySources=true 后才会走代理
        • 会增加一个拦截器,加载PropertySource时,会检查是否被加密
      • WRAPPER:包装器模式
        • 默认,创建一个新的 PropertySource 对象来包装原有的对象
  • instantiatePropertySource()将经过jasypt配置的propertySources,替换成EncryptablePropertySource ,使propertySources具有解密能力在这里插入图片描述

3、(uml中绿色)解密过程

读取属性值的时候,就是将原本spring中的propertySource的getProperty()方法委托给EncryptablePropertySource,getProperty()判断是否是已经加密的value,如果是,则进行解密。如果不是,那就返回原值。

解密代码如下:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/942549.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【UE5 C++课程系列笔记】13——GameInstanceSubsystem的简单使用

目录 概念 基本使用案例 效果 步骤 概念 UGameInstanceSubsystem 类继承自 USubsystem,它与 GameInstance 紧密关联,旨在为游戏提供一种模块化、可方便扩展和管理的功能单元机制。在整个游戏运行期间,一个 GameInstance 可以包含多个 UGa…

SpringCloud 系列教程:微服务的未来(二)Mybatis-Plus的条件构造器、自定义SQL、Service接口基本用法

本篇博客将深入探讨 MyBatis-Plus 的三个核心功能:条件构造器、自定义 SQL 和 Service 接口的基本用法。通过对这些功能的学习和掌握,开发者能够更加高效地使用 MyBatis-Plus 进行业务开发。 目录 前言 条件构造器 自定义SQL Service接口基本用法 总结…

我的 2024 年终总结

2024 年,我离开了待了两年的互联网公司,来到了一家聚焦教育机器人和激光切割机的公司,没错,是一家硬件公司,从未接触过的领域,但这还不是我今年最重要的里程碑事件 5 月份的时候,正式提出了离职…

STM32-笔记11-手写带操作系统的延时函数

1、为什么带操作系统的延时函数,和笔记10上的延时函数不能使用同一种? 因为笔记10的延时函数在每次调用的时候,会一直开关定时器,而在FreeRTOS操作系统中,SysTick定时器当作时基使用。 时基是一个时间显示的基本单位。…

人工智能与物联网:从智慧家居到智能城市的未来蓝图

引言:未来已来,智能化的世界 想象一下,一个早晨,智能闹钟根据你的睡眠状态自动调整叫醒时间,咖啡机早已备好热腾腾的咖啡,窗帘缓缓拉开,迎接清晨的阳光。这不是科幻小说中的场景,而是…

流程控制

第一章 流程控制语句 在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。所以,我们必须清楚每条语句的执行流程。而且,很多时候要通过控制语句的执行顺序来实现我们想要的功能。 1.1 流程控制语句分类 ​ 顺序结构 …

台球助教平台系统开发APP和小程序信息收藏功能需求解析(第十二章)

以下是开发台球助教系统客户端(APP,小程序,H5)几端的信息收藏功能的详细需求和功能说明,内容比较详细,可以说是一个教科书式的详细说明了,这套需求说明不仅仅用在我们的台球助教系统程序上&…

RISC-V 医疗芯片发展方向探究及展望

(一)研究背景与意义 近年来,RISC-V作为一种开源指令集架构在芯片领域迅速兴起。它起源于加州大学伯克利分校,于2011年首次公开发布,后凭借其独特优势吸引了全球众多企业、机构以及科研人员的关注与参与。RISC-V具有开…

三维动画的常用“视觉特效”有哪些?

在当今的视觉盛宴中,三维动画技术宛如一位神奇的魔法师,为视觉特效(VFX)领域施下了变革的咒语。从大荧幕上的震撼电影,到让人沉浸其中的视频游戏,再到夺人眼球的广告以及精细的模拟场景,三维动画…

【EtherCATBasics】- KRTS C++示例精讲(2)

EtherCATBasics示例讲解 目录 EtherCATBasics示例讲解结构说明代码讲解 项目打开请查看【BaseFunction精讲】。 结构说明 EtherCATBasics:应用层程序,主要用于人机交互、数据显示、内核层数据交互等; EtherCATBasics.h : 数据定义…

前端初学基础

一.Web开发 前端三件 HTML ,页面展现 CSS,样式 JS(JavaScript),动起来 二,HTML 1.HTML概念 网页,网站中的一个页面,网页是构成网站的基本元素,是承载各种网站应用的平台。通俗的说,网站就…

C语言结构体位定义(位段)的实际作用深入分析

1、结构体位段格式 struct struct_name {type [member_name] : width; };一般定义结构体,成员都是int、char等类型,占用的空间大小是固定的在成员名称后用冒号来指定位宽,可以指定每个成员所占用空间,并且也不用受结构体成员起始…

机器学习之PCA降维

主成分分析(PCA,Principal Component Analysis) 主成分分析(PCA)是一种常见的无监督学习技术,广泛应用于数据降维、数据可视化以及特征提取等任务。PCA的目标是通过线性变换将数据从高维空间映射到低维空间…

x86_64 Ubuntu 编译安装英伟达GPU版本的OpenCV

手把手带你在Linux上安装带GPU加速的opencv库(C版本)_opencv linux-CSDN博客 cmake \-D CMAKE_BUILD_TYPERELEASE \-D OPENCV_GENERATE_PKGCONFIGON \-D CMAKE_INSTALL_PREFIX/usr/local \-D OPENCV_EXTRA_MODULES_PATH/home/hwj/opencv/opencv_contrib…

Bert各种变体——RoBERTA/ALBERT/DistillBert

RoBERTa 会重复一个语句10次,然后每次都mask不同的15%token。丢弃了NSP任务,论文指出NSP任务有时甚至会损害性能。使用了BPE ALBERT 1. 跨层参数共享 可以共享多头注意力层的参数,或者前馈网络层的参数,或者全部共享。 实验结果…

ReMoE: Fully Differentiable Mixture-of-Experts with ReLU Routing

基本信息 📝 原文链接: https://arxiv.org/abs/2412.14711👥 作者: Ziteng Wang, Jianfei Chen, Jun Zhu🏷️ 关键词: Mixture-of-Experts, ReLU routing📚 分类: 机器学习 摘要 中文摘要 稀疏激活的专家混合模型(…

【C语言程序设计——选择结构程序设计】预测你的身高(头歌实践教学平台习题)【合集】

目录😋 任务描述 相关知识 1、输入数值 2、选择结构语句 3、计算结果并输出 编程要求 测试说明 通关代码 测试结果 任务描述 本关任务:编写一个程序,该程序需输入个人数据,进而预测其成年后的身高。 相关知识 为了完成本…

(Arxiv-2024)SwiftEdit:通过一步扩散实现闪电般快速的文本引导图像编辑

SwiftEdit:通过一步扩散实现闪电般快速的文本引导图像编辑 Paper是VinAI Research发表在Arxiv2024的工作 Paper Title:SwiftEdit: Lightning Fast Text-Guided Image Editing via One-Step Diffusion Code地址 Abstract 文本引导的图像编辑方面的最新进展利用了基于…

python langid识别一段字符串是哪国语言

分析: 在利用爬虫抓取亚马逊网站的数据时,有时会出现所抓页面的语言类型发生错误的情况(如抓取沙特站数据时想要英文页面,抓到的确是阿拉伯语页面)。在数据量大的时候人工排查这类异常情况是非常麻烦的,这时…

英特尔的创新困局与未来的转机:重塑还是消亡?

英特尔,这家曾引领全球半导体行业的巨头,如今正面临前所未有的挑战。从技术创新的停滞,到错失人工智能领域的制高点,再到被AMD和英伟达等竞争对手赶超,英特尔的创新之路似乎正走向尽头。但这是否意味着它的未来注定黯淡…