编码技巧——Springboot工程加密yml配置/Maven引入本地二方包

1. 背景

基于Springboot的工程项目,通常很多信息都是在application.yml中直接明文配置的,比如数据库链接信息,redis链接信息等;

为了安全考虑,公司打算将yml配置文件中的数据库连接信息的账号,密码进行加密!

公司有开发相关的安全规定,要求对源代码工程中所有的敏感信息进行加密,包括代码和配置文件,防止密码泄露;

实际上没太大必要——咋办呢,有专员检查,做还是得做;

2. 方案

初步想了下方案,有2种:

(1)依赖配置中心

一般来说,配置中心实现了业务配置的在线管理,能实时查看修改业务配置,不需要重启项目;

其原理是维护本地和远程配置中心的长连接,本地监听远程配置的变更,刷新本地配置的缓存;

常见的有nacos、apollo之类的;

(2)基于Springboot框架

在spring工程启动时,会读取yml文件中的配置到配置对象中;在这一步,可以切入,引入加解密工具库;

实际上,刚好有这么一个常用的库来解决这个问题——Jasypt这个库为我们解决了这个问题,实现了springboot配置的自定加密加密;

本次由于工程是轻量级,未使用远程配置中心中间件,因此为了快速解决问题,使用轻量级的方案——即引入Jasypt对yml配置加密

3. Maven引入本地二方包

在准备使用Jasypt时,去maven仓库搜索maven坐标,发现公司的仓库并没有引入这个包,需要自己去公网公网下载Jasypt库相关的jar包;

所以先要解决的问题是——如何在maven工程中引入本地二方包?

方案可以参考:

这里简单描述下步骤:

(1)去外网下载jar包,在resource下,新建lib文件夹,复制“xx.jar”;

(2)在pom.xml引入依赖;把地址替换成本地的jar包文件相对地址;

(3)在Maven打包插件处进行配置,允许本地系统的二方包;

		        <configuration><!--允许导入本地二方包--><includeSystemScope>true</includeSystemScope><executable>true</executable></configuration>

成功引入后,编译工程,可以通过maven helper查看到相关依赖已经引入,如下:

注意:网上搜到的引入包仅包含,但是发现其依赖的包仍然不在公司仓库里,所以需要层层把仓库里不存在的包都引入,所以这里引入了3个包,其他的如spring-framework相关的包公司仓库已经有了,所以无需手动引入;

4. Springboot引入Jasypt对yml配置加密

网上搜了很多方法都走不通,所以这里还是完整的记录下步骤,亲测能通:

(1)引入jar包

        <!--本地二方包jasypt--><dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-stater</artifactId><version>2.1.0</version><scope>system</scope><systemPath>${project.basedir}/src/main/resources/lib/jasypt-spring-boot-starter-2.1.0.jar</systemPath></dependency><dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot</artifactId><version>2.1.0</version><scope>system</scope><systemPath>${project.basedir}/src/main/resources/lib/jasypt-spring-boot-2.1.0.jar</systemPath></dependency><dependency><groupId>org.jasypt</groupId><artifactId>jasypt</artifactId><version>1.9.2</version><scope>system</scope><systemPath>${project.basedir}/src/main/resources/lib/jasypt-1.9.2.jar</systemPath></dependency>

(2)写测试类生成数据库密码明文对应的密码

	@Testpublic void testEncrypt() {StandardPBEStringEncryptor standardPBEStringEncryptor = new StandardPBEStringEncryptor();EnvironmentPBEConfig config = new EnvironmentPBEConfig();config.setAlgorithm("PBEWithMD5AndDES");config.setPassword("my-encryptor");standardPBEStringEncryptor.setConfig(config);String plainText = "ab123";String encryptedText = standardPBEStringEncryptor.encrypt(plainText);System.out.println(encryptedText);}

(3)写测试类测下解密

    @Testpublic void testDecrypt() {StandardPBEStringEncryptor standardPBEStringEncryptor = new StandardPBEStringEncryptor();EnvironmentPBEConfig config = new EnvironmentPBEConfig();config.setAlgorithm("PBEWithMD5AndDES");config.setPassword("my-encryptor");standardPBEStringEncryptor.setConfig(config);String encryptedText = "JD1Ez9hxgHXNpIj4+E......";String plainText = standardPBEStringEncryptor.decrypt(encryptedText);System.out.println(plainText);}

