使用jasypt对Spring Boot配置文件中的配置项加密

在Spring Boot中,有很多口令需要加密,如数据库连接密码、访问第三方接口的Token等。常见的方法就是用jasypt对口令进行加密。

实际上,jasypt可以对配置文件中任意配置项的值进行加密,不局限于对密码的加密。


1.在pom.xml中添加jasypt相关依赖

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

2.对需要加密的字符串进行加密,获取密文

网上有很多文章告诉你通过命令行,直接指定加密算法、加密实现类等参数,调用jasypt-x.x.x.jar对字符串进行加密。由于不同版本jasypt的默认加密算法和其它默认配置有差异,而且要想知道pom.xml中依赖的jasypt-spring-boot-starter依赖的jasypt-x.x.x.jar具体是哪个版本,还得查看jasypt-spring-boot-starterpom.xml文件,再查看其parent的pom.xml文件,找到jasypt.version的值,才能知道jasypt-x.x.x.jar的具体版本。

所以,直接在Spring Boot中注入用于字符串加密的Bean,然后调用加密方法对字符串加密。加密完成后,加密的代码就不再需要了(后续如果还有加密需求,重新用下面代码加密一遍即可)。

加密代码:

package com.example.study;import org.jasypt.encryption.StringEncryptor;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;import java.util.ArrayList;
import java.util.List;@SpringBootTest
public class MyPropertiesTest {/*** 用于加密字符串的接口,默认实现类是DefaultLazyEncryptor*/@Autowiredprivate StringEncryptor encryptor;@Testpublic void encryptProperties() {// 需要加密的字符串List<String> properties = new ArrayList<>();properties.add("firstValue");properties.add("secondValue");for (String property : properties) {System.out.println(property + ":" + encryptor.encrypt(property));}}
}

3.得到步骤2完成加密后的密文,将密文用ENC()包裹起来(形如ENC(密文)),替换配置文件中的明文字符串

说明:

  • ENC()分别是jasypt默认的密文前缀和后缀,分别可以通过jasypt.encryptor.property.prefixjasypt.encryptor.property.suffix修改默认的密文前缀、后缀;

