Spring Boot教程之四十:使用 Jasypt 加密 Spring Boot 项目中的密码

news2025/1/1 21:58:15

如何使用 Jasypt 加密 Spring Boot 项目中的密码

在本文中,我们将学习如何加密 Spring Boot 应用程序配置文件(如 application.properties 或 application.yml)中的数据。在这些文件中,我们可以加密用户名、密码等。

您经常会遇到开发项目,需要连接到 MongoDB等数据库,并将数据库连接的真实密码存储在 Spring Boot 项目的配置文件(application.yml 或 application.properties)中。甚至授权进行其他 API 调用所需的密码或令牌也以相同的方式存储。您实际上可以避免在配置文件中添加实际密码,并使用Java 库jasypt-spring-boot 。

Jasypt 是什么?

Jasypt  (Java 简化加密)为 Spring Boot 应用程序中的属性源提供加密支持。它将帮助您以极少的努力为您的项目添加基本的加密功能,并且无需编写任何代码,只需在您的项目中进行一些添加即可。Springboot 是一个非常强大的框架,它将帮助您添加加密功能而无需实现任何加密方法。Jasypt 具有高度可配置性。

使用 Jasypt 添加加密的步骤

  • 步骤1:添加Jasypt的Maven依赖
  • 第 2 步:在 Spring Boot 应用程序主配置中添加@EnableEncryptableProperties注释
  • 步骤3:选择加密和解密的密钥
  • 步骤 4:生成加密密钥
  • 步骤 5:在配置文件中添加加密密钥
  • 步骤6:运行时需要解密密钥
  • 步骤 7:运行应用程序。

步骤1:添加Jasypt的maven依赖

在 pom.xml 文件中,添加 maven 依赖项,该依赖项可以在 maven 存储库中轻松找到。

您可以使用以下依赖项作为参考:

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

对于 Maven 插件依赖项,您可以使用以下依赖项:

<plugins>
   <plugin>
          <groupId>github.ulisesbocchio</groupId>
          <artifactId>jasypt-maven-plugin</artifactId>
    </plugin>
</plugins>

第 2 步:在 Spring Boot 应用程序主配置类中添加注释

 需要添加@EnableEncryptableProperties注释以使应用程序了解整个Spring环境中的可加密属性。

@EnableEncryptableProperties
public class MyProject{
        //write the code here
}

步骤3:选择加密和解密的密钥

密钥用于加密密码,之后可用于解密加密值以获取实际密码。您可以选择任何值作为密钥。

步骤4:生成加密密钥 

加密密钥可以通过以下两种方法生成:

使用 Jasypt 在线工具:此  link  可用于通过传递所选密钥来生成加密密钥。

您实际上可以使用该工具加密并通过解密来检查加密密钥。

  • 加密密码:abcd1234
  • 选择加密类型: 双向加密(默认使用PBEWithMD5AndDES)
  • 密钥:你好(可以是任意值)
  • 加密字符串:kNuS1WAezYE7cph7zXVTiPSQSdHTx7Kv

使用 jasypt Jar: 从 maven 仓库下载 jasypt jar 文件并通过以下命令运行:

java -cp //jasypt-1.9.3/lib/jasypt-1.9.3.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input=”xyz123″ 
password=secretkey algorithm=PBEWithMD5AndDES

以下是运行jar时传递的命令行参数的意义:

  • 输入:abcd1234(需要加密的实际密码)
  • 密码:hello(您选择的密钥)
  • 算法:PBEWithMD5AndDES(使用默认算法)
  • 输出:scEjemHosjc/hjA8saT7Y6uC65bs0swg(输入的加密值)

注意:虽然 3.1 和 3.2 中的加密值(即加密字符串和输出)不同,但由于密钥相同,因此两种情况下解密都会产生相同的值(abcd1234)。

步骤 5:在配置文件(application.yml 或 application.properties)中添加加密密钥

现在,您无需像上面那样添加实际密码(例如“abcd1234”),而是需要添加通过上述任一方法生成的加密值。但是 jasypt 依赖项如何理解配置文件的特定属性需要解密?因此,为了让 Jasypt 知道您的加密值,它使用了一种约定,您需要按照以下格式添加它:

注: ENC(加密密钥):ENC(scEjemHosjc/hjA8saT7Y6uC65bs0swg)

在上图中,数据库密码的加密已完成。你可以在任何需要隐藏实际密码的场景中使用它。

