SpringBoot整合jasypt加密配置文件敏感信息

news/2024/9/20 1:31:57/ 标签: spring boot, 后端, java

SpringBoot整合jasypt加密配置文件敏感信息

在项目中我们需要对配置文件的一些敏感信息进行加密处理,比如数据库账户密码,避免直接暴露出来,这种场景常常用于生产环境,我们不想让开发人员知道生产库的密码,有运维人员统一管理。

  1. 引入依赖
<dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifactId><version>3.0.4</version></dependency>
  1. 加密工具类
java">public class JasyptUtils {public static void main(String[] args) {//这里假设我们的数据库密码是rootString info = encrypt("root");//加密 TCFVL/wsN9AxelTDQyP/3g==System.out.println(info);//解密 rootSystem.out.println(decrypt(info));}/*** 加密** @param plaintext 明文* @return*/public static String encrypt(String plaintext) {StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();EnvironmentStringPBEConfig config = new EnvironmentStringPBEConfig();// 指定算法config.setAlgorithm("PBEWithMD5AndDES");// 指定秘钥,和yml配置文件中保持一致config.setPassword("llp");encryptor.setConfig(config);// 生成加密数据return encryptor.encrypt(plaintext);}/*** 解密** @param data 加密后数据* @return*/public static String decrypt(String data) {StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();EnvironmentStringPBEConfig config = new EnvironmentStringPBEConfig();config.setAlgorithm("PBEWithMD5AndDES");config.setPassword("llp");encryptor.setConfig(config);// 解密数据return encryptor.decrypt(data);}
}
  1. 启动类
java">@SpringBootApplication
@MapperScan(basePackages = "com.llp.jasypt.mapper")
public class JasyptApplication {public static void main(String[] args) {SpringApplication.run(JasyptApplication.class, args);}
}
  1. application.yml配置文件

这里我们可以对需要加密的字段进行加密处理,比如url、username、password 或者说redis的一些账户信息等等。

jasypt:encryptor:# 加密的秘钥
#    password: llp# 加密算法algorithm: PBEWithMD5AndDESiv-generator-classname: org.jasypt.iv.NoIvGeneratorproperty:# 算法识别的前后缀,默认ENC(),数据库密文示例:password: "ENC(DzANBAhBWXxZqAOsagIBCoaw8FV4gYRbid7G70UEM24=)"prefix: Enc(suffix: )spring:datasource:driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/llp?autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=GMT%2B8&allowMultiQueries=trueusername: Enc(TCFVL/wsN9AxelTDQyP/3g==)password: Enc(TCFVL/wsN9AxelTDQyP/3g==)#mybatis配置
mybatis:#指定要扫描的mapper.xml位置; classpath:mapper/*.xml 扫描在类路径下的mapper目录下的。xml文件mapper-locations: classpath:mapper/*.xml#配置类型别名,通常指定实体类所在包,这样我们在xml中resultType="com.llp.springboot.mybatis.bean.Monster"就可以简写成Monstertype-aliases-package: com.llp.springboot.jasypt.entity#配置mybatis sql打印日志configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl#启用自动驼峰配置map-underscore-to-camel-case: true#通过config-location可以指定mybatis-config.xml,这样就可以用传统的方式来配置mybatis#config-location: classpath:mybatis-config.xml
  1. 启动配置

通常我们不会将password写在配置文件中,而是由运维人员进行统一管理,这样开发人员只能看到密文而不知道解密的秘钥

jasypt:encryptor:# 加密的秘钥
#    password: llp# 加密算法algorithm: PBEWithMD5AndDESiv-generator-classname: org.jasypt.iv.NoIvGeneratorproperty:# 算法识别的前后缀,默认ENC(),数据库密文示例:password: "ENC(DzANBAhBWXxZqAOsagIBCoaw8FV4gYRbid7G70UEM24=)"prefix: Enc(suffix: )

如果打包后部署项目,可以使用如下命令在启动项目时指定秘钥:

#方式1:
java -jar xxx.jar -Djasypt.encryptor.password=加密数据的秘钥#方式2:
java -jar xxx.jar --jasypt.encryptor.password=加密数据的秘钥