(4)yml配置替换成密文,使用ENC(*)包裹

(5)启动服务,测试数据库连接

注意尽量使用2.X低版本的Jasypt依赖,因为博主在使用3.x的版本时启动遇到了各种疑难杂症,所以如果不是有特殊要求,仅仅是解决加密问题,就尽量使用2.X版本;

参考文章:

maven工程引用仓库中没有的包

​​​​​​手动导入Maven库中不存在的jar包并整合打包

对spring boot yml配置文件敏感信息加密处理的两种方式

如何给yml配置文件的密码加密(SpringBoot)

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

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

相关文章

【Django】model模型—模型属性与方法

模型属性 模型当中最重要的属性是 Manager。它是 Django 模型和数据库查询操作之间的接口&#xff0c;并且它被用作从数据库当中 获取实例&#xff0c;如果没有指定自定义的 Manager 默认名称是 objects。Manager 只能通过模型类来访问&#xff0c;不能通过模型实例来访问。 模…

2024-02-25 Unity 编辑器开发之编辑器拓展5 —— Selection

文章目录 1 常用静态成员2 常用静态方法 ​ Selection 主要用来获取当前 Unity 编辑器中选择的对象&#xff0c;只能用于编辑器开发中。 1 常用静态成员 静态成员说明Selection.activeObject获取当前在面板上选择的游戏物体 Object&#xff0c;未选择则返回 Null。选择多个则返…

mini-spring|关于Bean对象作用域以及FactoryBean的实现和使用

需求 FactoryBean 直接配置FactoryBean 获取FactoryBean中的Bean对象 FactoryBean的getObject方法通过反射获取Bean对象 由此省去对实体Dao类的定义 解决方法 对外提供一个可以二次从 FactoryBean 的 getObject 方法中获取对象的功能即可 整体架构 整个的实现过程包括了两部…

Redis持久化的两种方式RDB和AOF详解

小伙伴们好&#xff0c;欢迎关注&#xff0c;一起学习&#xff0c;无限进步 以下内容为学习 Redis 过程中的笔记 文章目录 Redis持久化RDB&#xff08; Redis DataBase &#xff09;触发机制&#xff1a;如何恢复rbd文件&#xff1a;优点&#xff1a;缺点&#xff1a; AOF &…

图形管道(pipeline)

9.3 图形管道 9.3.1 pipeline ​ 图形管道是将 3D 坐标转换为 2D 像素&#xff0c;图形管道可以分为两大部分&#xff1a;第一部分将 3D 坐标转换为 2D 坐标&#xff0c;第二部分将 2D 坐标转换为实际的彩色像素。 Vertex Data -----> Vertex SHADER -------->GEOMETR…

【文献管理】zotero插件4——获取知网pdf、中文文献识别与目录生成

文章目录 zotero获取知网PDFzotero——中文文献识别&#xff08;茉莉花插件&#xff09;学位论文目录生成 zotero获取知网PDF zotero——中文文献识别&#xff08;茉莉花插件&#xff09; 为下载的学位论文添加目录中文文献识别&#xff1a;jasminum 下载pdflabs下载茉莉花插…

C++——类的6个默认成员函数

目录 类中的6个默认成员函数 构造函数 构造函数的特点 初始化列表 隐式类型转换 析构函数 拷贝构造函数 赋值重载 运算符重载 赋值重载 取地址重载 类中的6个默认成员函数 类中的6个默认成员函数根据不同的作用可以分为&#xff1a; 初始化和使用后清理&#xff1a;…

YOLOv8改进,添加GSConv+Slim Neck,有效提升目标检测效果,代码改进(超详细)

目录 摘要 主要想法 GSConv GSConv代码实现 slim-neck slim-neck代码实现 yaml文件 完整代码分享 总结 摘要 目标检测是计算机视觉中重要的下游任务。对于车载边缘计算平台来说&#xff0c;巨大的模型很难达到实时检测的要求。而且&#xff0c;由大量深度可分离卷积层构…

Java Web(十一)--JSON Ajax

JSON JSon在线文档&#xff1a; JSON 简介 JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。轻量级指的是跟xml做比较。数据交换指的是客户端和服务器之间业务数据的传递格式。 它基于 ECMAScript (W3C制定的JS规范)的一个子集&#xff0c;采…