  • 只有jasypt.encryptor.password=MyEncryptPassword一个配置是必须的,且实际运用中一般通过环境变量或项目参数注入,不写在配置文件中。

# jasypt配置
# 用户指定的加密口令,必填。实际运用中一般通过环境变量或项目参数注入
# jasypt.encryptor.password=MyEncryptPassword
# 修改密文前缀,非必须
# jasypt.encryptor.property.prefix=ENC(
# 修改密文后缀,非必须
# jasypt.encryptor.property.suffix=)# 用密文替换明文字符串
my.test.key.first=ENC(riVj8PtdhOcX6sd8Peie2zzunc93u+bPOKc2Nrw8wr6DOHEj2hhHyculwLH6PoXc)
my.test.key.second=ENC(mdChittS38s+ehLRgM+KCw5Bze9LbdxVvddEGzwLYZ3bRjWC+0t5+prIt5GK6yyl)

4.使用

直接跟以前一样用@Value获取配置就行,无需做其它特殊配置。

以下是一个获取配置的示例:

package com.example.study.config;import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;import javax.annotation.PostConstruct;@Configuration
public class MyPropertiesConfig {@Value("${my.test.key.first}")private String first;@Value("${my.test.key.second}")private String second;@PostConstructpublic void printProperties() {System.out.println("first:" + first);System.out.println("second:" + second);}
}

启动后,相关输出如下:

first:firstValue
second:secondValue

问题:

1.步骤2中对字符串加密时出现以下报错:

org.jasypt.exceptions.EncryptionOperationNotPossibleException: Encryption raised an exception. A possible cause is you are using strong encryption algorithms and you have not installed the Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files in this Java Virtual Machine

原因:

加密强度受限。我使用的是java 1.8.0_101,可以通过在Oracle官网下载JCE,用来替换原本的jar包即可。

解决方法:

1.从Oracle下载JCE包(需要登陆):https://www.oracle.com/java/technologies/javase-jce8-downloads.html;
2.将下载的zip包解压,在里面能找到三个文件local_policy.jarUS_export_policy.jarREADME.txt
3.用local_policy.jarUS_export_policy.jar替换掉%JAVA_HOME%\jre\lib\security\中的local_policy.jarUS_export_policy.jar

2.IDEA中如何注入jasypt配置?

1.打开IDEA右上角Edit Run/Debug configurations
2.在左侧选中需要设置的应用后,在Program arguments添加配置。如:----jasypt.encryptor.password=MyEncryptPassword

如图:
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

服务器怎么关闭防火墙

服务器关闭防火墙的方法&#xff1a;1、windows Server 2008服务器中&#xff0c;在命令行提示符下使用netsh firewall set opmode disable命令关闭防火墙&#xff1b;2、windows Server 2003服务器中&#xff0c;打开本地连接属性对话框&#xff0c;单击高级选项卡进行设置关闭…

Ubuntu+nginx+ftmp+obs搭建直播流服务器学习

第一步安装依赖 安装gcc g的依赖库 sudo apt-get install build-essential sudo apt-get install libtool 安装pcre依赖库 sudo apt-get update sudo apt-get install libpcre3 libpcre3-dev 安装zlib依赖库 sudo apt-get install zlib1g-dev 安装SSL依赖库 1、wget https://…

LiveGBS流媒体平台GB/T28181常见问题-海康大华宇视监控设备安防摄像头等设备注册不上来如何检查问题?

LiveGBS中海康大华宇视监控设备安防摄像头等设备注册不上来如何检查问题 1、网页打开后, 看不到设备注册上来2、检查方式2.1、检查设备注册信息2.2、检查服务器防火墙 3、搭建GB28181视频直播平台 1、网页打开后, 看不到设备注册上来 设备已经配置注册了&#xff0c;但是 国标…

王者荣耀是用什么代码变成MOBA游戏的,该怎么学?有前途吗?

王者荣耀用什么开发的 &#xff1f; 手机上的的APP是用的Unity3D游戏引擎。具体的开发语言以C#为主。 下载王者荣耀App安装包并解压&#xff0c;从解压文件中组成的Dll就可发现&#xff0c;王者荣耀客户端使用的是Unity3D技术栈。 因此并不是提到IOS和Android&#xff0c;就一…

王者荣耀「挑战者杯」——千亿规模产业背后的网络架构是怎样的?

2021年王者荣耀挑战者杯总决赛于1月15日落下帷幕&#xff0c;最终武汉eStarPro战队以4&#xff1a;1的比分再次击败广州TTG获得胜利&#xff0c;捧起象征冠军的冰凤凰杯。「挑战者杯」是王者荣耀旗下的六大顶级电竞赛事之一&#xff0c;也是电竞圈新兴起来的热门赛事。 作为拥有…

《王者荣耀》是如何将心理学研究应用到极致的?

本文来自知乎网友神作关于知乎话题“在游戏设计者眼中&#xff0c;哪款游戏将心理学研究应用到了极致&#xff1f;”的回答&#xff0c;游资网授权发布。 开篇语&#xff1a;感谢木棉959圆桌派邀约。哪款游戏将心理学研究应用到了极致&#xff1f;我的答案是&#xff1a;继承…

当代网瘾少年分析,以“2020年,我打了多少局王者荣耀”为例

2020年年初&#xff0c;为了控制自己打游戏&#xff0c;做了一个表&#xff0c;记录打了多少局王者荣耀。 2021年来了&#xff0c;再看这个记录表和当初的flag&#xff0c;仿佛一个大型打脸现场。 打一年王者 写了2.5篇硕士论文&#xff1f; 导入数据后&#xff0c;经过简单计…

实战四十四:基于王者荣耀英雄数据的英雄出场概率、胜率预测分析

首先看一下数据: 结果分析: 完整代码: 所有的数据+代码 首先看一下数据:

【雕爷学编程】Arduino动手做(13)---TTP223B电容式触摸模块之通过串口监视器检测电容触摸键的状态与控制继电器

37款传感器与模块的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&#x…

【雕爷学编程】Arduino动手做(12)---霍尔磁场传感器模块5

37款传感器与模块的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&#x…

企业中商业智能BI,常见的工具和技术

商业智能&#xff08;Business Intelligence&#xff0c;简称BI&#xff09;数据可视化是通过使用图表、图形和其他可视化工具来呈现和解释商业数据的过程。它旨在帮助组织更好地理解和分析他们的数据&#xff0c;从而做出更明智的商业决策。 常见的商业智能数据可视化工具和技…

Zip压缩包有密码,如何删除?

Zip压缩包设置设置了密码&#xff0c;想要删除密码&#xff0c;除了将压缩包解压出来之后再将文件压缩为不带密码的压缩文件以外&#xff0c;还有一种删除密码的方法。设置方法如下&#xff1a; 右键点击zip文件&#xff0c;找到打开方式&#xff0c;以Windows资源管理器方式打…

Django笔记之数据库函数之日期函数

日期函数主要介绍两个大类&#xff0c;Extract() 和 Trunc() Extract() 函数作用是提取日期&#xff0c;比如我们可以提取一个日期字段的年份&#xff0c;月份&#xff0c;日等数据 Trunc() 的作用则是截取&#xff0c;比如 2022-06-18 12:12:12&#xff0c;我们可以根据需求…

SCAU操作系统知识点之(八)虚拟内存

1、虚拟地址概念&#xff0c;实地址概念 实存储器&#xff08;实存&#xff09;&#xff1a;内存 虚存储器&#xff08;虚存&#xff09;&#xff1a;磁盘 虚拟地址&#xff1a;在虚拟内存中分配给某一位置的地址&#xff0c;它使得该位置可被访问&#xff0c;就好像是主内的一…

【JavaWeb】使用聚合数据短信API发送短信

一、准备工作 聚合数据 首先在聚合数据官网中进行注册 然后申请短信API服务&#xff0c;初次使用赠送5次 申请成功之后&#xff0c;AppKey特别重要&#xff0c;不要让别人知道&#xff0c;然后再点击模板 点击模板&#xff0c;填写模板内容&#xff0c;要申请通过&#xff0c…

收藏!2023国内外高质量短信平台一览

众所周知&#xff0c; 短信群发是一种快速、高效、低成本的营销手段&#xff0c;包括但不限于以下作用&#xff1a; 1、传递重要信息&#xff1a;短信群发可以快速传递企业、品牌、产品的信息&#xff0c;通过短信内容向潜在客户、用户、合作伙伴等发送最新的产品信息、活动信…

【新晋开源项目】聚合短信工具 Sms-Aggregation 加入 Dromara 开源社区

原创 wind dromara开源组织 2023-04-10 08:38 发表于四川 sms-aggregation 聚合短信发送工具 作者介绍 名称&#xff1a;wind dromara 开源组织成员&#xff0c;dromara/sms_aggregation 作者 java高级开发工程师&#xff0c;拥有丰富实战经验 个人空间&#xff1a;https:…

聚合短信API,手机验证登录

今天在项目中遇到了一个需要手机验证登录的需求&#xff0c;在这里简单的记录一下。聚合短信API&#xff0c;手机验证登录 首先需要在聚合平台里面进行公司资质认真 飞机票&#xff1a;https://www.juhe.cn/docs/api/id/54 认证成功后 点击我的接口 继续 进行短信模板审核 通…

用ChatGPT和六顶帽思考法帮助自己更好地决策和解决问题

当我们在解决复杂问题时&#xff0c;我们常常陷入单一视角的状态。创造性思维领域的先驱爱德华德博诺&#xff0c;提出了六顶帽思考法[1]&#xff0c;这意味着我们可以从六个不同的视角来思考一个问题&#xff0c;以实现高水平决策和解决问题。 每一顶“帽子”代表不同的视角。…

发现一个相当好的食物热量计算器!

厄&#xff0c;这两天没怎么吃东西&#xff0c;感觉瘦了些。特意去网上找了一个食物热量计算器&#xff0c;把自己吃的那点儿放进去算了一下&#xff0c;哇&#xff0c;远远低于每天实际消耗的热量&#xff01; 我琢磨着&#xff0c;怎么把这东西给下载下来用呢&#xff1f;