jasypt 原理_litmp试剂

jasypt 原理_litmp试剂文章目录一、jasypt的启动类加载二、jasypt中Encryptor、Detector和Resolver加载三、jasypt中EnableEncryptablePropertiesBeanFactoryPostProcesso四、proxy代理方式增强propertySources五、wrapper包装类方式增强propertySources六、resolver中属性值解密作者:史佳健推荐理由:文章详尽并有对应分析说明一、jasypt的启动类加载引入了jasypt-spring-boot-st

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

作者:史佳健

推荐理由:文章详尽并有对应分析说明

一、jasypt的启动类加载

引入了jasypt-spring-boot-starter的jar包之后,项目启动的时候,是如何加载jasypt的呢? 这利用的是项目启动类上的一个注解@SpringBootApplication,这个注解中引用了@EnableAutoConfiguration注解。

这个注解又引入了继承了AutoConfigurationImportSelector类的EnableAutoConfigurationImportSelector类,在AutoConfigurationImportSelect类中提供了getCandidateConfigurations方法。在该方法中,

从classpath中搜索所有META-INF/spring.factories配置文件。然后,将其中org.springframework.boot.autoconfigure.EnableAutoConfiguration key对应的配置项加载到spring容器中。这样就实现了在spring boot中加载外部项目的bean或者第三方jar中的bean。

这里jasypt-spring-boot-starter加载的就是类com.ulisesbocchio.jasyptspringboot.JasyptSpringBootAutoConfiguration。

二、 jasypt中Encryptor、Detector和Resolver加载

jasypt-spring-boot-starter中的启动类JasyptSpringBootAutoConfiguration,注解了@Import(EnableEncryptablePropertiesConfiguration.class)。先加载EnableEncryptablePropertiesConfiguration类。

这个类主要是用来加载lazyJasyptStringEncryptor、lazyEncryptablePropertyDetector和lazyEncryptablePropertyResolver。这些类在加载的时候,都是先从bean工厂中获取对应的对象,如果获取不到就创建默认对象。

这样做是为了方便我们扩展,可以自定义Encryptor、Detector和Resolver类。比如自定义StringEncryptor
在这里插入图片描述

三、jasypt中EnableEncryptablePropertiesBeanFactoryPostProcesso

EnableEncryptablePropertiesConfiguration类中,创建了EnableEncryptablePropertiesBeanFactoryPostProcessor对象,这个类实现了BeanFactoryPostProcessor接口、ApplicationListener接口和Ordered接口。

实现了BeanFactoryPostProcessor,重写其中的postProcessBeanFactory方法,可以在容器初始化完成之后执行重写后的postProcessBeanFactory方法,实现Ordered接口,重写其中的getOrder方法,

可以用来指定在多个实现BeanFactoryPostProcessor类中的执行顺序,比如返回Ordered.LOWEST_PRECEDENCE,就是指初始化顺序最低,即最后初始化,也就是说表明在容器初始化完成之后,最后执行该类中的postProcessBeanFactory。

在这里插入图片描述
在这里插入图片描述在这里插入图片描述EnableEncryptablePropertiesBeanFactoryPostProcessor类中,实现BeanFactoryPostProcessor,重写的postProcessBeanFactory方法。 该方法中的主要逻辑就是,获取所有的propertySources。

然后过滤出所有的不是EncrytablePropertySource,然后通过makeEncryptable方propertySource对象法,将所有通过jasypt加密的配置项的propertySources替换成拥有加解密功能的对象。可以通过代理和包装来增强propertySources。

可以通过配置项来指定增强方式。一般默认的是包装类的方式
在这里插入图片描述
在创建EnableEncryptablePropertiesBeanFactoryPostProcessor对象的时候,就通过jasypt.encryptor.proxyPropertySources配置项来指定propertySource的增强方式,默认是wrapper包装类的方式。 可以修改为代理方式。

四、proxy代理方式增强propertySources

在这里插入图片描述上面就是makeEncryptable方法中,通过proxy代理的方式增强propertySources对象,在调用propertySources中的方法的时候,通过EncryptablePropertySourceMethodInterceptor对象中的invoke方法进行代理。

创建EncryptablePropertySourceMethodInterceptor对象的两个入参,第一个就是被代理对象,第二个就是真正执行获取属性getProperty方法的EncryptablePropertyResolver,可以在获取属性的时候,对通过jasypt加密的属性进行解密。
在这里插入图片描述在这里插入图片描述上面就是EncryptablePropertySourceMethodInterceptor对象中的invoke方法。主要是先保证,代理的方法是getProperty方法,然后通过EncryptablePropertySourceMethodInterceptor实现的EncryptablePropertySource接口中的

