spring boot项目敏感配置信息如何加密?

news2024/9/23 5:24:31

一般情况下,spring boot项目为了能够实时刷新配置信息,都会把配置文件放在nacos之类的配置中心上。但是这样就会存在一个问题,一些比较敏感的配置信息,比如数据库密码,一旦被泄露,就会有严重的数据安全问题。因此,我们可以通过对敏感信息进行加密处理,然后在项目中再自动解密,就可以解决此类问题。

首先,引入ulisesbocchio包,这个包就实现了我们需要的这个功能。配置信息如下:

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

然后呢,我们需要写一个类,来实现ulisesbocchio包的EncryptablePropertyResolver接口。这个接口就一个方法,就是如何解密。在这里,我们是用SM4对称加密算法来做的。SM4算法相关的实现可参考这篇文章:

【Java加解密系列】- SM4加解密

代码如下,实现逻辑是判断配置项是否是以(testcipher)为前缀的,符合这个条件的会用SM4算法进行解密,就得到配置信息的明文啦。

public class TestEncryptablePropertyResolver implements EncryptablePropertyResolver {

    public static final String ENCODED_PASSWORD_PREFIX = "(testcipher)";

    public static final String SM4_KEY = "pn94j31omdjtxfp4";

    private static final Logger LOGGER = LoggerFactory.getLogger(TestEncryptablePropertyResolver.class);

    public TestEncryptablePropertyResolver() {
        super();
    }

    @Override
    public String resolvePropertyValue(String s) {
        if (null != s && s.startsWith(ENCODED_PASSWORD_PREFIX)) {
            try {
                byte[] data = Base64.decodeBase64(s.substring(ENCODED_PASSWORD_PREFIX.length()));
                byte[] decryptedBytes = Sm4Utils.decrypt(data, SM4_KEY.getBytes("UTF-8"));
                return new String(decryptedBytes).trim();
            } catch (Exception e) {
                LOGGER.error("resolve property failed:{}", e.getMessage(), e);
                return s;
            }
        }
        return s;
    }
}

然后还需要有一个配置类,注入我们上面的TestEncryptablePropertyResolver类。

@Configuration
public class EncryptablePropertyResolverConfig {

    @Bean(name = "encryptablePropertyResolver")
    public EncryptablePropertyResolver encryptablePropertyResolver() {
        return new TestEncryptablePropertyResolver();
    }
}

就是这么简单,就实现了配置信息加密。下面,我们来测试一下,写个测试类,启动的时候会直接把配置信息打出来:

@Component
public class TestValue {

    private static final Logger LOGGER = LoggerFactory.getLogger(TestValue.class);

    @Value("${project.test.password}")
    private String password;

    @PostConstruct
    public void init() {
        LOGGER.info("password value:{}", password);
    }
}

我们在配置文件中的配置是加密之后的信息:

project:
  test:
    password: (testcipher)7Hw/0HxUMdDAikdLb2GrBA==

启动时,打印日志如下:

可以看到,项目启动的时候,直接把配置信息明文打出来了,实现了解密后的配置信息自动解密。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/697308.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

剩余电流式电气火灾监控系统在火力发电厂的应用

张心志 安科瑞电气股份有限公司 上海嘉定 201801 摘要&#xff1a;本文首先指出了在火力发电厂中应用电气火灾监控系统的重要性&#xff0c;接着研究分析了电气火灾监控系统的应用情况&#xff0c;主要从 系统简介、电气火灾原因等方面进行了分析。*后从配电箱、火灾监控设备…

如何画时序图

10年产品经理教你3步画好UML时序图&#xff0c;轻松掌握流程分析利器【建议收藏】 - 知乎 转自知乎 上次介绍了活动图&#xff0c;这次分享 UML 中&#xff0c;另一种流程分析利器——时序图。 以前每次要分析流程&#xff0c;我都会用活动图。直到有一次&#xff0c;我面对…

ChatGPT伪原创:智能AI助手助力文章创作

智能AI助手助力文章创作 随着人工智能技术的不断发展&#xff0c;智能AI助手正逐渐成为文章创作的得力工具。无论是在写作过程中提供灵感和创意&#xff0c;还是在文章编辑和校对中提供帮助&#xff0c;智能AI助手都能为作者节省时间和精力&#xff0c;提高文章质量。本文将从…

剑指 Offer 55 - I. 二叉树的深度 / LeetCode 104. 二叉树的最大深度(二叉树后序遍历,回溯传递值)

题目&#xff1a; 链接&#xff1a;剑指 Offer 55 - I. 二叉树的深度&#xff1b;LeetCode 104. 二叉树的最大深度 难度&#xff1a;简单 输入一棵二叉树的根节点&#xff0c;求该树的深度。从根节点到叶节点依次经过的节点&#xff08;含根、叶节点&#xff09;形成树的一条…

Java 针对Word模板内容替换输出

对应依赖 <repositories><!-- 使用 Free Spire.Doc for Java 的jar包实现替换word中的内容--><repository><id>com.e-iceblue</id><name>e-iceblue</name><url>https://repo.e-iceblue.cn/repository/maven-public/</url&…

高校社团管理系统

目录 一、前言 二、运行截图 &#xff08;一&#xff09;登录注册界面 &#xff08;二&#xff09;资讯管理 &#xff08;三&#xff09;用户管理 &#xff08;四&#xff09;账户管理 &#xff08;三&#xff09;关于获取 一、前言 这是一个高校社团管理系统。编程语言…

