Spring Boot项目中通过 Jasypt 对属性文件中的账号密码进行加密

news2024/10/5 23:29:03

下面是在Spring Boot项目中对属性文件中的账号密码进行加密的完整步骤,以MySQL的用户名为root,密码为123321为例:

步骤1:引入Jasypt依赖

在项目的pom.xml文件中,添加Jasypt依赖:

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

步骤2:配置加密密码

src/main/resources/application.ymlapplication.properties中,配置Jasypt的加密密码。将其替换为自己的密匙,例如:

jasypt:
  encryptor:
    password: lfsun666

确保将lfsun666替换为自己的密匙。

步骤3:加密属性值

application.ymlapplication.properties

spring:
  datasource:
    username: root
    password: 123321

步骤4:创建MyJasyptUtil类

创建一个用于加密和解密属性值的实用类,例如MyJasyptUtil。这个类将使用Jasypt的BasicTextEncryptor进行属性的加密和解密。以下是一个示例:

import org.jasypt.encryption.StringEncryptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

/**
 * 用于加密和解密属性值的实用类,这个类将使用Jasypt的BasicTextEncryptor进行属性的加密和解密。
 */
@Component
public class MyJasyptUtil {

    private final StringEncryptor stringEncryptor;

    @Autowired
    public MyJasyptUtil(StringEncryptor stringEncryptor) {
        this.stringEncryptor = stringEncryptor;
    }

    public String encrypt(String input) {
        return stringEncryptor.encrypt(input);
    }

    public String decrypt(String input) {
        return stringEncryptor.decrypt(input);
    }
}

步骤5:在应用中使用MyJasyptUtil

使用MyJasyptUtil类来加密和解密属性值。示例:

import com.lfsun.demolfsunstudyjasypt.util.MyJasyptUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

@Service
public class MyJasyptService {

    @Value("${spring.datasource.username}")
    private String username;

    @Value("${spring.datasource.password}")
    private String password;

    @Autowired
    private MyJasyptUtil myJasyptUtil;


    /**
     * 保存加密后的凭据。
     */
    public void saveCredentials() {
        String encryptedUsername = myJasyptUtil.encrypt(username);
        String encryptedPassword = myJasyptUtil.encrypt(password);

        System.out.println("加密后的用户名和密码: " + encryptedUsername + ":" + encryptedPassword);
    }

    /**
     * 检索解密后的凭据。
     */
    public void retrieveCredentials() {
        String decryptedUsername = myJasyptUtil.decrypt(username);
        String decryptedPassword = myJasyptUtil.decrypt(password);

        System.out.println("解密后的用户名和密码: " + decryptedUsername + ":" + decryptedPassword);
    }
}

步骤6:测试
拿到加密后的用户名和密码然后替换到application.yml:

import com.lfsun.demolfsunstudyjasypt.service.MyJasyptService;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
public class DemoLfsunStudyJasyptApplication {

    public static void main(String[] args) {
       /**
        * 在应用启动后立即创建了一个 MyJasyptService 实例并调用了 saveCredentials 方法。
        * 这并不是正确的方式来获取 Spring 管理的 Bean。
        *
        * Spring Boot 应用的 Bean 生命周期和管理是由 Spring 容器控制的,不应该手动创建 Bean 实例。
        *
        * 应该在 Spring 容器初始化后,使用 Spring 框架来获取 MyJasyptService Bean 并调用相应的方法。
        */
       /*SpringApplication.run(DemoLfsunStudyJasyptApplication.class, args);
       MyJasyptService myJasyptService = new MyJasyptService();
       myJasyptService.saveCredentials();*/

       // 正确的方式
       ConfigurableApplicationContext context = SpringApplication.run(DemoLfsunStudyJasyptApplication.class, args);
       MyJasyptService myJasyptService = context.getBean(MyJasyptService.class);
       // 拿到加密后的用户名和密码
       myJasyptService.saveCredentials();

       // 用加密后的用户名和密码去覆盖真实的密码
       // myJasyptService.retrieveCredentials();
    }

}

