我的编程空间,编程开发者的网络收藏夹
学习永远不晚

SpringBoot加密配置文件方法介绍

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

SpringBoot加密配置文件方法介绍

在实践中,项目的某些配置信息是需要进行加密处理的,以减少敏感信息泄露的风险。比如,在使用Druid时,就可以基于它提供的公私钥加密方式对数据库的密码进行加密。

但更多时候,比如Redis密码、MQ密码等敏感信息,也需要进行加密,此时就没那么方便了。本篇文章给大家介绍一款Java类库Jasypt,同时基于Spring Boot项目来演示一下如何对配置文件信息进行加密。

一个简单的SpringBoot项目

我们先来创建一个简单的Spring Boot项目,构建一个加密数据运用的场景。

无论通过Idea或官网等方式,先创建一个Spring Boot项目,核心依赖为:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--  为了方便,通常会引入Lombok依赖  -->
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId>
</dependency> 

创建一个配置文件类ConfigProperties:

@Data
@Component
public class ConfigProperties {
​@Value("${conf.url}")private String url;
​@Value("${conf.password}")private String password;
} 

配置文件中的配置属性注入到该类,以供后续使用。

创建一个Controller类,用来测试验证,是否能够正常运行:

@RestController
@RequestMapping("/")
public class ConfigController {
​@Resourceprivate ConfigProperties configProperties;
​@RequestMappingpublic void print(){System.out.println(configProperties.getUrl());System.out.println(configProperties.getPassword());}
} 

对应ConfigProperties类,application.properties中配置如下:

conf.url=127.0.0.1
conf.password=admin123 

此时,启动项目,访问Controller,能够正常打印出配置信息,说明程序可以正常运行。

但配置文件中直接明文展示了password项,如果别人看到该配置文件,就可能导致密码的泄露。

基于Jasypt的加密

针对上述情况,通常,我们会对敏感信息进行加密,避免明文密码信息暴露,提升安全等级。

加密的基本思路是:配置文件中存储加密内容,在解析配置文件注入时进行解密。

但如果拿到项目源码,知道加密算法和秘钥,肯定是可以解密的。这里的加密,只是多一层安全防护,但并不是万能的。

下面看看如何基于Jasypt来进行加密处理。

集成步骤

下面基于上述Spring Boot项目进行改造升级。

环境准备

不同版本的Jasypt使用方法有所不同,这里基于3.0.4版本、JDK8、Spring Boot 2.5.5来进行演示。

在使用之前,首先检查一下JDK8的JRE中是否安装了不限长度的JCE版本,否则在执行加密操作时会抛出解密失败的异常。

进入$JAVA_HOME/jre/lib/security目录,查看是否包含local_policy.jar和US_export_policy.jar两个jar包。如果不包含,则通过Oracle官网进行下载,下载地址:https://pan.baidu.com/s/1pLUNUBvF6TWudeYcf5BNjA?pwd=qgk9。

下载文件为:jce_policy-8.zip

文件内包含三个文件:

README.txt
local_policy.jar
US_export_policy.jar 

查看$JAVA_HOME/jre/lib/security目录下是否有这两个jar包文件,如果没有则复制进去,如果有可考虑覆盖。

引入依赖

在Spring Boot中集成Jasypt比较简单,直接引入如下依赖即可:

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

此时,Jasypt组件自动配置便已经生效,只需要对需要加密的数据进行处理了。

为了方便对密码进行加密,还可以在pom.xml中的build元素中引入对应的plugin,这个后面会用到:

<plugin><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-maven-plugin</artifactId><version>3.0.4</version>
</plugin> 

至此,所有的准备工作已经完成。

内容加密

内容加密有多种方式,这里挑选两种方式进行介绍。

方式一:单元测试类生成密文;

构建如下单元测试类,使用默认实例化的StringEncryptor对密码进行加密:

@SpringBootTest
class SpringBootJasyptApplicationTests {
​@Autowiredprivate StringEncryptor stringEncryptor;
​@Testvoid contextLoads() {String qwerty1234 = stringEncryptor.encrypt("admin123");System.out.println(qwerty1234);}
} 

其中,”admin123“便是要加密的内容。执行上述程序,便可打印加密后的内容。这种形式加密的内容,全部采用默认值。

方式二:通过Maven插件生成密文

在上面已经引入了Jasypt的Maven插件,可通过对应的命令进行生成密码。

第一步:在配置文件中添加加密的密码:

jasypt.encryptor.password=afx11 