步骤 6:运行时需要解密密钥

让 Jasypt 知道您用来形成加密值的密钥。因此,以下是传递密钥的不同方法: 

将其作为配置文件中的属性传递。照常运行项目,解密就会发生。

步骤 7:运行应用程序

现在使用以下命令运行该应用程序:

$ mvn-Djasypt.encryptor.password=secretkey spring-boot:run

导出Jasypt加密器密码:

JASYPT_ENCRYPTOR_PASSWORD=hello

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

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

相关文章

Quartz任务调度框架实现任务动态执行

说明&#xff1a;之前使用Quartz&#xff0c;都是写好Job&#xff0c;指定一个时间点&#xff0c;到点执行。最近有个需求&#xff0c;需要根据前端用户设置的时间点去执行&#xff0c;也就是说任务执行的时间点是动态变化的。本文介绍如何用Quartz任务调度框架实现任务动态执行…

Scala_【1】概述

第一章 语言特点环境搭建(Windows)idea编写scalaHelloWorld注意事项 Scala是一门以Java虚拟机&#xff08;JVM&#xff09;为运行环境并将面向对象和函数式编程的最佳特性结合在一起的静态类型编程语言 语言特点 Scala是一门多范式的编程语言&#xff0c;Scala支持面向对象和函…

StableAnimator模型的部署:复旦微软提出可实现高质量和高保真的ID一致性人类视频生成

文章目录 一、项目介绍二、项目部署模型的权重下载提取目标图像的关节点图像&#xff08;这个可以先不看先用官方提供的数据集进行生成&#xff09;提取人脸&#xff08;这个也可以先不看&#xff09;进行图片的生成 三、模型部署报错 一、项目介绍 由复旦、微软、虎牙、CMU的…

最新高性能多目标优化算法:多目标麋鹿优化算法(MOEHO)求解LRMOP1-LRMOP6及工程应用---盘式制动器设计,提供完整MATLAB代码

一、麋鹿优化算法 麋鹿优化算法&#xff08;Elephant Herding Optimization&#xff0c;EHO&#xff09;是2024年提出的一种启发式优化算法&#xff0c;该算法的灵感来源于麋鹿群的繁殖过程&#xff0c;包括发情期和产犊期。在发情期&#xff0c;麋鹿群根据公麋鹿之间的争斗分…

螺杆支撑座在运用中会出现哪些问题?

螺杆支撑座是一种用于支撑滚珠螺杆的零件&#xff0c;通常用于机床、数控机床、自动化生产线等高精度机械设备中。在运用中可能会出现多种问题&#xff0c;这些问题源于多个方面&#xff0c;以下是对可能出现的问题简单了解下&#xff1a; 1、安装不当&#xff1a;安装过程中没…

Unity3d UGUI如何优雅的实现Web框架(Vue/Rect)类似数据绑定功能(含源码)

前言 Unity3d的UGUI系统与Web前端开发中常见的数据绑定和属性绑定机制有所不同。UGUI是一个相对简单和基础的UI系统&#xff0c;并不内置像Web前端&#xff08;例如 Vue.js或React中&#xff09;那样的双向数据绑定或自动更新UI的机制。UGUI是一种比较传统的 UI 系统&#xff…

从0入门自主空中机器人-2-2【无人机硬件选型-PX4篇】

1. 常用资料以及官方网站 无人机飞控PX4用户使用手册&#xff08;无人机基本设置、地面站使用教程、软硬件搭建等&#xff09;&#xff1a;https://docs.px4.io/main/en/ PX4固件开源地址&#xff1a;https://github.com/PX4/PX4-Autopilot 飞控硬件、数传模块、GPS、分电板等…

Windows上缺少xaudio2_9.dll是什么原因?

一、文件丢失问题&#xff1a;Windows上缺少xaudio2_9.dll是什么原因&#xff1f; xaudio2_9.dll是DirectX音频处理库的一个组件&#xff0c;它支持游戏中的音频处理功能。当你在Windows系统上运行某些游戏或音频软件时&#xff0c;如果系统提示缺少xaudio2_9.dll文件&#xf…

冥想的实践

这是我某一天的正念和冥想实践&#xff0c;我对正念练习、冥想练习进行了分别的统计。 正念练习&#xff1a;1分钟**5次 冥想&#xff1a;15分钟10分钟 正念练习&#xff0c;基本在工作休息时间练习。当然&#xff0c;工作过程中&#xff0c;也有一部分时间会有正念的状态&am…

