老生常谈的加密问题
这次是对数据库连接属性的加密
一开始接到这个任务感觉很迷茫,刚开始bing了如何登录加密,但是结果不对
后来发现是关键字没搜索对,改成了"数据库连接加密",了解到了加密的过程如下

过程

利用加密工具生成加密串
在指定数据库连接密码的属性文件中替换原来的明文密码
自定义一个数据库连接池,继承你原来明文的时候的连接池就行
在指定数据源的配置文件内把数据库连接池指定为自定的连接池
重写setPassword方法,方法内是加密工具类的解密方法,把传递的密码赋值为解密后的密码(此时数据库在连接池的帮助下可以读取明文密码)

遗留:

虽然写好了大体,数据库连接也成功了,但是有些残留问题:

指定字符集编码没有写
貌似访问时间加长了
自定义连接池放在哪个包下

总结:

要精准定位自己的问题,方便百度,问人
明确需求和流程之后再思考如何写代码

以上都参考以下链接:源链接

**

2018年12月10日11:09:50新增:
**
本来以为任务完成了,结果要进行JNDI的加密修改,在不能动jar包的情况下如何解决?
刚开始想到了新建一个相似的去弄,后来发现一篇文章写在对应模块(maven分模块开发)下也能实现,只需要在Tomcat的context.xml中的resource标签的factory属性指定值(就是重写的实现类,功能和basicDataSourcefactory一样,不过加了个解密功能)
感谢大佬(虽然乍一看没感觉出工厂模式)

参考链接

**

2018年12月14日16:40:52修改
**
今天终于搞定了全部问题,没有任何namingexception,不需要忽略解密异常.
而且满足了在不改动源码的情况下执行解密和重新赋值.

感受

重新从头到尾整理解决整个问题的过程:

接到任务,听到jndi很慌,大概了解需求,但是不知道该怎么加密
百度后知道了配置连接加密就是随便找个地方加密完然后放到配置文件中
百度解密,改动源码,继承basicDataSource,setpassWord方法中解密配置(带上对应解密工具类和jar包),然后打jar包,替换原始common.dbcp(或者Tomcat的dbcp2的dbcp)的jar包
涉及源码修改,牵扯甚大,此方法不适合使用.
再次百度,得知了把jar包里重写的那个类decryptbasicdatasource(名字自定义的,功能和basicDataSource一样)写到代码中也是可以的,但是要Tomcat的context.xml指定resource下的factory属性值为decryptbasicdatasource的全限定类名.
但是Tomcat服务器找不到这个类,仍然会报namingexception和classnotfoundexception
思考2日不得结果,后经过指点得知只需要添加几行代码就行,从中思考出或许可以从DataSource下手,作为接口没有太多方法,所以考虑到使用反射获取DataSource内的链接信息(这时候忽略了其子类basicDataSource),然而获得了password但是不能把解密后的设置回DataSource
后继续百度,终于发现子类basicdatasource的set get方法,一时心情激荡,终于完成了解密连接操作,然而(现在想来那时候的脑子真实瓦特了)DataSource是明文密码,后续再执行getconnection还是会自动解密,但是此时密码已经是明文,再执行解密操作会报错.(不知道为什么还是需要getconnection)
此时有两种办法,一个是把DataSource的password重新设置为明文,一个是判断是否已经解密(此时思维陷入死角,没有想到第一种简单办法,因此浪费两天时间).在今天下午,终于想到了第一个办法,在成功连接数据库后再次把DataSource内密码设置为加密串,此时originpassword还在使用后继续百度,终于发现子类BasicDataSource的set get方法,一时心情激荡,终于完成了解密连接操作
然而(现在想来那时候的脑子真实瓦特了)DataSource是明文密码,后续再执行getconnection还是会自动解密,但是此时密码已经是明文,再执行解密操作会报错.此时有两种办法,一个是把DataSource的password重新设置为明文,一个是判断是否已经解密(此时思维陷入死角,没有想到第一种简单办法,因此浪费两天时间).在今天下午,终于想到了第一个办法,在成功连接数据库后再次把DataSource内密码设置为加密串,这样就解决了问题
大概写下伪代码吧

initctx =new initialcontext();
ds =initctx.lookup获取数据源  //注意是Tomcat的basicDataSource , 而不是common.dbcp的
originpassword=ds.getpassword();
decryptpassword=解密工具解密得到明文密码
ds.setpassword(decryptpassword);
ds.getconnection();
ds.setpassword(originpassword)

最后…其实很想抽自己,浪费了那么多时间,脑回路稍微转一下就好了,庆幸的是最终解决了问题

最后的最后 再总结两点

父类方法不够的时候去找子类
思维阻塞的时候,脱离代码(因为代码的一些类会造成方向误导),通过脑图或者画图来明确解决思路

