Springboot 配置文件中用户名密码加密

2023-10-27

原配置文件内容

在这里插入图片描述

详细操作步骤

1、在pom.xml文件中加依赖

<!--明文加密-->
	<dependency>
		<groupId>com.github.ulisesbocchio</groupId>
		<artifactId>jasypt-spring-boot</artifactId>
		<version>2.0.0</version>
	</dependency>

2、重新加载pom文件(因为可能会出现新加的依赖maven不生效)

3、找到maven仓库中的上面的依赖的位置

eg:我的位置是这里,请注意自己的位置(肯定是在org路径下)在这里插入图片描述

4、打开PowerShell窗口(在jar包目录中按住shift+鼠标右键)

在这里插入图片描述

5、输入命令,执行jar包加密

java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input=“Zhiradar@135” password=Zhiradar@135 algorithm=PBEWithMD5AndDES
注:input=" ",分号中的内容为原配置文件中的需要加密的数据,该数据必须在双引号内
eg: input=“Zhiradar@135”
password= ,没有引号,并且=号后面的值是你自己起的,叫啥都行(尽量复杂一点,都是为了安全性)
eg1: password=sdkjfhkhs
eg2: password=woshinibaba@163
图示:
在这里插入图片描述
绿色框里的为原配置文件用户名和密码
蓝色框里的为盐值(盐值就是你自己起的那个加密数据)
黄色框里的是执行上述命令后生成的新配置文件中的用户名和密码

新配置文件内容

在这里插入图片描述
jasypt.encryptor.password=${JASYPT_ENCRYPTOR_PASSWORD}
这个是服务启动时候需要给配置文件增加的环境变量参数(就是上面自己起的)
JASYPT_ENCRYPTOR_PASSWORD也是自己起的名字
要对应启动jar包或者启动项目是配置的环境变量用的

jasypt.encryptor.algorithm=PBEWithMD5AndDES
这个是加密方式,其实默认的就是这种

6、在启动类上面加上注解

在这里插入图片描述
@EnableEncryptableProperties
表示启动项目就开启加密配置

6、启动项目验证配置正确不正确

1)打成jar包

执行jar包形式
java -DJASYPT_ENCRYPTOR_PASSWORD=Zhiradar@135 -jar .\xxl-job-admin-2.0.2-SNAPSHOT.jar

JASYPT_ENCRYPTOR_PASSWORD=Zhiradar@135
JASYPT_ENCRYPTOR_PASSWORD自己在配置文件中配置的
Zhiradar@135 盐值也是自己起的

2) 在IDEA中启动

run–>Edit Configuarations
在这里插入图片描述

以上为xxl-job框架中的admin模块用户名和密码加密(涉及到启动项目后会在可视化平台输入用户名和密码)

在这里插入图片描述

新发现更简单的方法:

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

加这个依赖后按照上面的步骤去加密
yml中:
password: ENC(fzKbYZhG61e1y4V8goBXuyWFojum+RYQ6lBh5SL9=)
以下的是配置
jasypt:
encryptor:
password: gsqty #加密的密钥(盐),自定义即可
algorithm: PBEWithMD5AndDES #指定解密算法
这是直接把加密的密匙写在配置文件中,直接启动项目(不需要配置环境变量,不需要在启动类加注解)即可

工具类生成加密数据,启动项目在控制台看

package com.gw.scm.provider.quality.commons.utils;