默认方法 default Object getProperty(EncryptablePropertyResolver resolver, PropertySource source, String name)方法,来获取指定属性解密之后的值。在另外一种增强方式Wrapper包装方式中,最终使用的也是该接口中的这个默认方法。

五、wrapper包装类方式增强propertySources

在这里插入图片描述在这里插入图片描述
上面就是makeEncryptable方法中,通过wrapper包装类增强propertySources的方式。给不同类型的propertySources进行不同的包装。实现增强的方式,主要是通过重写包装类继承PropertySources中的getProperty方法,

在重写的方法中,调用所实现的EncrytablePropertyResoler接口中的那个getProperty默认方法。
在这里插入图片描述EncrytablePropertyResoler接口中的默认方法getProperty。先通过原本的propertySources对象,获取配置文件中加密之后的指定属性的值。先判断是字符串类型的(加密之后一般都是字符串类型的)。

然后通过EncrytablePropertyResolver对象中的resolvePropertyValue方法,将加密的属性值解密。最后返回解密之后的值。

六、resolver中属性值解密

在这里插入图片描述
在这里插入图片描述
上面是默认的DefaultPropertyResolver对象中的resolvePropertyValue方法。在方法中先是通过EncryptablePropertyDetector对象的isEncrypted方法来判断传入的属性值,是否被加密,判断逻辑是该值是否是以配置的前缀和后缀来开头和结尾的。

如果是,那么就认为是加密之后的值。然后再将值截取前缀和后缀,通过StringEncryptor对象的decrypt方法对加密内容解密,最后返回解密之后的值。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/189438.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • SchedulerFactoryBean初始化监听

    SchedulerFactoryBean初始化监听SchedulerFactoryBean初始化监听今天碰到一个问题,使用的是Quartz动态控制定时器的运行,功能已经完善,但是每次上线定时项目的时候,总要重启,一重启,所有定时任务自动就停止了,就会跟数据库对应的定时器状态不一致,在网上找了半天,找到了关于SchedulerFactoryBean初始化监听的东西,网上的文章大部分是SchedulerFactoryBean初始化解析,全部去研究…

    2022年5月24日
    57
  • 【转载】分布式数据库架构–分库、分表、排序、分页、分组、实现

    【转载】分布式数据库架构–分库、分表、排序、分页、分组、实现

    2021年11月21日
    41
  • pycharm 2022.01 激活(注册激活)2022.01.27「建议收藏」

    (pycharm 2022.01 激活)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html1TCF2R91JZ-eyJsaWNlbnNlSWQi…

    2022年3月31日
    576
  • mysql创建前缀索引

    mysql创建前缀索引ALTERtable表名addindextitle_pre(列名(100))列名后面的数字代表前缀的长度,前缀长度并不是越长越好,这里涉及到一个选择性问题,selectcount(distinct列名)/count(*)asa,COUNT(DISTINCTleft(列名,100))asb,COUNT(DISTINCTleft(列名,110))ascfrom表名来查…

    2022年5月10日
    63
  • Idea激活码最新教程2023.3.1版本,永久有效激活码,亲测可用,记得收藏

    Idea激活码最新教程2023.3.1版本,永久有效激活码,亲测可用,记得收藏Idea 激活码教程永久有效 2023 3 1 激活码教程 Windows 版永久激活 持续更新 Idea 激活码 2023 3 1 成功激活

    2025年5月27日
    3
  • 怎么看微信撤回的效果?教你看微信已撤回的消息、图片

    怎么看微信撤回的效果?教你看微信已撤回的消息、图片微信小助手故障之后如何实现微信多开和微信防撤回免认证功能呢?这里macw为大家推荐另外一款非常不错微信多开助手微信伴侣WechatTweak,微信伴侣WechatTweak功能就比较简单直接,主要包括防撤回、多开、免二次认证登录和消息处理增强。WeChatTweak小助手集成版安装教程注意!此版本集成了最新版微信!一键安装即可!无需终端!部分读者朋友反映安装了插件之后聊天记录丢失的问题,可以通过迁移聊天记录的方式来解决:执行以下命令即可迁移聊天记录:cp-R~/Library/C

    2022年6月26日
    34

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号