然后对配置文件中需要加密的数据进行改造,在数据前添加”DEC(“,在数据尾部加上")",修改完如下:

conf.password=DEC(admin123) 

这里添加的DEC()是告诉插件,此部分内容需要进行加密处理。注意这里关键字是DEC。

第二步:执行Maven命令,对上述数据进行加密处理

在命令执行以下命令:

mvn jasypt:encrypt -Djasypt.encryptor.password=afx11 

此时再看配置文件中的conf.password数据已经变为:

jasypt.encryptor.password=afx11
conf.url=127.0.0.1
conf.password=ENC(209eBdF3+jsV2f8kDjs4NOCzgBxnVgETlR5q2KfhYo5DW2jqvLknv0TndEkXOXm0) 

注意原来的DEC变成了ENC,原来的明文密码变成了加密的密文。

此时,如果想查看明文,执行以下命令即可:

mvn jasypt:decrypt -Djasypt.encryptor.password=afx11 

该命令不会修改配置文件中的密文为明文,只会在控制台进行明文结果的输出。

jasypt.encryptor.password=afx11
conf.url=127.0.0.1
conf.password=DEC(admin123) 

经过上述操作,所有改造步骤已经完成,只需启动系统进行验证即可。

密码的传递方式

完成上述步骤,直接启动系统,访问对应的请求,会发现已经能够成功打印出密码原文了。

上述实例中我们将加密的密码放在了application.properties文件中,这样并不安全,如果查看代码就知道如何解密了。通常,还可以采用另外一种形式来传递参数:在启动命令中传输密码。

比如:

 java -jar jasypt-spring-boot-demo-0.0.1-SNAPSHOT.jar --jasypt.encryptor.password=password 

这样,密码便不用存储在代码当中了,一定程度上增加了安全性。当然,也可以通过环境变量来进行传递,这样即便开发人员也无法获得生产的密码。

到此这篇关于Spring Boot加密配置文件方法介绍的文章就介绍到这了,更多相关Spring Boot加密配置文件内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

SpringBoot加密配置文件方法介绍

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

SpringBoot加密配置文件方法介绍

这篇文章主要介绍了SpringBoot加密配置文件,近期在对开发框架安全策略方面进行升级优化,提供一些通用场景的解决方案,本文针对配置文件加密进行简单的分享
2023-01-18

Springboot集成Jasypt实现配置文件加密的方法

Jasypt是一个java库,它允许开发员以最少的努力为他/她的项目添加基本的加密功能,并且不需要对加密工作原理有深入的了解,这篇文章主要介绍了Springboot集成Jasypt实现配置文件加密,需要的朋友可以参考下
2023-05-18

C++Cartographer加载配置文件过程介绍

这篇文章主要介绍了Cartographer加载配置文件过程,谷歌优秀的激光SLAM开源框架Cartographer算法简单,但是程序部分太多需要学习的地方了,不论是整体框架的结构,还是数据的使用,都是非常优美的
2023-03-19

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

这篇文章主要介绍了如何给yml配置文件的密码加密(SpringBoot),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2022-11-13

SpringBoot配置文件加载方法详细讲解

springboot默认读取的配置文件名字是:“application.properties”和“application.yml”,默认读取四个位置的文件:根目录下、根目录的config目录下、classpath目录下、classpath目录里的config目录下
2022-11-13

怎么在SpringBoot 配置文件进行加密

本篇文章为大家展示了怎么在SpringBoot 配置文件进行加密,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。首先需要确定一个加密解密方式,本文采用 RSA 进行加密解密,首先编写加密解密的代码,注
2023-06-14

SpringBoot如何加密配置文件的SQL账号密码

这篇文章主要介绍了SpringBoot如何加密配置文件的SQL账号密码的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SpringBoot如何加密配置文件的SQL账号密码文章都会有所收获,下面我们一起来看看吧。1
2023-07-02

webpack配置文件和常用配置项介绍

1、安装webpack 1.全局安装webpack:npm install webpack -g 或者转化了cnpm则将npm改为cnpm进行安装 2.进行初始化建立package.json文件记录插件,命令行:npm init 3.web
2022-06-04

Springboot如何实现对配置文件中的明文密码加密

这篇文章主要介绍了Springboot如何实现对配置文件中的明文密码加密的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Springboot如何实现对配置文件中的明文密码加密文章都会有所收获,下面我们一起来看看吧
2023-07-05

Springboot实现对配置文件中的明文密码加密详解

我们在SpringBoot项目当中,会把数据库的用户名密码等配置直接放在yaml或者properties文件中,这样维护数据库的密码等敏感信息显然是有一定风险的。所以本文为大家整理了对配置文件中的明文密码加密的方法,希望对大家有所帮助
2023-03-10

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录