Stable Cascade发布:比SDXL更快、更强的图像生成模型

前言 StabilityAI在春节期间发布了新的一代文生图模型Stable Cascade&#xff0c;Stable Cascade是基于Wuerstchen架构包含三阶段的文生图扩散模型&#xff0c;为质量、灵活性、微调和效率设定了新的标准&#xff0c;着重于进一步消除硬件障碍。相比Stable Diffusion XL&#…

《Decoupling Representation and Classifier for Long-Tailed Recognition》阅读笔记

论文标题 《Decoupling Representation and Classifier for Long-Tailed Recognition》 用于长尾识别的解耦表示和分类器 作者 Bingyi Kang、Saining Xie、Marcus Rohrbach、Zhicheng Yan、 Albert Gordo、Jiashi Feng 和 Yannis Kalantidis 来自 Facebook AI 和 新加坡国…

Linux笔记--文件权限

一、相关概念 Linux最优秀的地方之一就在于多人多任务环境。为了让各个使用者有较为保密的文件数据&#xff0c;文件的权限管理尤为重要。 ●文件的可存取身份: owner:文件拥有者 group:文件所属用户组 others:其他人 ●文件权限: r: read&#xff0c;读 文件:是否能查看文件内…

如何创建自己的Spring Boot Starter并为其编写单元测试

当我们想要封装一些自定义功能给别人使用的时候&#xff0c;创建Spring Boot Starter的形式是最好的实现方式。如果您还不会构建自己的Spring Boot Starter的话&#xff0c;本文将带你一起创建一个自己的Spring Boot Starter。 快速入门 创建一个新的 Maven 项目。第三方封装的…

Carla自动驾驶仿真八:两种查找CARLA地图坐标点的方法

文章目录 前言一、通过Spectator获取坐标二、通过道路ID获取坐标总结 前言 CARLA没有直接的方法给使用者查找地图坐标点来生成车辆&#xff0c;这里推荐两种实用的方法在特定的地方生成车辆。 一、通过Spectator获取坐标 1、Spectator&#xff08;观察者&#xff09;&#xf…

2W字-35页PDF谈谈自己对QT某些知识点的理解

2W字-35页PDF谈谈自己对QT某些知识点的理解 前言与总结总体知识点的概况一些笔记的概况笔记阅读清单 前言与总结 最近&#xff0c;也在对自己以前做的项目做一个知识点的梳理&#xff0c;发现可能自己以前更多的是用某个控件&#xff0c;以及看官方手册&#xff0c;但是没有更…

springboot + shiro + jwt权限验证

JWT &#xff08;Json Web Token&#xff09;是一种开放标准&#xff08;RFC 7519&#xff09;&#xff0c;用于在不同系统之间传递安全声明&#xff08;例如身份验证信息&#xff09;的一种紧凑且自包含的方式。是轻量级的、跨平台的、自包含的&#xff08;含有足够的信息&…

深入探究【观察者模式】:简单音乐会售票系统案例分析

文章目录 1.观察者模式概述基本概念&#xff1a;工作原理&#xff1a; 2.案例-音乐会抢票2.1.具体实现2.1.1.被观察者接口2.1.2.被观察者实现类2.1.3.定义观察者接口2.1.3.定义观察者实现类2.1.4.测试观察者 3.总结3.1.优点和局限性3.2.思考 1.观察者模式概述 观察者模式是一种…

如何远程访问内网数据库?

远程访问内网数据库是在安全可靠的前提下&#xff0c;能够实现从外部网络访问内网数据库的一种技术。在现代信息化的背景下&#xff0c;随着企业发展和分布式办公的普及&#xff0c;远程访问内网数据库成为了一项必需的技术。通过远程访问内网数据库&#xff0c;企业可以在不同…

2.3~2.7碎片

P是位置&#xff0c;v是速度

弹窗内容由后端返回,如何让点击按钮的事件交由前端控制?

一、场景 背景&#xff1a;因为系统里经常有新活动或者公告需要通知所有用户&#xff0c;希望前端维护的这个弹窗里的内容可以由后端接口返回。这样就不需要每次上新活动的时候&#xff0c;前端项目都发版了。因此&#xff0c;前端维护了这个弹窗和它的关闭事件&#xff0c;至…