idea中如何配置启动参数

-Djasypt.encryptor.password=llp

image-20240530085947766


http://www.ppmy.cn/news/1467506.html

相关文章

ArangoDB 学习笔记

新工作需要用到 arangodb&#xff0c;由于之前没有接触过&#xff0c;所以从头开始学&#xff0c;记录一下学习过程中的重点。 一. ArangoDB 安装 1. 下载地址 官网地址&#xff1a;https://www.arangodb.com/download/ 2. 部署步骤 下载 rpm 安装包并安装 rpm -ivh arang…

浅谈Qt:跨平台开发的现在与未来

在软件开发领域&#xff0c;跨平台框架一直是热门话题。Qt作为一个成熟且功能丰富的跨平台C开发库&#xff0c;自从1991年由挪威Trolltech公司开发以来&#xff0c;已经走过了30多年的历程。Qt主要用于开发图形用户界面&#xff08;GUI&#xff09;程序&#xff0c;同时也支持开…

学习笔记——IP地址网络协议——网络掩码(Netmask)

三、网络掩码(Netmask) 1、网络掩码概述 网络掩码(Netmask)又称子网掩码(Subnet Mask)网络掩码为32 bit&#xff0c;与IP地址的位数一样&#xff0c;通常也以点分十进制数来表示。 子网掩码不能单独存在&#xff0c;它必须结合IP地址一起使用。子网掩码只有一个作用&#xf…

【C语言】文件操作(终卷)

前言 我们在上一卷中了解了顺序读写的函数&#xff0c;现在就让我们从随机读写的函数开始吧。 什么是随机读写&#xff1f; 就是想在哪个位置读或写都行&#xff0c;比较自由。文件打开时光标默认在起始位置。想从后面的某个部分读或写&#xff0c;就得让文件指针来到那个位…

定制高温隧道炉,如何判断质量好坏

在现代工业生产中&#xff0c;高温隧道炉扮演着不可或缺的角色。对于特定工艺要求&#xff0c;如陶瓷烧制、金属热处理等&#xff0c;定制化的高温隧道炉更是不可或缺。然而&#xff0c;面对市场上琳琅满目的产品&#xff0c;如何判断高温隧道炉的质量好坏成为了企业决策者面临…

leetcode 575.分糖果

思路&#xff1a;开两个数组&#xff0c;一个用来存储非负数的糖果个数&#xff0c;一个用来存储负数的糖果个数&#xff0c;这两个数组都是状态数组&#xff0c;而不是计数数组 如果当前能够吃的种类大于现有的种类&#xff0c;现有的种类个数就是答案&#xff1b; 如果当前…

微信小程序-案例:本地生活-首页(不使用网络数据请求)

一、 1.页面效果&#xff1a; 二、 1.新建项目并添加页面 在app.json文件中&#xff1a; "pages": ["pages/home/home","pages/message/message","pages/contact/contact"] 2.配置导航栏效果 在app.json文件中&#xff1a; &quo…

IO流-----各种流(对象流,内存流,打印流,随机访问流)

各种流 各种流&#xff1a;对象流&#xff1a;操作&#xff1a;对象输入输出流&#xff1a;写入数据&#xff1a;读取数据&#xff1a; 内存流&#xff1a;内存输出流&#xff1a;内存输入流&#xff1a; 打印流&#xff1a;字节打印流&#xff1a;字符打印流&#xff1a; 随机…

5.27机器人基础-机械臂逆解

前面简单讲了机械臂的正解问题&#xff0c;即通过原位姿和控制各关节的角度得到终点位姿。而在实际应用的时候&#xff0c;我们通常都是知道起始点和末端终点的位姿&#xff0c;需要考虑如何达到&#xff0c;即运动学机械臂的运动学逆解问题。 求解操作臂运动学方程是一个非线…

LLaSM:Large language and speech model

