Druid 数据库密码加密-代码详解

news2024/11/15 18:54:13

这次来详细说下 Druid 数据库密码加密-代码详解

第一种方法使用原生加解密

  1. 首先需要使用druid的密码加密功能加密密码 > 找到druid jar文件地址 执行 加密命令

java -cp druid-1.2.10.jar com.alibaba.druid.filter.config.ConfigTools you_password

会得到以下信息

privateKey:MIIBVgIBADANBgkqhkiG9w0BAQEFAASCAUAwggE8AgEAAkEA6+4avFnQKP+O7bu5YnxWoOZjv3no4aFV558HTPDoXs6EGD0HP7RzzhGPOKmpLQ1BbA5viSht+aDdaxXp6SvtMQIDAQABAkAeQt4fBo4SlCTrDUcMANLDtIlax/I87oqsONOg5M2JS0jNSbZuAXDv7/YEGEtMKuIESBZh7pvVG8FV531/fyOZAiEA+POkE+QwVbUfGyeugR6IGvnt4yeOwkC3bUoATScsN98CIQDynBXC8YngDNwZ62QPX+ONpqCel6g8NO9VKC+ETaS87wIhAKRouxZL38PqfqV/WlZ5ZGd0YS9gA360IK8zbOmHEkO/AiEAsES3iuvzQNYXFL3x9Tm2GzT1fkSx9wx+12BbJcVD7AECIQCD3Tv9S+AgRhQoNcuaSDNluVrL/B/wOmJRLqaOVJLQGg==
publicKey:MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAOvuGrxZ0Cj/ju27uWJ8VqDmY7956OGhVeefB0zw6F7OhBg9Bz+0c84RjzipqS0NQWwOb4kobfmg3WsV6ekr7TECAwEAAQ==
password:PNak4Yui0+2Ft6JSoKBsgNPl+A033rdLhFw+L0np1o+HDRrCo9VkCuiiXviEMYwUgpHZUFxb2FpE0YmSguuRww==

在这里插入图片描述
privateKey,不需要管是私钥信息;publicKey,公钥信息解密时会用到;password,加密后的密码,解密时会用到;
2. 项目配置信息 yaml 下配置

datasource:
 type: com.alibaba.druid.pool.DruidDataSource
 url: jdbc:mysql://ip:port/database?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false
 username: root
 password: 加密后的密码
 #数据源连接池配置
 druid:
  filters: config
  connect-properties:
   config.decrypt: true
   config.decrypt.key: 公钥

可以看到多出配置的两个参数 filters,connect-properties
filters这是druid实现的过滤器 定义多个用英文逗号(,)分隔 这次我们只看config 也就是 configFilter
在这里插入图片描述
从源文件来看 该类主要使用来解密时使用的
所以filters: config 配置就尤为重要了
再往下看
在这里插入图片描述
在ConfigFilter#init方法中会获取参数config.decrypt: true判断是否需要解密密码
进入decrypt方法在这里插入图片描述
在ConfigFilter#decrypt方法中会获取参数config.decrypt.key: 公钥,加密后的密码 ,使用ConfigTools#decrypt方法进行解密然后设置解密后的密码到参数中
ConfigTools应该很眼熟 在第一步加密时我们使用的也是 ConfigTools类进行加密的

第二种方法使用实现密码回调类自定义加解密

druid还支持密码加解密的扩展功能 继承DruidPasswordCallback类重写setProperties方法

创建回调类
在这里插入图片描述
继承DruidPasswordCallback类 实现setProperties 获取加密后的密码与公钥 调用ConfigTools#decrypt获取到解密后的密码
然后设置到password中

第一步加密的方法不变修改下配置文件

datasource:
 type: com.alibaba.druid.pool.DruidDataSource
 url: jdbc:mysql://ip:port/database?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false
 username: root
 password: 加密后的密码
 #数据源连接池配置
 druid:
   connect-properties:
   publicKey: 公钥
   password: 加密后的密码
   password-callback-class-name: com.xxx.xxx.DbPasswordCallback