取出密码:

        // 拿到加密后的用户名和密码
       // myJasyptService.saveCredentials();

       // 用加密后的用户名和密码去覆盖真实的密码
       myJasyptService.retrieveCredentials();

即可;

在这里插入图片描述

通过这些步骤,可以在Spring Boot项目中对属性文件中的账号密码进行加密,提高安全性。确保保护好加密密码(jasypt.encryptor.password)以防止数据泄漏。

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

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

相关文章

easyConnect虚拟网卡未安装,导致连接失败(虚拟网卡安装失败)

前言 使用easyConnect&#xff0c;但是一直连接失败&#xff0c;看到提示错误 虚拟网卡未安装&#xff0c;请确保虚拟网卡安装成功 我的错误原因是因为我自己装过VM虚拟机&#xff0c;用过虚拟网卡然后产生的虚拟网卡冲突 解决方式 1.打开网络设置2.选择你的网络&#xff08…

chatgpt升级啦,训练数据时间更新到2023年4月,支持tools(升级functionCall),128k上下文

&#xff08;2023年11月7日&#xff09; gpt-4-1106-preview https://platform.openai.com/docs/models/gpt-4-and-gpt-4-turbo 训练数据日期升级到2023年四月 上线文增加到128k 调用一次chatgpt接口&#xff0c;可以得到多次函数调用 import OpenAI from "openai"…

1-前端基本知识-HTML

1-前端基本知识-HTML 文章目录 1-前端基本知识-HTML总体概述什么是HTML&#xff1f;超文本标记语言 HTML基础结构文档声明根标签头部元素主体元素注释 HTML概念词汇&#xff1a;标签、属性、文本、元素HTML基本语法规则HTML常见标签标题标签段落标签换行标签列表标签超链接标签…

华为取消6000万订单影响在扩大,高通嘴硬强调不受影响

高通公布了2023年第三季度的业绩&#xff0c;业绩显示营收下滑24%&#xff0c;净利润下滑36%&#xff0c;不过高通强调预计今年四季度业绩将回升&#xff0c;意思是说华为取消订单带来的影响较小。 一、高通处境不利已延续4年时间 2019年美国对华为采取措施&#xff0c;众多中国…

go程序获取工作目录及可执行程序存放目录的方法-linux

简介 工作目录 通常就是指用户启动应用程序时&#xff0c;用户当时所在的文件夹的绝对路径。 如&#xff1a;root用户登录到linux系统后&#xff0c;一顿cd&#xff08;change directory&#xff09;后, 到了/tmp文件夹下。此时&#xff0c;用户要启动某个应用程序&#xff0…

组成原理备考学习 day1 (第一章)

组成原理备考学习 day1 第一章 系统概述1.1 计算机发展史1.1.1 计算机软硬件的发展计算机硬件的发展计算机软件的发展 1.1.2 计算机的分类和发展方向 1.2 计算机系统层次结构1.2.1 计算机系统的组成1.2.2 CPU及工作过程取数指令 1.2.3 I/O设备1.2.4 软件系统计算机编程语言 1.2…

Android Studio新建项目下载依赖慢,只需一个操作解决

新建的安卓工程&#xff0c;下载依赖贼慢怎么办&#xff1f;水一篇吧。 首先新建工程&#xff0c;建好以后项目就自动开始下载了&#xff0c;底部开始出现进度条&#xff0c;但是进度条一直不怎么动&#xff0c;网速也就十几k&#xff0c;要是等他下载得下一天。 直入主题&…

html+css 通过div模拟出一个表格样式,优化多个边框导致的宽度计算问题

htmlcss 通过div模拟出一个表格样式&#xff0c;优化多个边框导致的宽度计算问题 实现代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, i…

json字符串转为开闭区间