import org.jasypt.encryption.StringEncryptor;
import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.PBEConfig;
import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig;
public class JasyptUtils {
    /**
     * {@link StringEncryptor} 加解密。
     * 同一个密钥(secretKey)对同一个内容执行加密,生成的密文都是不一样的,但是根据根据这些密文解密成明文都是可以.
     * 1、Jasypt 默认使用 {@link StringEncryptor} 来解密全局配置文件中的属性,所以提供密文时,也需要提供 {@linkStringEncryptor} 加密的密文
     * 2、{@link StringEncryptor} 接口有很多的实现类,比如常用的 {@link PooledPBEStringEncryptor}
     * 3、setConfig(final PBEConfig config):为对象设置 {@link PBEConfig} 配置对象
     * 4、encrypt(final String message):加密内容
     * 5、decrypt(final String encryptedMessage):解密内容
     * @param secretKey :密钥。加/解密必须使用同一个密钥
     * @param message   :加/解密的内容
     * @param isEncrypt :true 表示加密、false 表示解密
     * @return
     */
       public static String stringEncryptor(String secretKey, String message, boolean isEncrypt) {
        PooledPBEStringEncryptor pooledPBEStringEncryptor = new PooledPBEStringEncryptor();
        pooledPBEStringEncryptor.setConfig(getSimpleStringPBEConfig(secretKey));
         String result = isEncrypt ? pooledPBEStringEncryptor.encrypt(message) : pooledPBEStringEncryptor.decrypt(message);
        return result;
    }
     /**
     * 设置 {@link PBEConfig} 配置对象,SimpleStringPBEConfig 是它的实现类
     * 1、所有的配置项建议与全局配置文件中的配置项保持一致,特别是 password、algorithm 等等选项,如果不一致,则应用启动时解密失败而报错.
     * 2、setPassword(final String password):设置加密密钥,必须与全局配置文件中配置的保存一致,否则应用启动时会解密失败而报错.
     * 3、setPoolSize(final String poolSize):设置要创建的加密程序池的大小.
     * 4、setAlgorithm(final String algorithm): 设置加密算法的值, 此算法必须由 JCE 提供程序支持
     * 5、setKeyObtentionIterations: 设置应用于获取加密密钥的哈希迭代次数。
     * 6、setProviderName(final String providerName):设置要请求加密算法的安全提供程序的名称
     * 7、setSaltGeneratorClassName:设置 Sal 发生器
     * 8、setIvGeneratorClassName:设置 IV 发生器
     * 9、setStringOutputType:设置字符串输出的编码形式。可用的编码类型有 base64、hexadecimal
     * @param secretKey
     * @return
     */
      private static SimpleStringPBEConfig getSimpleStringPBEConfig(String secretKey) {
        SimpleStringPBEConfig config = new SimpleStringPBEConfig();
        config.setPassword(secretKey);
        config.setPoolSize("1");
        config.setAlgorithm("PBEWithMD5AndDES");
        config.setKeyObtentionIterations("1000");
        config.setProviderName("SunJCE");
        config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
         config.setIvGeneratorClassName("org.jasypt.iv.RandomIvGenerator");
        config.setStringOutputType("base64");
        return config;
    }

