SpringBoot进阶-SpringBoot如何实现配置文件脱敏

news2024/11/24 1:08:36

目录

  • 参考
  • 一、概述
  • 二、实现
    • 1、引入pom
    • 2、在配置文件中添加密钥
    • 3、生成加密之后的数据
    • 4、将加密之后的数据添加到配置文件中
  • 三、踩坑
    • 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 PolicyF

参考

SpringBoot进阶-SpringBoot如何实现配置文件脱敏?
SpringBoot集成jasypt配置信息加密以及采坑

一、概述

在很多开发场景中我们的SpringBoot应用是被打包成了一个Jar文件来使用的,利用解压缩工具可以将这个Jar包解压出来并且在对应的配置路径下找到数据库的访问地址以及数据库的登录密码等等,这是极不安全的操作。所以接下来我们就来研究一下如何在Spring Boot中对数据库配置文件中的相关敏感数据进行脱敏处理。

二、实现

配置文件的脱敏操作,应该在用户无感知的情况下进行,而不需要用户去做什么特殊的处理。下面我们就来看一下如何在用户无感知的情况下处理数据加密操作。

1、引入pom

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

2、在配置文件中添加密钥

在配置文件中添加一个用于数据加密的秘钥,可以是任意的数据。

jasypt:
  encryptor:
    password: JLKSJLKJLKJLKJLKJLKAFHH

3、生成加密之后的数据

这里我们采用的是接口调用的方式来完成数据的加密操作加密之后的数据通过控制台的方式输出

@RestController
public class TestController {

    @Autowired
    private StringEncryptor encryptor;

    @GetMapping("/test")
    public void test() {

        String url = encryptor.encrypt("jdbc:mysql://localhost:3306/vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8");
        String username = encryptor.encrypt("root");
        String password = encryptor.encrypt("123456");

        System.out.println(url);
        System.out.println(username);
        System.out.println(password);
    }
}

4、将加密之后的数据添加到配置文件中

加密数据的配置通过ENC()前缀的方式进行包裹。