1.需求背景 1.1 前端页面展示 1.2 前后端约定交互json 按照页面每一行的从左到右 * 示例 [{"leftSymbol":">","leftNum":100,"relation":"无","rightSymbol":null,"rightNum":0}, {"left…

【Unity细节】VS不能附加到Unity程序中解决方法大全

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 秩沅 原创 &#x1f636;‍&#x1f32b;️收录于专栏&#xff1a;unity细节和bug &#x1f636;‍&#x1f32b;️优质专栏 ⭐【…

Socks5代理怎么样?安全性高吗?

Socks5代理IP的安全性取决于多个因素&#xff0c;包括代理服务器的信任度、代理提供商的可靠性以及你在使用代理时的需要注意一些动作。 下面分享一些关于Socks5代理IP安全性的重要考虑因素&#xff1a; 1. 代理服务器的信任度&#xff1a;使用代理时&#xff0c;您要确保选择信…

【笔记】原型和原型链(持续完善)

概念 原型&#xff1a;函数都具有 prototype 属性&#xff0c;称之为原型&#xff0c;也称之为原型对象 1.1 原型可以放一些属性和方法&#xff0c;共享给实例对象使用&#xff08;也就是原生方法&#xff09;。 1.2 原型可以做继承原型链&#xff1a;对象都有 __proto__ 属性…

「Verilog学习笔记」多功能数据处理器

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 分析 注意题目要求输入信号为有符号数&#xff0c;另外输出信号可能是输入信号的和&#xff0c;所以需要拓展一位&#xff0c;防止溢出。 timescale 1ns/1ns module data_…

HR人才测评,采用线上测评做春招秋招

从人力资源管理的工作&#xff0c;已经有好些年了&#xff0c;我只想说这不是一个有创意和创造性的工作&#xff0c;因为大部分时间我都在从事数据方面的工作。关于公司内部的文案工作先且不说&#xff0c;这里分享下我做招聘工作的过程。 每年春秋两季的校招&#xff0c;算是…

安防监控EasyCVR视频汇聚平台使用海康SDK播放时,画面播放缓慢该如何解决?

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同&#xff0c;支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。安防视频平台EasyCVR拓展性强&#xff0c;视频能力丰富&#xff0c;具体可实现视频监控直播、视频轮播、视频录像、云存储、…

MySQL数据库调优策略

1. 数据库调优的措施 1.1 调优的目标 尽可能节省系统资源&#xff0c;以便系统可以提供更大负荷的服务。&#xff08;吞吐量更大&#xff09; 合理的结构设计和参数调整&#xff0c;以提高用户操作 响应的速度。&#xff08;响应速度更快&#xff09; 减少系统的瓶颈&#xff0…

抽象工厂模式 rust和java的实现

文章目录 抽象工厂模式介绍抽象工厂模式包含以下几个核心角色&#xff1a;实现架构图java实现rust实现rust代码仓库 抽象工厂模式 抽象工厂模式&#xff08;Abstract Factory Pattern&#xff09;是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。 在抽象工…

快速灵敏的Flink2

flink基础知识 TumblingEventTimeWindows 滚动开窗 package org.apache.flink.streaming.api.windowing.assigners;import org.apache.flink.annotation.PublicEvolving; import org.apache.flink.api.common.ExecutionConfig; import org.apache.flink.api.common.typeutils.…

快速了解什么是跳跃表(skip list)

什么是跳跃表&#xff08;skip list&#xff09; 跳跃表&#xff08;Skip List&#xff09;是一种概率性的数据结构&#xff0c;它通过在多层链表的基础上添加“快速通道”来提高搜索效率。跳跃表的效率可以与平衡树相媲美&#xff0c;即在平均和最坏的情况下&#xff0c;查找…

alibaba店铺所有商品数据接口(alibaba.item_search_shop)

阿里巴巴店铺的所有商品数据接口&#xff08;item_search_shop&#xff09;可以获取到店铺内所有商品的信息&#xff0c;包括产品的ID、SKU信息、价格、库存、图片等。这些数据可以用于构建各种业务场景&#xff0c;例如供应链管理、电商平台的价格比较、竞品分析、实时库存查询…