传统JAVA_WEB项目如果是ssh、ssm之类的搭建的项目,其数据库链接信息大部分是交给Spring来作为管理

数据库的URL地址、账号、密码一般会写在配置文件中:dbconfig.properties里或者是在system-config.properties在或者是在applicationContext-datasource.xml配置,无非就是这几种。在或者是你的数据库链接信息在项目的那个自己命名的配置文件里面记录。

为了做到保护数据安全、版权原因等一些效果。提出需求要对项目中所有涉及数据库链接信息地方的账号密码进行加密


思路:在项目开始运行之前,先使用加密程序把正确的明文密码进行加密得到密文信息,修改配置文件中的password为密文,在项目启动的时候要把这个密文进行解开为明文、让spring链接数据库使用

  1. 加密解密程序(使用开源MD5加密解密)可以修改加密程序,加上自己的独特的字符串数字之类的逻辑、就是自己独特的加密程序了。
import java.security.MessageDigest;/*** MD5技术加密解密*/
public class MD5Tools {/**** MD5加码 生成32位md5码*/public static String string2MD5(String inStr){MessageDigest md5 = null;try{md5 = MessageDigest.getInstance("MD5");}catch (Exception e){System.out.println(e.toString());e.printStackTrace();return "";}char[] charArray = inStr.toCharArray();byte[] byteArray = new byte[charArray.length];for (int i = 0; i < charArray.length; i++)byteArray[i] = (byte) charArray[i];byte[] md5Bytes = md5.digest(byteArray);StringBuffer hexValue = new StringBuffer();for (int i = 0; i < md5Bytes.length; i++){int val = ((int) md5Bytes[i]) & 0xff;if (val < 16)hexValue.append("0");hexValue.append(Integer.toHexString(val));}return hexValue.toString();}/*** 加密解密算法 执行一次加密,两次解密*/public static String convertMD5(String inStr){char[] a = inStr.toCharArray();for (int i = 0; i < a.length; i++){a[i] = (char) (a[i] ^ 't');}String s = new String(a);return s;}// 测试主函数public static void main(String args[]) {String s = new String("rootroot");System.out.println("原始:" + s);System.out.println("MD5后:" + string2MD5(s));System.out.println("解密的:" + convertMD5(convertMD5(s)));}
}


2.数据库的链接信息、如果配置是在****.xml里面需要移动链接信息配置到****…properties中。如果项目中没有****…properties就自己新建一个、然后*******.xml中使用占位符。如果项目的数据库链接信息已经在****…properties就不用再修改了(移动的目的是读取配置文件信息时候,****…properties比********.xml读取方便)




3.在项目启动时候让spring加载自定义的类,进行密码解密。按照图中配置信息进行配置,注意自定义类的名称和路径。

package com.xxx.utils;import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Properties;
import org.springframework.util.DefaultPropertiesPersister;//该类继承spring的读取配置文件的类使spring启动时会加载这个类进行解密(需要在配置文件里面配置这个类的名称才会进行加载)
//本项目是在applicationContext-datasource.xml里面配置了
//项目启动时候可以在这个类中打断点进入看解密过程
public class PropertiesPersist extends DefaultPropertiesPersister{@Override
public void load(Properties props, InputStream is) throws IOException {//读取到配置文件(****..properties)信息内容Properties properties=new Properties();properties.load(is);//判断读取配置文件中的信息是否为password属性if(properties.get("password")!=null){System.out.println("==========密文======="+properties.get("password"));System.out.println("===================进行配置数据库密码解密、注入配置文件===");//进行解密String password=MD5Tools.convertMD5(properties.get("password").toString().trim());//在写入到配置文件中properties.setProperty("password", password);}OutputStream outputStream=null;try {outputStream=new ByteArrayOutputStream();properties.store(outputStream, "");is=outStream2InputStream(outputStream);super.load(props, is);System.out.println("=========配置数据库密码解密、注入配置文件=========【Success】==");System.out.println("=======注入的明文密码======:" +properties.get("password"));} catch (Exception e) {try {throw e;} catch (Exception e1) {e1.printStackTrace();}}finally{outputStream.close();}}private InputStream outStream2InputStream(OutputStream out) {ByteArrayOutputStream bos=new ByteArrayOutputStream();bos=(ByteArrayOutputStream) out;ByteArrayInputStream swapSTream=new ByteArrayInputStream(bos.toByteArray());return swapSTream;
}
}

4.项目启动时候可以在自定义的类打断点,跟一下是否进入到解密类中,密码是否进行了解密,输出明文,验证为项目中没有错误的的日志信息,项目可以正常访问,加密解密到此文为止,账号加密可以参考密码加密