一个简单的机器学习实战例程,使用Scikit-Learn库来完成一个常见的分类任务——**鸢尾花数据集(Iris Dataset)**的分类

机器学习实战通常是将理论与实践结合&#xff0c;通过实际的项目或案例&#xff0c;帮助你理解并应用各种机器学习算法。下面是一个简单的机器学习实战例程&#xff0c;使用Scikit-Learn库来完成一个常见的分类任务——**鸢尾花数据集&#xff08;Iris Dataset&#xff09;**的…

Redis 实战篇 ——《黑马点评》(上)

《引言》 在进行了前面关于 Redis 基础篇及其客户端的学习之后&#xff0c;开始着手进行实战篇的学习。因内容很多&#xff0c;所以将会分为【 上 中 下 】三篇记录学习的内容与在学习的过程中解决问题的方法。Redis 实战篇的内容我写的很详细&#xff0c;为了能写的更好也付出…

Intent--组件通信

组件通信1 获取子活动的返回值 创建Activity时实现自动注册&#xff01;【Activity必须要注册才能使用】 默认 LinearLayout 布局&#xff0c;注意 xml 中约束布局的使用&#xff1b; 若需要更改 线性布局 只需要将标签更改为 LinearLayout 即可&#xff0c;记得 设置线性布局…

word参考文献第二行缩进对齐

刚添加完参考文献的格式是这样&#xff1a; ”段落“—>缩进修改、取消孤行控制 就可以变成

UE(虚幻)学习(一) UE5.3.2和VS2022的安装以及遇到的问题和一些CS8604、CA2017报错问题.

最近工作很多东西是UE搞的&#xff0c;工作安排上也稍微缓口气&#xff0c;来学学UE&#xff0c;因为同事都用的UE5.3&#xff0c;所以就从UE5.3开始吧&#xff0c;之前学习过UE4&#xff0c;放上两年什么都不记得了。还是需要做一些记录。 本来安装不想写什么&#xff0c;谁知…

【YOLOv3】源码(train.py)

概述 主要模块分析 参数解析与初始化 功能&#xff1a;解析命令行参数&#xff0c;设置训练配置项目经理制定详细的施工计划和资源分配日志记录与监控 功能&#xff1a;初始化日志记录器&#xff0c;配置监控系统项目经理使用监控和记录工具&#xff0c;实时跟踪施工进度和质量…

systemverilog语法:assertion summary

topics assertion 介绍 Property在验证中的应用 ended表示sequence执行结束。 property 立即断言不消耗时间&#xff0c;好像if…else…&#xff0c;关键字不含property. 并发断言消耗时间&#xff0c;关键字含property. 立即断言 并发断言

blender中合并的模型,在threejs中显示多个mesh;blender多材质烘培成一个材质

描述&#xff1a;在blender中合并的模型导出为glb&#xff0c;在threejs中导入仍显示多个mesh&#xff0c;并不是统一的整体&#xff0c;导致需要整体高亮或者使用DragControls等不能统一控制。 原因&#xff1a;模型有多个材质&#xff0c;在blender中合并的时候&#xff0c;…

关于最新MySQL9.0.1版本zip自配(通用)版下载、安装、环境配置

一、下载 从MySQL官网进行下载MySQL最新版本&#xff0c;滑到页面最下面点击社区免费版&#xff0c;&#xff08;不是企业版&#xff09; 点击完成后选择自己想要下载的版本&#xff0c;选择下载zip压缩&#xff0c;不用debug和其他的东西。 下载完成后进入解压&#xff0c;注…

4.银河麒麟V10(ARM) 离线安装 MySQL

1. 系统版本 [rootga-sit-cssjgj-db-01u ~]# nkvers ############## Kylin Linux Version ################# Release: Kylin Linux Advanced Server release V10 (Lance)Kernel: 4.19.90-52.39.v2207.ky10.aarch64Build: Kylin Linux Advanced Server release V10 (SP3) /(La…

InfoNCE Loss详解(上)

引言 InfoNCE对比学习损失是学习句嵌入绕不开的知识点&#xff0c;本文就从头开始来探讨一下它是怎么来的。 先验知识 数学期望与大数定律 期望(expectation&#xff0c;expected value&#xff0c;数学期望&#xff0c;mathematical expectation)是随机变量的平均值&#…