spring:
  datasource:
    url: ENC(8XAS0HeXbRvGhZ6uR3ltF2k2fxD1m1H5euWGqSZmwXWEPyiPvMpv0ON+o8Nn1FeqKxnv4272VFqOzaRPCvtFKc92KgnOhCJNTtT4fFTO9VZ6H24hVO2BJ06zfmuFIR6FuFD/d91uoxt1nhm62DZEfgfTlUaZNCvWMYGTmzwElX1NO2THznjzUloGGMqv2fax6sfW++SDySrQGKZv5M5V5f2Bpa3KH8b0RX6DGumZ7Fc=)
    username: ENC(kUYJ1TaHgCyUwJf18b2RUtat7AEq/a0Ei//eq2+XWsZn6urXmPzOq2hq9wDIruc7)
    password: ENC(uimMBTtIxemXV+klLzrYXY7qwKPLNADAuw4UZkNSr3R3I1mCdRAjKsGnE5aKXRgx)

当然除了采用默认的ENC()方式进行包括以外还可以通过如下的方式进行自定义操作。

jasypt:
  encryptor:
    property:
      prefix: 'MM('
      suffix: ')'

这个时候配置的文件就需要通过MM()包裹才会被解密使用。

三、踩坑

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 PolicyF

这个问题是jdk的无限强度管辖权政策权限不够(JCE),去下载一个JCE替换一下jre下的权限包就好。

jce_policy-8.zip下载

在这里插入图片描述

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

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

相关文章

python系列27:jupyter转web app的工具Mercury

1. 简介 官网&#xff1a;https://runmercury.com/ Mercury可以将 Jupyter Notebook 呈现为 Web 应用程序。类似的package还有streamlit和voila 使用import mercury as mr进行安装。Mercury的页面分为左边的输入部分&#xff0c;和右边的输出部分&#xff0c;下面是极简例子&a…

C++函数重载学习

C 允许多个函数拥有相同的名字&#xff0c;只要它们的参数列表不同就可以&#xff0c;这就是函数的重载&#xff08;Function Overloading&#xff09;。 一个基本的例子&#xff1b; #include<iostream> using namespace std;void print(int i) {cout<<"a …

远程控制之原理和实践

按理来说&#xff0c;本人不该发表此类专业文章&#xff0c;鄙人零星碎片化的开发经历&#xff0c;让本人斗胆向诸位网友&#xff0c;在远控方面做一点演示说明&#xff0c;谈论一点自己的认识。 程序工程代码地址&#xff1a;点击此处下载。 程序分为两个部分&#xff0c;控…

OpenCV 项目开发实战--对图像中的斑点进行检测(Python、C++代码实现)

什么是斑点? Blob 是图像中一组连接的像素,它们共享一些共同的属性(例如,灰度值)。在上图中,暗连接区域是斑点,斑点检测旨在识别和标记这些区域。 文末附相关测试代码的下载链接 SimpleBlobDetector 示例 OpenCV 提供了一种基于不同特征检测和过滤斑点的便捷方法。让…

计算机组成原理笔记(王道考研)(持续更新)

文章目录 前言概论计算机的发展计算机系统计算机硬件组成各个硬件的工作原理计算机系统的层次结构计算机系统结构、组成、实现 计算机性能指标储存器CPU整体指标Amdahl定律与加速比 前言 本文是对王道计算机考研《计算机组成原理》课程的总结&#xff0c;主讲咸鱼学长讲的确实…

那些曾经考过的turtle绘图题(1~5)

【编程实现绘图 -1】 使用使用turtle库的函数,绘制三个彩色的圆,圆的颜色按顺序如图,圆的半径从里至外分别是20,50, 100,效果如图所示 # 样例代码 from turtle import * # 导入turtle库 list_r = [20, 50, 100] # 定义半径列表 list_color = ["red", "…

chatgpt赋能python:在画布中间画图的Python技巧

在画布中间画图的Python技巧 在Python中&#xff0c;绘图是数据可视化和图形表示的一种重要方式。然而&#xff0c;在绘制图表时&#xff0c;我们需要让图表的中心点位于画布的正中心&#xff0c;而不是依靠手动计算像素值来实现。这不仅让图表更易读&#xff0c;还提高了可视…

chatgpt赋能python:Python中如何处理多个输入

Python中如何处理多个输入 在编写Python程序时&#xff0c;我们经常需要从用户那里获取多个输入来执行某些操作。本文将介绍Python中的各种方法来处理多个输入。 从终端获取多个输入 Python中最简单的方式是从终端获取多个输入。下面是一个基本的例子&#xff1a; input_st…

chatgpt赋能python:Python中的函数

Python中的函数 Python是一种高级语言&#xff0c;可用于各种应用程序&#xff0c;从Web开发到科学计算。Python中的函数是重要的编程概念之一&#xff0c;它允许开发人员将一段代码重复使用&#xff0c;并可以按照需要调用它们。 函数是什么&#xff1f; 函数是一种拥有参数…

直动式插装减压阀DPR-100-N-S-24

参数规格 操作压力:流动情况: 内部泄漏: 弹性范围: 工作温度: 推荐过滤等级: 流体介质: 阀腔/阀腔工具:阅体材质: 3000 PSI (207 Bar)见[压降与流量关系图].5英寸/min(82cc/min)在最大压力3000PSI(207Bar)下50PSI至200PSI(3至14 Bar)预设值:150 PSI(10 Bar) 100 PSI 至…

打包jar包或war包

idea下springboot打包成jar包和war包&#xff0c;并且在外部tomcat下运行访问 jar包 这里设置pom.xml文件将工程打成jar包 使用maven的插件打包&#xff0c;打包后的jar包在项目的target目录下 此时打包出来是有默认的名称的jar包。然后在命令行下 运行起这个jar包。当然&…

chatgpt赋能python:Python中如何在输出一排后换行输出

Python中如何在输出一排后换行输出 在Python编程中&#xff0c;经常需要使用print语句输出信息。有时候需要在输出一排信息之后换行输出&#xff0c;比如在输出一个数据表格或者一个列表等等情况下&#xff0c;这就需要用到Python中如何在输出一排后换行输出的方法。 什么是换…

Python基础之类的继承与派生

一、继承 新创建一个类&#xff0c;这个类可以继承一个或多个父类&#xff0c;新创建的类及哦啊做子类或派生类&#xff0c;被继承的类叫做父类或基类。 例&#xff1a; class ParentClass_01: # 定义父类passclass ParentClass_02: # 定义父类passclass SonClass_01(Pa…

RTKLIB学习总结(九)RTK算法详解

文章目录 一、RTK算法数据类型1、rtk_t&#xff1a;rtk控制结构体2、sol_t&#xff1a;结果结构体3、SOLQ_XXX&#xff1a;解的类型状态4、ambc_t&#xff1a;模糊度固定控制结构体5、ssat_t&#xff1a;卫星状态控制结构体6、prcopt_t&#xff1a;算法处理选项结构体7、obs_t&…

【ChatGPT工具篇-1】ChatGPT + MindShow 分分钟搞定PPT制作

AI 能生万物吗&#xff1f; &#xfeff;&#xfeff;&#xfeff; 制作一份“通用性”的PPT需要几步&#xff1f; 三步 借助ChatGPT和MindShow&#xff0c;分分钟完成操作&#xff0c;就能制作出来完胜大部分人的PPT文件&#xff1b; 解锁更多AIGC&#xff08;ChatGPT、AI绘…

C#,码海拾贝(42)——病态线性方程组的“简单迭代解法”之C#源代码

using System; namespace Zhou.CSharp.Algorithm { /// <summary> /// 求解线性方程组的类 LEquations /// 原作 周长发 /// 改编 深度混淆 /// </summary> public static partial class LEquations { /// <summary> /…

chatgpt赋能python:Python如何定义π

Python如何定义π 介绍 Python是一种高级编程语言&#xff0c;它被广泛用于数据分析、机器学习、科学计算和Web开发等领域。在这些领域中&#xff0c;算数计算是非常重要的&#xff0c;而数学领域中重要的一个数字就是π。 π是圆的周长与直径的比例。它是一个无限不循环的小…

springboot+vue房屋租赁租房管理系统94sk3

本租房管理系统有管理员&#xff0c;租客&#xff0c;屋主三个角色。管理员功能有个人中心&#xff0c;租客管理&#xff0c;屋主管理&#xff0c;房源信息管理&#xff0c;订单信息管理&#xff0c;屋主申诉管理&#xff0c;通知公告管理&#xff0c;留言板管理&#xff0c;系…

chatgpt赋能python:Python多行注释

Python 多行注释 在 Python 中&#xff0c;我们经常需要写注释来解释代码或者用于调试。Python 的注释分为单行注释和多行注释&#xff0c;本文主要介绍 Python 中如何多行注释。 单行注释 在 Python 中&#xff0c;单行注释以符号 # 开头&#xff0c;可以写在代码的任何位置…

魔法打败魔法?OpenAI用GPT-4 来解释 GPT-2 的行为

大语言模型&#xff08;LLM&#xff09;像大脑一样&#xff0c;它们是由 “神经元” 组成的&#xff0c;它们观察文本中的一些特定模式&#xff0c;以影响整个模型接下来 “说” 什么。但由于 LLM 中的参数数量多到已经无法由人类解释的程度&#xff0c;因此&#xff0c;LLM 给…