当前位置: 首页 > article >正文

SpringBoot集成ENC对配置文件进行加密

在线MD5生成工具

配置文件加密,集成ENC

  1. 引入POM依赖

     <!-- ENC配置文件加密 -->
        <dependency>
            <groupId>com.github.ulisesbocchio</groupId>
            <artifactId>jasypt-spring-boot-starter</artifactId>
            <version>2.1.2</version>
        </dependency>
    
  2. 【注意】开始使用的3.1.5版本,启动报错:Reason: org.springframework.boot.context.properties.bind.BindException: Failed to bind properties under 'spring.redis.password' to java.lang.String

    报错原因:因为3.x版本的默认加密算法变了,所以对应配置文件加密算法配置得修改,同时加密的方法也得用新的加密算法计算出加密字符串。

  3. 使用工具类对明文数据进行加密处理,使用完后为了安全起见,可以删除加密盐值

    package com.basic.test;
    
    import org.jasypt.util.text.BasicTextEncryptor;
    import org.junit.Test;
    
    /**
     * ClassName: CryptTest
     * Package: com.basic.test
     * Description:
     *
     * @Author 王涵
     * @Date 2024/12/17 14:18
     * @Version 1.0
     */
    public class CryptTest {
    
        /**
         * 加密盐值,使用完成后进行删除,或者不能提交到`生产环境`,比如:
         */
        private final static String PASSWORD = "basic";
    
        @Test
        public void encTest() {
            BasicTextEncryptor encryptor = new BasicTextEncryptor();
            // 用于设置加密密钥。密钥是用于加密和解密字符串的关键信息。
            encryptor.setPassword(PASSWORD);
    
            // 明文1
            String name_encrypt = "wwwbaiducom";
            // 明文2
            String password_encrypt = "123456";
    
            // 明文加密
            String encrypt1 = encryptor.encrypt(name_encrypt);
            String encrypt2 = encryptor.encrypt(password_encrypt);
            System.out.println("明文加密1:" + encrypt1);
            System.out.println("明文加密2:" + encrypt2);
    
            // 密文解密
            String decrypt1 = encryptor.decrypt(encrypt1);
            String decrypt2 = encryptor.decrypt(encrypt2);
            System.out.println("密文解密1:" + decrypt1);
            System.out.println("密文解密2:" + decrypt2);
        }
    }
    
  4. 将加密后的密码配置到配置文件,使用ENC()包裹。不需要ENC时可以直接写密码,不用ENC包裹即可

 # 主库数据源
 master:
     url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
     username: root
     password: ENC(dboFmyYdJOKJYKt1DX/jmzPBcipbHHeP)
  1. 运行时配置

    1. 打开Run/Debug Configuratios
      在这里插入图片描述

    2. 打开Modify options选择Add VM Optiosn

    3. 配置VM Options为自己的加密盐值
      在这里插入图片描述

  2. 启动类配置@EnableEncryptableProperties

    package com.basic;
    
    import com.ulisesbocchio.jasyptspringboot.annotation.EnableEncryptableProperties;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
    
    /**
     * @Author WangHan
     * 心中那自由的世界,如此的清澈高远。
     * @Date 2024/12/6 14:47
     * @Description 启动程序
     */
    @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
    @EnableEncryptableProperties
    public class BasicApplication
    {
        public static void main(String[] args)
        {
            // 热部署生效 true 开启热部署 false 关闭热部署
            System.setProperty("spring.devtools.restart.enabled", "false");
            SpringApplication.run(BasicApplication.class, args);
            System.out.println("(♥◠‿◠)ノ゙  基础框架启动成功   ლ(´ڡ`ლ)゙");
        }
    }
    
  3. jar包运行指定加密规则

    cd /opt/home/test/
    nohup java -Xms512m -Xmx512m -jar -Djasypt.encryptor.password=0tjtdBL6Lwk73GCLVnD2gc1rDbfgCX test-base.jar --spring.profiles.active=dev > test-base.out 2>&1 &
    echo start test-base		
    
  4. 部署到tomcat

    export JAVA_OPTS="-Djasypt.encryptor.password=0tjtdBL6Lwk73GCLVnD2gc1rDbfgCX"
    

http://www.kler.cn/a/441576.html

相关文章:

  • Node.js——express中间件(全局中间件、路由中间件、静态资源中间件)
  • 数据结构——算法基础
  • Effective C++ 规则41:了解隐式接口和编译期多态
  • 【mptcp】ubuntu18.04和MT7981搭建mptcp测试环境操作说明
  • 梯度提升决策树树(GBDT)公式推导
  • 第3天:阿里巴巴微服务解决方案概览
  • 阶段性demo 键盘信息过滤
  • 天猫魔盒M17/M17S_超级UI 线刷固件包-可救砖(刷机取消双勾)
  • 【HF设计模式】03-装饰者模式
  • Transformer 中 Self-Attention 的二次方复杂度(Quadratic Complexity )问题及改进方法:中英双语
  • 【Flink-scala】DataStream编程模型总结
  • 2025山东科技大学考研专业课复习资料一览
  • Java设计模式实战:策略模式、工厂模式、模板模式组合使用
  • 人工智能浪潮来袭:2024年技术革命与产业变革深度解析@附64页PDF文件下载
  • 基于Android的生活记录app的设计与实现
  • 【教程】让Jupyter支持打开CSV和Excel(xlsx)文件
  • 死信队列概述
  • 【Leetcode】滑动窗口算法-编程苍穹下划破数据暗夜的高效光弧
  • pytest入门九:feature
  • 【Hive 如何进行update更新?】
  • “MODAS: 利用多组学数据关联研究探索玉米种质资源“
  • elasticsearch 版本
  • [机器学习]AdaBoost(数学原理 + 例子解释 + 代码实战)
  • k8s集群安装keepalive+haproxy
  • M4Pro内核MacOS brew安装docker爬坑
  • 给新ubuntu电脑配置远程控制环境和c++版本的opencv环境