SpringBoot集成配置文件加解密

前言

在SpringBoot的配置文件中,有些配置是比较敏感的,例如密码等信息,因此,对这些配置文件加密是很有必要的,下面介绍一种配置加解密的集成方式。

详细操作

Jasypt是SpringBoot项目中常用的配置加解密工具,我们引入asypt-spring-boot-starter依赖

yaml 复制代码
<!--配置文件加密值自动解密-->
        <dependency>
            <groupId>com.github.ulisesbocchio</groupId>
            <artifactId>jasypt-spring-boot-starter</artifactId>
            <version>3.0.4</version>
        </dependency>
        <dependency>
            <groupId>org.gm</groupId>
            <artifactId>crypto</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

然后定义一个名为jasyptStringEncryptor的bean即可

yaml 复制代码
package com.example.rocketmq.rocketmq.config;

import com.crypto.sm.SMHelper;
import org.jasypt.encryption.StringEncryptor;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.stereotype.Component;

/**
 * 配置解密
 */
@Component("jasyptStringEncryptor")
@ConditionalOnProperty(prefix = "property.encry.enable",name = "enable",havingValue = "true", matchIfMissing = true)
public class PropertyEncryptor implements StringEncryptor {
    private final String KEY = "xxxxxxxxx";
    @Override
    public String encrypt(String s) {
        if(s != null) {
            return SMHelper.sm4Encrypt(KEY, s);
        }
        return s;
    }

    @Override
    public String decrypt(String s) {
        if(s != null) {
            return SMHelper.sm4Decrypt(KEY, s);
        }
        return s;
    }

    public static void main(String[] args) {
        System.out.println(SMHelper.sm4Encrypt("mHApUC5BL6AEzAr3", "root123"));
    }
}

这样,我们使用sm4加密密钥对配置值加密,得到加密串,在配置文件配置xxx=ENC(加密值)即可

工作原理

在Spring Boot启动时,会加载各种PropertySource(包括application.yml、Nacos配置等)。Jasypt会通过一个Bean后置处理器(BeanFactoryPostProcessor)来拦截PropertySource的加载,并将其包装成可解密的PropertySource。当Spring从Environment中获取属性时,如果遇到以ENC(开头和)结尾的属性值,就会调用配置的StringEncryptor的decrypt方法进行解密

相关推荐
Q渡劫2 分钟前
MinIO 从下载到集成 Spring Boot 完整教程
spring boot·spring·maven
冻感糕人~6 分钟前
大模型学习指南:收藏这份AI Agent四层工程地图(小白程序员必备)
java·大数据·人工智能·学习·大模型·agent·大模型学习
一路向北North44 分钟前
Spring AI(6) :对话机器人-会话历史
java·人工智能·spring
高铭杰1 小时前
万物皆可KV(1)TIDB存储布局分析
java·前端·tidb
Dovis(誓平步青云)1 小时前
《如何在CentOS 7中添加Plex官方软件源:解决文件磁盘难管理难题》
linux·运维·服务器·后端·生成对抗网络·centos
RuoyiOffice1 小时前
超级个体接私活必看:后端+前端+移动端三端一体企业管理系统怎么选(2026)
java·spring boot·vue·uniapp·全栈·企业管理·接私活
IT_陈寒2 小时前
Python的线程池把我CPU跑满了,原来少传了个参数
前端·人工智能·后端
java1234_小锋2 小时前
【免费】基于Spark实时电商用户行为分析与预测(Java版本+可视化大屏+Kafka+SpringBoot+Vue3) 锋哥原创出品,必属精品
java·spark·kafka·实时电商用户行为分析与预测系统
keyipatience2 小时前
日志和线程池
java·开发语言
wuqingshun3141592 小时前
springBoot是如何通过main方法启动web项目的?
前端·spring boot·后端