password-callback-class-name 就是你创建回调的类的名称
在这里插入图片描述
在DruidAbstractDataSource#setPasswordCallbackClassName中会将填入的类名进行加载回填到passwordCallback参数中

然后看druid代码 在创建数据库连接时进行相关操作
在这里插入图片描述
在DruidAbstractDataSource#createPhysicalConnection
会检测是否实现了DruidPasswordCallback类 执行setProperties 方法时会执行我们上边实现的方法 然后将解密后的密码赋值

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

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

相关文章

回顾 | Learn From Microsoft Build Ⅱ:Data

点击蓝字 关注我们 编辑:Alan Wang 排版:Rani Sun 微软 Reactor 为帮助广开发者,技术爱好者,更好的学习 .NET Core, C#, Python,数据科学,机器学习,AI,区块链, IoT 等技术&#xff0…

动态隐藏显示底部Tab栏

方式1 路由源信息 方式2 css样式 css功能:让盒子盖住整个页面 给div.city添加.page-cover的类(让div.city盖住页面的tabbar) /* 让盒子盖住整个页面 */ .page-cover {position: relative;z-index: 2;height: 100vh;background-color: #fff;…

计算机组成原理(期末或考研备考)-计算机系统概述重点

1.1计算机发展历程 1946第一台电子数字计算机(ENIAC)第一代计算机(1946-1957)-- 电子管;体积大,容量小,成本高,速度慢。第二代计算机(1958-1964)-- 晶体管;运算速度提升…

java之路—— SpringMVC的基本详解

文章目录 前言一、 核心的组件二、基本实现流程三、MVC的基本配置使用 前言 Spring MVC是一个用于构建Web应用程序的基于MVC(Model-View-Controller)设计模式的框架。 它是Spring Framework的一部分,提供了一种灵活、可扩展且功能强大的方式…

Android APT 系列 (三):APT 技术探究

APT 介绍 什么是 APT ? APT 全称 Annotation Processing Tool,翻译过来即注解处理器。引用官方一段对 APT 的介绍:APT 是一种处理注释的工具, 它对源代码文件进行检测找出其中的注解,并使用注解进行额外的处理。 APT 有什么用?…

基于Java+Swing实现推箱子游戏

基于JavaSwing实现推箱子游戏 一、系统介绍二、功能展示三、其他系统四、获取源码 一、系统介绍 基于JAVA的推箱子游戏系统主要用于实现游戏推箱子功能,提供多种不同难度的关卡。本系统结构如下: (1)初始化模块: 该模块包括屏幕初…

如何用 ChatGPT 和你的卡片笔记对话?开源应用 Quivr 尝试

卡片 我 非常喜欢使用卡片笔记。其优点明显,例如能显著减轻写作压力。在你面对空白屏幕时,写一篇文章的压力可能会很大,而随时三言两语记录卡片笔记则显得更为轻松。由于笔记以卡片形式存在,可以进行大量重组复用,对于…

基于SpringBoot+vue的音乐网站与分享平台设计与实现

博主介绍: 大家好,我是一名在Java圈混迹十余年的程序员,精通Java编程语言,同时也熟练掌握微信小程序、Python和Android等技术,能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

分布式理论和一致性算法详解

1、什么是分布式系统 分布式系统是一个硬件或软件组成分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统 2、分布式系统的特征 分布性 分布式系统的多台计算机都会在空间上随意分布的,同时,机器的分布情况也会随时变动…

【详细分析】thinkphp反序列化漏洞

文章目录 配置xdebug反序列化漏洞利用链详细分析poc1(任意文件删除)测试pocpoc2(任意命令执行)poc3(任意命令执行) 补充代码基础函数trait关键字应用案例优先级多trait 配置xdebug php.ini [Xdebug] zend…

聊聊我在店铺开放域做性能优化的体会

我们新推出大淘宝技术年度特刊《长期主义,往往从一些小事开始——工程师成长总结专题》,专题收录多位工程师真诚的心路历程与经验思考,覆盖终端、服务端、数据算法、技术质量等7大技术领域,欢迎一起沟通交流。 本文为此系列第五篇…

nodejs+mysql+vue+elementUI 实现选择资源管理工具

我们在写后台管理系统时会遇到上传视频、音频等内容。如果上传资源地方多的话,每个地方都要加上传的代码,比较麻烦。而且遇到有些图片是已经上传过的,下次遇到了又要重复上传,浪费服务器或cos资源。 这时候可以实现一个资源管理工具,上传图片到资源管理工具里,然后再去选…

35年前,金山WPS上的当终于找补回来,没想到,钉钉也深度参与

我们当年上了微软的当! 近日,雷军在武汉科技大学毕业典礼致辞,登上了热搜。 关于“小米汽车”的话题再次被推上了舆论的风口。这是54岁雷军的最后一搏,距离2024年量产,时间也所剩不多了。 从软件到电商,到…

Flutter控件封装之视频进度条

视频控制器,三方所提供的样式,有时很难满足我们的需求,对于此情况,我们不得不在此基础上自行封装,今天所分享的文章就是一个很简单的控制器封装案例,包含了基本的播放暂停,全屏和退出全屏&#…

在ElementUI中如何通过按钮控制输入框的隐藏与显示

点击此按钮会出现两个输入框 当点击完新增后会出现两个输入框及一个按钮&#xff0c;解决此方案思路比较简单&#xff1a;就是设置一个属性值&#xff0c;用v-if进行绑定&#xff0c;在什么情况下需要显示就需要设置v-if绑定的值等于需要显示的值 <div style"height:7…

Istio 熔断 连接池 故障处理

istio熔断 熔断主要是无感的处理服务异常并保证不会发生级联甚至雪崩的服务异常。在微服务方面体现是对异常的服务情况进行快速失败&#xff0c;它对已经调用失败的服务不再会继续调用&#xff0c;如果仍需要调用此异常服务&#xff0c;它将立刻返回失败。 与此同时&#xff0…

c语言修炼第一章--初识c语言(1.3)

目录 前言&#xff1a; 1.关键字 1.1常见关键字: 1.1.1typedef类型重定义 1.2.static 1.2.1static修饰局部变量 1.2.2static修饰全局变量 1.2.3static修饰函数 …

待办事项工具用哪个?每天都在用的待办工具

随着职场“内卷”程度的加深&#xff0c;越来越多的上班族感到自己每天都会面临各种繁忙的日程安排、琐碎的待办事项&#xff0c;并且工作事项和家庭事项交织在一起&#xff0c;需要各方面都兼顾到&#xff0c;这简直让人恨不得长出三头六臂。在待办的事情比较多时&#xff0c;…

艺考之路,很艰难也很幸福

点击文末“阅读原文”即可参与节目互动 剪辑、音频 / 卷圈 运营 / SandLiu 卷圈 监制 / 姝琦 嘉宾 / 小川同学 产品统筹 / bobo 录音间 / 声湃轩北京站 本期节目是拼娃时代的第三十期&#xff0c;我们请来了拼娃时代的老朋友&#xff0c;小川同学。 拼娃时代的听友们肯定…

带有10位数码管显示的语音芯片ic,节省30%MCU硬件资源WTV890-B001

随着科技的不断发展&#xff0c;WTV890-B001多功能语音芯片的推出&#xff0c;为工程师带来了极大的便利和产品体验&#xff0c;这款多功能语音芯片具有许多优势&#xff0c;其中WTV890-B001版本中&#xff0c;最引人注目的特点是它带有10位的数码管显示功能&#xff0c;无需再…