MySQL连接配置文件密码加密以及解密相关推荐

  1. java连接池hkai,MySQL连接配置文件密码加密及其在多种连接池上的应用

    为了安全,连接数据库的配置文件中,如密码等信息需要采用密文的形式存放. 本文将给出多种连接池数据库密码密文存放的实现~ 如何配置数据库密码加密访问数据库? 将配置文件用户相关的信息(例如:密码)进行加 ...

  2. Spring Cloud之 Config 中 配置文件的加密与解密

    Spring Cloud Config 中配置文件的加密与解密 上篇文章和大家聊了 Spring Cloud Config 分布式配置中心的基本用法,相信大家对 Spring Cloud Config ...

  3. Web.config中连接字符串的加密和解密

    Web.config中连接字符串的加密和解密  我们采用命令行的方式进行加密和解密.使用ASP.NET2.0提供的命令行工具aspnet_regiis.exe,该应用程序位系统目录下Microsoft ...

  4. Spring Boot 配置文件密码加密方法

    参考:https://github.com/ulisesbocchio/jasypt-spring-boot Spring Boot 配置文件密码加密两种方案 - ken007 - 博客园 1.引入j ...

  5. 详解密码学中几种常见密码加密与解密

    目录 题目 凯撒加密法 代码实现 维吉尼亚密码 栅栏密码 矩阵置换密码 点击直接资料领取 题目 11.已知明文:MEET ME AFITER THE TOGO PARTY,分别用以下方法加密,写出加密 ...

  6. python - 密码加密与解密

    Python之密码加密与解密 - 对称算法 一.对称加密 1.1 安装第三方库 - PyCrypto 1.2 加密实现 二.非对称加密 三.摘要算法 3.1 md5加密 3.2 sha1加密 3.3 ...

  7. 5.3使用凯撒密码加密和解密英文文件python

    1本关任务:使用凯撒密码加密和解密英文文件.具体要求如下: (1)接收一个字符串为参数,如果参数值为加密,要求用户输入一个要加密的文件名,再输入一个单词做为密钥发生器,用于计算偏移量,对文件中的内容进 ...

  8. Java版 凯撒密码 加密、解密、暴力破解

    Java版 凯撒密码 加密.解密.暴力破解 用Java实现凯撒密码的 '加密' 和 '解密' 工作 代码实现如下: 代码片 package com.hellow.demo;import java.ut ...

  9. redismanager 获取不到yml中的密码_SpringBoot敏感信息加密,springboot配置文件密码加密jasypt...

    使用过SpringBoot配置文件的朋友都知道,资源文件中的内容通常情况下是明文显示,安全性就比较低一些.打开application.properties或application.yml,比如mysq ...

最新文章

  1. Windows 文件过滤驱动经验总结
  2. nginx php-fpm display_errors,php5-fpm的display_errors不能使用nginx
  3. [渝粤教育] 江西外语外贸职业学院 商务英语翻译技巧 参考 资料
  4. centos7.4二进制安装mysql
  5. hdu 3836 Equivalent Sets
  6. 昨天购入mac mini一台,4688元港币
  7. 在vs编辑器里走来走去的快捷键
  8. 微信公众号小白的进阶之路
  9. 程序员叫啥名字_什么是资深程序员?看自“配”的网名就真相了!
  10. Obsidian学习笔记(一):插件Excalidraw创建图表
  11. 苹果签名是什么?苹果签名的作用是什么?
  12. 三星GalaxyTab3 7.0(WIFI) SM-T210 刷机 ROM 教程 附带港版官方ROM
  13. Unity 接入高德开放API - 天气查询
  14. 【配送路径规划】蚁群算法求解配送路径最短问题【含Matlab源码 2222期】
  15. 图片折腾的经历——文件批处理、爬虫、图片工具等
  16. ES6模块体系及DDN区块链设计开发规范
  17. MySQL的默认用户名和密码的什么?
  18. Android工程师级别和学习路线
  19. 2022年陕西省中级工程师职称评定流程是怎样的,仔细看哦
  20. 坦克机器人战斗仿真引擎 Robocode

热门文章

  1. 恢复模糊的图像 SmartDeblur
  2. iphone12里的计算机,iphone12怎么连接电脑,iphone12连接电脑的教程
  3. 虚拟机安装到局域网服务器,局域网访问电脑中VMware虚拟机
  4. 太赛博朋克!华为天才少年自制B站百大Up奖杯,网友:技术难度不高,侮辱性极强...
  5. 基于深度学习的垃圾分类识别系统
  6. 计算机中硬盘上删了的东西为什么还可以恢复sd卡可以吗,怎么从SD卡中恢复误删文件...
  7. PVE安装配置UPS
  8. html+css+js本地音乐播放器,实现可视化音频频谱
  9. 串口服务器转换协议,串口服务器成对使用方案
  10. 怎么解决Tekla节点内部材质改变却外部无法改变