首页 > 其他分享 >Spring整合jasypt原理分析

Spring整合jasypt原理分析

时间:2024-01-28 21:56:41浏览次数:29  
标签:加密 Spring 解密 RabbitMQ 整合 jasypt encryptor config

前言

在我们系统中,有很多敏感数据,如 MySQL 及 Redis 的账号密码信息等,jasypt 可以帮我们加密这些信息,使系统更加的安全。

使用

添加 maven 依赖

<dependency>
  <groupId>com.github.ulisesbocchio</groupId>
  <artifactId>jasypt-spring-boot-starter</artifactId>
  <version>2.1.2</version>
</dependency>

添加配置

application.yml

jasypt:
  encryptor:
    password: pwd123

spring:
  rabbitmq:
    host: xxx # RabbitMQ 服务的地址
    port: 5672 # RabbitMQ 服务的端口
    username: admin # RabbitMQ 服务的账号
    password: ENC(TKt6b0Ll3t39h9upZ32ntw==) # RabbitMQ 服务的密码
    listener:
      simple:
        acknowledge-mode: manual
    publisher-returns: true
    publisher-confirm-type: correlated

手动创建加密信息

import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig;

public class TestJasypt {
    public static void main(String[] args) {
        testEncrypt();
    }

    private static void testEncrypt(){
        PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
        SimpleStringPBEConfig config = new SimpleStringPBEConfig();
        config.setPassword("pwd123");
        config.setPoolSize(1);
        encryptor.setConfig(config);
        String encryptStr = encryptor.encrypt("szz123");  // 对 RabbitMQ 密码加密
        System.out.println(encryptStr);
    }
}

原理分析

  1. JasyptSpringBootAutoConfiguration 配置类会导入 EnableEncryptablePropertiesConfiguration。
  2. EnableEncryptablePropertiesConfiguration 又会导入 EncryptablePropertyResolverConfiguration 及 EnableEncryptablePropertiesBeanFactoryPostProcessor。
  3. EncryptablePropertyResolverConfiguration 配置类中的 DefaultLazyPropertyDetector 用来判断一个属性值是否为加密字符串,默认为以 ENC( 开头,以 ) 结尾,DefaultLazyEncryptor 用来解密。
  4. EnableEncryptablePropertiesBeanFactoryPostProcessor 后置处理器用来将加密字符串解密为原来的信息,将原来的 PropertySource 转换为 EncryptablePropertySourceWrapper,在被调用 getProperty(name) 方法时才解密,延迟处理。
  5. 最终的解密处理类为 DefaultPropertyResolver,调用 DefaultPropertyDetector 来判断一个属性值是否需要解密,调用 DefaultLazyEncryptor 来解密。
  6. 底层使用 PooledPBEStringEncryptor 来加解密。

参考

【Springboot】Springboot整合Jasypt,让配置信息安全最优雅方便的方式
【Java库】如何使用优秀的加密库Jasypt来保护你的敏感信息?

标签:加密,Spring,解密,RabbitMQ,整合,jasypt,encryptor,config
From: https://www.cnblogs.com/strongmore/p/17968977

相关文章

  • tornado 整合字符串与请求体
    为了方便,字符串和请求提可以整合为一个方法,即get_argument(name.default=x,strip=true)self.finish()方法的调用应该只接受一个参数,表示要发送给客户端的响应。如果你想发送多个参数,使用self.write()方法importtornado.ioloopimporttornado.webclassMainHandler(torna......
  • spring框架 - 通过 @Conditional注解来条件化地应用注解
    条件化地应用注解什么意思呢?参考chatGPT的回答:Spring框架允许您通过@Conditional注解来条件化地应用注解。@Conditional注解用于在特定条件下决定是否应用某个注解或配置。这在很多情况下是非常有用的,特别是在需要根据应用的运行时环境或配置来动态地选择性地应用某些注解......
  • springboot中@Repository 和 @Mapper的区别
    在springboot中他们两都是数据访问层的注解(在定义方面)@Repository:@Repository注解通常用于对DAO(DataAccessObject)组件进行标识。它告诉Spring框架,被注解的类是用于数据访问的组件,可以通过Spring的组件扫描机制自动注册为SpringBean,并且可以将底层的数据访问异......
  • SpringBoot日志配置
    1.简介Spring使用spring5及以后commons-logging被spring直接自己写了。支持log4j2,logback是默认使用的。虽然日志框架很多,但是我们不用担心,使用SpringBoot的默认配置就能工作的很好。 SpringBoot怎么把日志默认配置好的1、每个starter场景,都会导入一个核心场景......
  • 如何改Maven Dependencies的源码,如何把springboot组件的源码改造后使用
    由于springboot提供的源码有些地方不太符合预期,所以需要改动改动,这里就会说到,如何改MavenDependencies的源码。如何把springboot组件的源码改造后使用。v修改源码的几种方式直接在自己工程中建同包同类名的类进行替换采用@Primary注解排除需要替换的jar包中的类@Bean......
  • Springboot CRUD简单实现
    SpringBoot对Spring的改善和优化,它基于约定优于配置的思想,提供了大量的默认配置和实现使用SpringBoot之后,程序员只需按照它规定的方式去进行程序代码的开发即可,而无需再去编写一堆复杂的配置SpringBoot的主要功能如下:起步依赖:SpringBoot以功能化的方式将需要的依赖进行组装,并......
  • SpringBoot启动过程中发布的事件
    springboot启动过程中会发布的事件(启动类的run()方法执行时)ApplicationStartingEvent:应用运行开始事件SpringBoot运行run()方法未进行任务操作时先发布此事件ApplicationEnvironmentPreparedEvent:Environment准备完成事件在Environement准备完成且应用上下文context......
  • 分期部署运维项目:系统整合与产品选择的策略
      在IT领域,运维一直是确保系统稳定、高效运行的关键环节。然而,随着企业IT系统的日益复杂,传统的运维模式已逐渐暴露出诸多不足。在这样的背景下,一体化运维应运而生,成为当前企业IT运维的主流趋势。那么,一体化运维究竟有何魅力?它的未来又将走向何方?  一体化运维的兴起,源于企业......
  • SpringAOP
    一、AOP介绍AOP(面向切面编程)是一种编程思想,底层逻辑是动态代理。什么是动态代理呢?动态代理就是不改变源码的情况下,对目标方法进行增强。传统的动态代理太过繁琐,因此SpringAOP对其进行了一系列简化,使得原本繁琐的代码变得精简,同时使用也更加灵活。二、AOP使用案例在开发过程......
  • springboot学习:建立springboot项目及相关注意事项
    一、建立maven项目后引入依赖:以下没有版本号的依赖表示在springboot父依赖中已锁定相应的版本号必需依赖:1.springboot父依赖<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.5</versio......