Spring 配置的项目中数据库链接信息加密(详细)相关推荐

  1. 重新学习Spring一--Spring在web项目中的启动过程

    1 Spring 在web项目中的启动过程 Spring简介 Spring 最简单的功能就是创建对象和管理这些对象间的依赖关系,实现高内聚.低耦合.(高内聚:相关性很强的代码组成,既单一责任原则:低耦 ...

  2. 关于项目中数据库密码加密的使用

    关于项目中数据库密码加密的使用 1 使用需求 2 使用步骤 1 准备一个SpringBoot项目环境 2 添加jasypt的jar包 3 创建一个测试类 4 修改配置文件 5 启动项目,访问忌口 6 ...

  3. 点石互动--石头之:在Google中查看链接的详细信息

    点石互动   highdiy 发表于 03月 14, 2007 在Google网站管理员中心提供详细的反相链接信息后,使得以前许多不得不注册个Yahoo! SiteExplorer帐号以查询网站反相链 ...

  4. SpringMVC中数据库链接配置

    从昨天开始一直在纠结数据库链接的问题,现在可以说才从库里面查出数据.这种感觉还是希望和大家分享一下 首先我们来看看我用ecplise创建项目的目录结构: 上面是我的目录结构,和数据库链接的都放在了ap ...

  5. Spring Boot+JSP项目中静态资源配置

    Spring Boot静态资源配置说明 在 Spring Boot 中,默认情况下,一共有5个位置可以放静态资源,五个路径分别如下: classpath:/META-INF/resources/ cl ...

  6. java和opencv配置_Java——OpenCVWindows配置和项目中jar包的简单配置

    1. 安装OpenCV 1.1 下载相应的OpenCV版本,解压 1.2 将 openCV的dll文件(D:\InstallPackages\OpenCV\opencv\build\java\x64) ...

  7. jeecg 手机注册 阿里云短信API 【 阿里云短信发送验证码 平台配置和项目中使用】

    文章目录 jeecg 项目效果展示 短息通知页面入口 代码中调用短信api 配置和代码 API中的重要参数配置项: 阿里控制台注册 注册签名 注册短信模板  阿里云短信发送验证码配置和项目使用 je ...

  8. android配置vlc_android项目中使用VLC

    VLC是pc时代流媒体播放器的标杆,相信大家都有接触.VLC的流媒体部分是基于开源的live555库.live555的代码我稍微看过一些,基于C++的,说实话,代码写的有点乱,不太符合一个开源库的档次 ...

  9. Java项目中数据库从mysql 5.7更换到mysql8.0.18版本

    我们从网上下载或者购买一个项目之后,要想在本地运行起来,首先要做的事情就是查看所需要的环境是否一致,即Tomcat/IDEA/JDK/Mysql等版本要保持一致.今天主要来说一下我经常遇到的一些数据库 ...

最新文章

  1. 经典教材《模式识别和机器学习》官方免费下载!
  2. [BZOJ 1070][SCOI2007]修车(费用流)
  3. 图解DIV相关编程实例
  4. DataTransmission:免费薅羊毛,Are you kidding me? 镭速传输 “百日计划”提前大曝光!Raysync传输协议要开放?
  5. pcl_openmap_OpenMap教程3 –使用MapHandler构建基本的地图应用程序–第2部分
  6. 谷歌发布最新版安卓Android,谷歌正式除名华为,安卓12华为首发无望,但鸿蒙将迎难顶上!...
  7. 40.leetcode17_letter_combinations_of_a_phone_number
  8. matlab 图片最多显示几张_matlab 如何一次显示多个图像,subplot不合适
  9. hg8546m虚拟服务器,华为HG8546路由及WIFI配置说明
  10. 九种流行木马的发现和清除
  11. php数字转成字符串的函数,php怎么将数字转成字符串?
  12. 普渡大学计算机科学和计算机工程,老师能讲一下普渡大学西拉法叶分校电气与计算机工程怎么样?...
  13. html5背景泡泡,HTML5 canvas梦幻圆形泡泡动画背景特效
  14. linux安装mongodb,实测好用
  15. 副业新风口:淘宝无货源,1天1小时!10个月全款买房!
  16. 操作系统转载和注释___荷风听雨
  17. Allan方差与随机误差辨识
  18. 登录管理(权限管理) token
  19. 开发ODBC驱动代码
  20. 【高数】用拉格朗日中值定理解决极限问题

热门文章

  1. 一汽大众将召回3.7万辆存自燃隐患车辆
  2. 股票决定卖不卖?近六成粉丝支持马斯克出售10%特斯拉股票
  3. 最新安卓手机性价比榜公布:Redmi连夺三冠
  4. 小米平板5系列获EEC认证:骁龙870加持 预装深度定制MIUI系统
  5. 粉笔网CEO怒斥湖南卫视扶贫节目作秀:自己赞助1000万太傻
  6. 马化腾卸任财付通网络小贷公司董事长、总经理
  7. 共享单车变“私有”、被毁、被盗:用户们都看不下去了,举报!
  8. 拼多多市值一夜蒸发759亿元,黄峥丝毫不慌...
  9. iPhone11翻车了?发烫严重、信号依旧差...
  10. 中国电信9月将率先推出5G新号段:资费也随之曝光 最高599元/月?