1.Introduction 级联方法使用ASR将语音输入转化为文本输入,语音到文本会导致信息损失,本文提出LLaSM,一个具有跨模态对话能力的大型语音与语言模型,能够理解和遵循语音与语言指令,借鉴LLaVA,利用预训练的语音模态编码器和大语言模型,使用Whisper作为语音编码器,将语音…

DP动态规划(上)

文章目录 动态规划基本概念斐波那契数列问题C 实现Python 实现Java 实现 迷你结C、Python和Java在实现动态规划时有哪些性能差异&#xff1f;迷你结哪种语言在动态规划中更适合大规模数据处理?迷你结C有哪些知名的库适用于动态规划和大数据处理?动态规划辅助库大数据处理库 迷…

NLP(21)--任务型对话机器人

前言 仅记录学习过程&#xff0c;有问题欢迎讨论 问答系统 闲聊、任务型&#xff08;帮我设闹钟&#xff09;、回答型&#xff08;Q&A&#xff09; 任务型对话机器人&#xff1a;&#xff08;帮我定火车票/多轮次&#xff09; 领域识别&#xff08;分类、匹配&#xff…

【Python字符串攻略】:玩转文字,编织程序的叙事艺术

文章目录 &#x1f680;一.字符串基础&#x1f308;二.查看数据类型⭐三.转化❤️四.字符串索引&#x1f6b2;五.字符串切片&#x1f3ac;六.字符串切片-步长☔七.反向切片注意事项&#x1f6b2;八.字符串&#x1f4a5;查&#x1f4a5;改&#x1f4a5;删 ❤️九.字符串拼接&…

DS:数与二叉树的相关概念

欢迎来到Harper.Lee的学习世界&#xff01;博主主页传送门&#xff1a;Harper.Lee的博客主页想要一起进步的uu可以来后台找我哦&#xff01; 一、树的概念及其结构 1.1 树的概念亲缘关系 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限节点…

idea 常用插件推荐

文章目录 1、Lombok2、Convert YAML and Properties File3、Grep Console4、MyBatisX5、Free MyBatis Tool6、MyBatis Log EasyPlus &#xff08;SQL拼接&#xff09;7、MyBatisPlus8、Eclipse theme9、Eclipse Plus Theme10、Rainbow Brackets Lite - Free and OpenSource&…

Windows API 开发桌面应用程序,在窗口按下鼠标左键不放可以拖图,并且拖图期间鼠标图标变成手掌

在Windows API中&#xff0c;要实现鼠标左键按下并拖动以移动窗口中的某个图形&#xff0c;并且同时改变鼠标图标为“手掌”形状&#xff08;这通常指的是“拖动”或“移动”的图标&#xff09;&#xff0c;你需要执行几个步骤。 以下是一个基本的步骤指南&#xff0c;用于在W…

多扇区轮询存储提高FLASH使用寿命

/********************************************************************************* brief flash 多扇区轮询存储(用于提高flash使用寿命)******************************************************************************1.数组首位UserData[第一位] 和 UserData[最后一…

常用maven - jar 下载与 安装

1. guava 如果你想直接将 JAR 文件安装到本地 Maven 仓库&#xff0c;而不使用 POM 文件&#xff0c;可以使用 mvn install:install-file 命令并手动提供必要的元数据。以下是步骤&#xff1a; 下载 Guava JAR 文件&#xff1a; 从 Maven Central 仓库下载 Guava JAR 文件&am…

Django 默认 CSRF 保护机制

Django 的默认 CSRF 保护机制旨在防止跨站请求伪造攻击(CSRF)。CSRF 攻击是一种恶意攻击,其中攻击者通过伪造用户的请求来执行未授权的操作。Django 通过以下方式实现 CSRF 保护: 1. CSRF 中间件 Django 包含一个 CSRF 中间件 (CsrfViewMiddleware),它会自动添加到项目的…

U9C的数据查询视图Sql

U9C的数据查询视图Sql if object_id(TEMPDB..#priceTable) is not null begin drop table #priceTable endcreate table #priceTable (polineCreatedOn date,price varchar(max),itemid varchar(max),purchaseOrderdocno varchar(max),)insert into #priceTable select max(…