 public static void main(String[] args) throws Exception {
        String message = "quality123";
        String password = "gsqty";
         //一个同样的密码和秘钥,每次执行加密,密文都是不一样的。但是解密是没问题的。
        String jasyptEncrypt = stringEncryptor(password, message, true);
        System.out.println(jasyptEncrypt);
        String jasyptEncrypt1 = stringEncryptor(password, jasyptEncrypt, false);
        System.out.println(jasyptEncrypt1);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Springboot 配置文件中用户名密码加密 的相关文章

  • 如何在 Openfire 中使用 smack

    你好 我计划开发一个可以连接到 gtalk facebook 等的聊天客户端 我决定将 smack API 与 openfire 一起使用 但我需要很少的指导来了解如何将它与 openfire 服务器一起使用 openfire 是否提供了基
  • HAProxy SSL终止+客户端证书验证+curl/java客户端

    我希望使用我自己的自签名证书在 HAProxy 上进行 SSL 终止 并使用我创建的客户端证书验证客户端访问 我通过以下方式创建服务器 也是 CA 证书 openssl genrsa out ca key 1024 openssl req
  • Reactive Spring 不支持 HttpServletRequest 作为 REST 端点中的参数?

    我创建了一个 RestController 如下所示 RestController public class GreetingController RequestMapping value greetings method RequestM
  • 文本在指定长度后分割,但不要使用 grails 打断单词

    我有一个长字符串 需要将其解析为长度不超过 50 个字符的字符串数组 对我来说 棘手的部分是确保正则表达式找到 50 个字符之前的最后一个空格 以便在字符串之间进行彻底的分隔 因为我不希望单词被切断 public List
  • 在 Struts 2 中传递 URL 参数而不使用查询字符串

    我想使用类似的 URL host ActionName 123 abc 而不是像这样传递查询字符串 host ActionName parm1 123 parm2 abc 我怎样才能在 Struts 2 中做到这一点 我按照下面的方法做了
  • Android 中 localTime 和 localDate 的替代类有哪些? [复制]

    这个问题在这里已经有答案了 我想使用从 android API 获得的长值 该值将日期返回为长值 表示为自纪元以来的毫秒数 我需要使用像 isBefore plusDays isAfter 这样的方法 Cursor managedCurso
  • FileNotFoundException - Struts2 文件上传

    Strange FileNotFoundException使用Struts2上传文件时 这是 JSP 的一部分
  • Java中的断点和逐步调试?

    抱歉我的问题名称很奇怪 我不知道如何寻找这个 因为我不知道这些东西是如何称呼的 Visual Studio 中至少有一个功能 您可以单击代码左侧并设置一个大红点的起点 然后运行程序 您可以通过按 f8 或 f5 实际上是不同的 f 来跟踪步
  • 从直方图计算平均值和百分位数?

    我编写了一个计时器 可以测量任何多线程应用程序中特定代码的性能 在下面的计时器中 它还会在地图中填充花费了 x 毫秒的调用次数 我将使用这张图作为我的直方图的一部分来进行进一步的分析 例如调用花费了这么多毫秒的百分比等等 public st
  • Eclipse - 安装新的 JRE (Java SE 8 1.8.0)

    我正在尝试安装 Java 8 到目前为止我所做的 安装最新版本的 Eclipse 下载并安装 Java SE 运行时环境 8http www oracle com technetwork java javase downloads jre8
  • Spring Data JPA:查询如何返回非实体对象或对象列表?

    我在我的项目中使用 Spring Data JPA 我正在演奏数百万张唱片 我有一个要求 我必须获取各种表的数据并构建一个对象 然后将其绘制在 UI 上 现在如何实现我的 Spring 数据存储库 我读到它可以通过命名本机查询来实现 如果指
  • JAVA中遍历JSON数据

    我是 JSON 新手 我使用 HTTPUrlConnections 并在 JAVA 程序中获得一些响应 响应数据将类似于 data id 1 userId 1 name ABC modified 2014 12 04 created 201
  • 我可以限制分布式应用程序发出的请求吗?

    我的应用程序发出 Web 服务请求 提供商处理的请求有最大速率 因此我需要限制它们 当应用程序在单个服务器上运行时 我曾经在应用程序级别执行此操作 一个对象跟踪到目前为止已发出的请求数量 并在当前请求超出允许的最大负载时等待 现在 我们正在
  • 如何让 Emma 或 Cobertura 与 Maven 一起报告其他模块中源代码的覆盖率?

    我有一个带有 Java 代码的多模块 Maven 设置 我的单元测试在其中一个模块中测试多个模块中的代码 当然 这些模块具有相互依赖性 并且在测试执行之前根据需要编译所有相关模块中的代码 那么 如何获得整个代码库覆盖率的报告 注意 我不是问
  • 如何从 Spring Boot 中排除依赖项

    我正在使用 Spring Boot 以下是我的 gradle 文件 buildscript ext springBootVersion 2 0 0 BUILD SNAPSHOT repositories mavenCentral maven
  • 何时在 hibernate 中使用 DiscriminatorValue 注解

    在 hibernate 中使用 DiscriminatorValue 注释的最佳场景是什么以及何时 这两个链接最能帮助我理解继承概念 http docs oracle com javaee 6 tutorial doc bnbqn html
  • 记录类名、方法名和行号的性能影响

    我正在我的 java 应用程序中实现日志记录 以便我可以调试应用程序投入生产后可能出现的潜在问题 考虑到在这种情况下 人们不会奢侈地使用 IDE 开发工具 以调试模式运行事物或单步执行完整代码 因此在每条消息中记录类名 方法名和行号将非常有
  • 使用 JFreeChart 为两个系列设置不同的 y 轴

    我正在使用 JFreeChart 使用折线图绘制两个数据系列 XYSeries 复杂的因素是 其中一个数据系列的 y 值通常远高于第二个数据系列的 y 值 假设第一个系列的 y 值约为数百万数量级 而第二个数据系列的 y 值约为数百万数量级
  • ArrayList.clear() 和 ArrayList.removeAll() 有什么区别?

    假如说arraylist定义为ArrayList
  • 即使调整大小,如何获得屏幕的精确中间位置

    好的 这个问题有两部分 当我做一个JFrame 并在其上画一些东西 即使我将宽度设置为 400 并使其在一个项目击中它时 当然 允许项目宽度 它会反弹回来 但由于某种原因 它总是偏离屏幕约 10 个像素 有没有办法解决这个问题 或者我只需要

随机推荐

  • unity 智能巡逻兵

    unity 智能巡逻兵 一 游戏要求 游戏设计要求 创建一个地图和若干巡逻兵 使用动画 每个巡逻兵走一个3 5个边的凸多边型 位置数据是相对地址 即每次确定下一个目标位置 用自己当前位置为原点计算 巡逻兵碰撞到障碍物 则会自动选下一个点为目
  • 关于Spring属性编辑器详解

    最近刚在研究Spring的编辑器 发现很有意思 刚好galaxystar起了一个这样贴 我想对PropertyEditor作一个详细的整理会对大家有益 特定启了这个新帖 所谓的PropertyEditor 顾名思义 就是属性编辑器 由于Be
  • Nginx配置汇总

    一 Nginx概念 Nginx是目前负载均衡技术中的主流方案 几乎绝大部分项目都会使用它 Nginx是一个轻量级的高性能HTTP反向代理服务器 同时它也是一个通用类型的代理服务器 支持绝大部分协议 如TCP UDP SMTP HTTPS等
  • hadoop.2.6.0安装hive.1.2.2

    文章目录 1 hadoop 2 6 0的安装 2 hive 1 2 2的安装 2 1 前提 2 2 解压 错误1 提示 1 hadoop 2 6 0的安装 参考 https blog csdn net qq 21383435 article
  • 请别再问我Spark的MLlib和ML库的区别

    机器学习库 MLlib 指南 MLlib是Spark的机器学习 ML 库 其目标是使实际的机器学习可扩展和容易 在高层次上 它提供了如下工具 ML算法 通用学习算法 如分类 回归 聚类和协同过滤 特征提取 特征提取 转换 降维和选择 管道
  • sharding-jdbc系列(一):概念

    前话 前段时间公司项目比较忙 天天都忙于码代码 最近好不容易项目上线了 后期就是试运行解决线上问题 要闲一些了 看了下公司以前的一些项目 发现其中居然有用到sharding jdbc 想到以前自己也使用过 但是仅仅是会用过 对一些原理还不了
  • antd pro component - EditableProTable 表单重置

    antd pro component EditableProTable 受控情况之下 改变 dataSource之后 但是表格编辑组件还是记录上次编辑状态记录的数据 没有及时更新 解决办法就是手动更新表单 其实整个表格就是一个form 开始
  • 数据分析36计(24):因果推断结合机器学习估计个体处理效应

    个体异质性为何重要 传统的因果推断分析 主要关注焦点是平均处理效应 Average Treatment Effect 许多科学和工程都会面临这样的挑战 从个性化的医疗救治方案 到定制型的营销建议都需要了解异质性处理效应 即个体层面的因果效应
  • 延时队列的几种实现方式(只有原理,并没有源码)

    延时队列 需求描述 场景一 在淘宝下了订单 过半个小时未支付就取消订单 场景二 还是淘宝 别问 问就是淘宝资深剁手党 发货后超过15天未确认就自动收货 需求分析 本质上都是超过xxx时间 就异步去做一件事 说到异步那基本上就是搞个定时任务去
  • 推荐 4 个本周 火火火火 的开源项目

    本期推荐开源项目目录 1 一个集成了主流 AI 大模型的 APP 2 模拟人类行为的小镇 3 离线 OCR 软件 4 流程图编辑框架 01 一个集成了主流 AI 大模型的 APP 该开源项目集成了主流的大语言模型 绘图模型 基于Flutte
  • 第七站:吃透JavaScript中的函数

    欢迎来到 JavaWeb的奇妙冒险 教学系列 在这里 我们将继续探索Web开发的精彩世界 本站将为你揭开JavaScript中变量的神秘面纱 让我们在学习的过程中既轻松愉快 又能掌握高质量的知识 准备好进入第七站的学习之旅了吗 让我们开始吧
  • 【C++11】右值引用和移动语义 万能引用和完美转发

    文章目录 1 右值引用和移动语义 1 1 左值引用和右值引用 1 2 右值引用的使用场景 1 3 新的类功能 2 万能引用与完美转发 2 1 万能引用的基本介绍和使用 2 2 完美转发 2 3 完美转发的实际应用场景 3 可变参数模板 3
  • C++继承(一)

    目录 继承方式 继承同名成员处理方式 父类与子类中都有相同的成员 继承同名静态成员处理方式 继承中的对象模型 继承中构造和析构函数 菱形继承 多继承语法 在多种接口需要相同输出时 C 的继承相对于传统方式更有利也更方便维护 C 继承语法 c
  • React + css3 实现circle圆环进度条加载

    需求效果图 如上图所示 需求 动态获取不同的分数 圆环展示对应的百分比分数值 正确率 70 以下提示文案 还需要继续加油哦 正确率 70 90 以下提示文案 不错 再加把劲 正确率 90 及以上提示文案 真棒 数据描述 不同的测试分数显示不
  • 如何用Git LFS管理超过50MB的文件

    首先说明 Github对文件上传尺寸有50MB的限制 如果想要上传大于50MB的文件 必须用Git Large File System进行管理 一般情况下 超额的这部分大型文件是各种包啊什么的 比如Unity项目内的一些package 本身
  • Spring IOC的实现机制

    1 什么是Spring IOC Spring IOC Inversion of Control 控制反转 是Spring框架的核心特性之一 它是一种设计模式 通过该模式 对象的创建 依赖注入和生命周期管理等操作由容器负责 而不是由程序员手动
  • Spring-cloud 导致应用收到多次ApplicationPreparedEvent

    最近排查发现DubboComponent被重复注册 怀疑ApplicationPreparedEvent收到了多次 public final class DubboConfigApplicationListener implements A
  • 华为OD机试 -配置文件恢复(C++ & Java & JS & Python)

    描述 有6条配置命令 它们执行的结果分别是 命 令 执 行 reset reset what reset board board fault board add where to add board delete no board at a
  • SPI 及 NOR Flash 介绍

    一 SPI 1 SPI的含义 SPI 串行外设设备接口 Serial Peripheral Interface 是一种高速的 全双工 同步的通信总线 SPI接口主要应用在存储芯片 AD转换器以及LCD中 SPI接口主要应用在存储芯片 AD转
  • Springboot 配置文件中用户名密码加密

    原配置文件内容 详细操作步骤 1 在pom xml文件中加依赖