汇总一些高考填报志愿相关的资源,希望对大家有帮助

一、夸克高考 夸克有AI志愿填报专题&#xff0c;首页就能看到。 输入信息会展示可报考学校专业信息&#xff0c;比较直观。 相比各种分析&#xff0c;更能定位自己想要报考的学校&#xff01; 二、张雪峰志愿填报资源 三、框框大学 网站里的建议涵盖了中学选科/高考志愿/大…

抖音seo矩阵系统源代码分享

一、视频批量生成&#xff0c;文字转语音部分 $breadcrumbs [[title > AI视频创意, link > #],[title > 开始创作, link > ], ]; $this->buildBreadcrumbs($breadcrumbs); //搜索专用 $keyword_type $this->request->getStrParam(keyword_type); $keywo…

spring mvc架构模式概述

三层架构: pojo&#xff0c;bean&#xff0c;domain是一个意思&#xff0c;表示实体类 dao表示操作数据库的那个类&#xff0c;一般是一张表一个

【C++】十分钟掌握多态(1)

目录 前言1. 多态的概念2. 多态的定义及实现2.1多态的继承条件2.2虚函数#2.3虚函数的重写2.4虚函数重写的两个例外2.5 C11 override 和 final2.6 重载、覆盖(重写)、隐藏(重定义)的对比 3. 抽象类3.1概念3.2接口继承和实现继承 4. 多态的原理4.1虚函数表 前言 这篇文章的代码及…

这3个网站能够让你白嫖GPT4

1、perplexity&#xff08;https://www.perplexity.ai/&#xff09; 特点&#xff1a; 1&#xff09;保存试用上限5次GPT4&#xff0c;每4小时恢复1次 2&#xff09;试用需连接外网谷歌账号 3&#xff09;可以查看其他用户的提出的热门问题 4&#xff09;可以开启对话线程。在…

安装驱动的时候传递参数 导出符号表

安装驱动的时候传递参数 导出符号表 安装驱动传递参数 #include <linux/module.h> #include <linux/init.h>/* module_param(name, type, perm) 功能&#xff1a;接收安装驱动的时候传递的参数 参数name:变量名type:变量的类型/ * Standard types are:* byte, h…

水题杂谈222222

Trie字符串统计 思路&#xff1a; Trie字符串就是把字符串像树一样存储下来 例子&#xff1a; 将如下字符串用trie存储 然后在查找字符串的时候就顺着树查找&#xff0c;但是要在每个字符串的结尾位置打上标记 #include<iostream> #include<cmath> #include<…

23款奔驰S450 4MATIC更换原厂流星雨智能数字大灯,让智能照亮您前行的路

凭借智能数字大灯 (DIGITAL LIGHT)&#xff0c;您可体验根据其他道路使用者和周围环境进行优化调节的理想照明条件。这款包含130万像素模块大灯&#xff0c;进一步扩展了几何多光束 LED 大灯的功能。其高分辨率的照明可有针对性地点亮各个区域。解锁车辆时&#xff0c;大灯将通…

小驰私房菜_16_高通设备开机模式

[Android基础] [qcom开机模式] 用的比较多的可能是 adb reboot bootloader 和 adb reboot edl。 这2个命令都是刷机的时候会用到。 adb reboot bootloader 是进入bootloader模式&#xff0c;通过fastboot 命令来刷img文件。 adb reboot edl 是进入紧急下载模式&#xff0c;进而…

Java POI (3)—— Excel单元格复制过程中公式不生效的问题

一、出现问题的原因 在实现Excel中单元格的复制功能实现上&#xff0c;之前的代码是这样写的 /*** copyCellValue() 方法用于将源单元格的值复制到目标单元格中。* param sourceCell 是源单元格对象* param destCell 是目标单元格对象*/public static void copyCellValue(Cel…

JVM堆参数调优

1、java7 2、java8之后jvm变化 3、默认内存大小 public static void main(String[] args){ long maxMemory Runtime.getRuntime().maxMemory() ;//返回 Java 虚拟机试图使用的最大内存量。 long totalMemory Runtime.getRuntime().totalMemory() ;//返回 Java 虚拟机中的内存…

docker Alpine镜像介绍(基础镜像)

文章目录 Alpine镜像特点开发/维护者使用案例dockerfile 使用方法 https://hub.docker.com/_/alpine https://github.com/alpinejs/alpine Alpine镜像 Alpine镜像是一个基于Alpine Linux发行版构建的Docker镜像。Alpine Linux是一个轻量级的Linux发行版&#xff0c;它的目标…

H3C交换机在地址池下如何进行IP和MAC地址绑定

环境&#xff1a; H3C S6520-26Q-SI version 7.1.070, Release 6326 问题描述&#xff1a; H3C交换机在地址池下如何进行IP和MAC地址绑定 将MAC地址为0000-e03f-0305的PC机与IP地址10.1.1.1绑定&#xff0c;掩码为255.255.255.0 解决方案&#xff1a; 1.进入地址池视图 …

【Java可执行命令】(一)编译工具javac:从源代码到字节码,深入解析Java编译工具 javac ~

Java可执行命令详解之javac 1️⃣ 概念2️⃣ 优势和缺点3️⃣ 使用3.1 语法格式3.1.1 可选参数&#xff1a;-d3.1.2 可选参数&#xff1a;-classpath3.1.3 可选参数&#xff1a;-sourcepath3.1.4 可选参数&#xff1a;-target3.1.5 可选参数&#xff1a;-g 4️⃣ 应用场景5️⃣…