SpringBoot使用jasypt给配置文件加密

文章目录

  • SpringBoot使用jasypt
    • 引入依赖
    • 定义秘钥的几种方法
    • 加密解密
  • 个人工具类分享
    • 快速给配置文件的所有参数加密
    • 快速给所有加密的参数解密

本文分享使用jasypt加密配置文件

并且快速加密配置文件,不需要挨个@Value读取配置变量读取再加密,也不需要复制到main方法挨个加密

直接通过IO读取配置文件正则加密配置信息

SpringBoot使用jasypt

引入依赖

加密方面只需要引入这个

			<dependency>
            <groupId>com.github.ulisesbocchiogroupId>
            <artifactId>jasypt-spring-boot-starterartifactId>
            <version>3.0.4version>
        dependency>

因为要用到测试

再加上这个

 				<dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
        dependency>

定义秘钥的几种方法

秘钥的定义 : jasypt.encryptor.password=yourpassword

  1. 这个你可以卸载yml配置文件里面,

  2. 你也可以写在idea的启动参数上面,

  3. 也可以在运维部署的时候再java -jar 加参数的方式加上去

千万记得你不要把这个秘钥暴露出去,不然别人也能破解你的加密信息

加密解密

先获取加解密对象

    @Autowired
    private StringEncryptor encryptor;

加密:encryptor.decrypt(code);

解密:encryptor.decrypt(code);

个人工具类分享

核心就是使用Spring的配置环境变量去动态获取参数

@Autowired
ConfigurableEnvironment env;

快速给配置文件的所有参数加密

 private void encodeFileByFileName(String yourFileName) {
        MutablePropertySources propertySources = env.getPropertySources();
        Iterator<PropertySource<?>> iterator =
                propertySources.iterator();

        while (iterator.hasNext()) {
            PropertySource<?> next = iterator.next();
            String name = next.getName();
            if (!name.contains(yourFileName)) {
                continue;
            }
            Map<String, Object> keyValues = (Map<String, Object>) next.getSource();
            keyValues.forEach((key, value) -> {
                log.info("变量:{}===>ENC({})",key,encryptor.encrypt(value.toString()));
            });
        }
    }

快速给所有加密的参数解密


private void decodeFileByFileName(String yourFileName) {
    MutablePropertySources propertySources = env.getPropertySources();
    Iterator> iterator =
            propertySources.iterator();

    while (iterator.hasNext()) {
        PropertySource next = iterator.next();
        String name = next.getName();
        if (!name.contains(yourFileName)) {
            continue;
        }
        Map keyValues = (Map) next.getSource();
        keyValues.forEach((key, value) -> {
            String valueStr = value.toString();
            if (valueStr.startsWith("ENC(")){
                log.info("变量:{}===>{}",key,encryptor.decrypt(valueStr.substring(4,valueStr.length()-1)));
            }

        });
    }
}

你可能感兴趣的:(spring,boot,后端,java)