在使用springMVC开发web项目中,数据库的用户名,密码一般都是配置在.properties文件中

然后在通过.xml配置文件引入.properties的变量,例如

在config.properties文件中,配置如下变量,变量值配置在pom.xml的profile标签下,在此就不再赘述

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc\:mysql\://${p.jdbc.url}/${p.jdbc.dbname}?useUnicode\=true&characterEncoding\=UTF-8&zeroDateTimeBehavior\=convertToNull&rewriteBatchedStatements\=true
jdbc.username=${p.jdbc.username}
jdbc.password=${p.jdbc.password}  

在applicationContext.xml中,通过如下标签引入这些变量值

    <!-- 将多个配置文件读取到容器中,交给Spring管理 --><bean id="propertyConfigurer"class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"><property name="locations"><list><value>classpath:/properties/*.properties</value></list></property></bean>

这样对于是明文的帐号,密码,是没有问题的。但是如果我在配置文件中的帐号密码是加密后的,那么如何进行使用配置呢?

解决办法:

1.首先确定加密解密算法,这种情况下,我们肯定选择是对称性加密解密算法,首选DES算法,在这里就拿他举例

2.完成加密解密算法,这个代码很简单,就不赘述,密钥自己决定,保密即可

public class DESUtils
{  private static Key key;  private static String KEY_STR="mykey";  static{  try  {  KeyGenerator generator = KeyGenerator.getInstance("DES");  SecureRandom secureRandom=SecureRandom.getInstance("SHA1PRNG");  secureRandom.setSeed(KEY_STR.getBytes());  generator.init(secureRandom);  key = generator.generateKey();  generator=null;  }  catch (Exception e)  {  throw new RuntimeException(e);  }  }  /** * 对字符串进行加密,返回BASE64的加密字符串 * <功能详细描述> * @param str * @return * @see [类、类#方法、类#成员] */  public static String getEncryptString(String str){  BASE64Encoder base64Encoder = new BASE64Encoder();  System.out.println(key);  try  {  byte[] strBytes = str.getBytes("UTF-8");  Cipher cipher = Cipher.getInstance("DES");  cipher.init(Cipher.ENCRYPT_MODE, key);  byte[] encryptStrBytes = cipher.doFinal(strBytes);  return base64Encoder.encode(encryptStrBytes);  }  catch (Exception e)  {  throw new RuntimeException(e);  }  }  /** * 对BASE64加密字符串进行解密 * <功能详细描述> * @param str * @return * @see [类、类#方法、类#成员] */  public static String getDecryptString(String str){  BASE64Decoder base64Decoder = new BASE64Decoder();  try  {  byte[] strBytes = base64Decoder.decodeBuffer(str);  Cipher cipher = Cipher.getInstance("DES");  cipher.init(Cipher.DECRYPT_MODE, key);  byte[] encryptStrBytes = cipher.doFinal(strBytes);  return new String(encryptStrBytes,"UTF-8");  }  catch (Exception e)  {  throw new RuntimeException(e);  }  }  public static void main(String[] args)  {  String name ="root";  String password="1234";  String encryname = getEncryptString(name);  String encrypassword = getEncryptString(password);  System.out.println(encryname);  System.out.println(encrypassword);  System.out.println(getDecryptString(encryname));  System.out.println(getDecryptString(encrypassword));  }
}  

3.springMVC中需要实现解密的接口

需要覆盖convertProperty方法,encryptPropNames存储的是需要解密的属性

public class EncryptPropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer
{  private String[] encryptPropNames = {"jdbc.username", "jdbc.password"};  @Override  protected String convertProperty(String propertyName, String propertyValue)  {  //如果在加密属性名单中发现该属性  if (isEncryptProp(propertyName))  {  String decryptValue = DESUtils.getDecryptString(propertyValue);  System.out.println(decryptValue);  return decryptValue;  }else {  return propertyValue;  }  }  private boolean isEncryptProp(String propertyName)  {  for (String encryptName : encryptPropNames)  {  if (encryptName.equals(propertyName))  {  return true;  }  }  return false;  }
}  

4.配置这个解密类

用<bean id="propertyConfigurer" class="org.utils.EncryptPropertyPlaceholderConfigurer" ><property name="locations"><list><value>classpath:/properties/*.properties</value></list></property></bean>
替换<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"><list><value>classpath:/properties/*.properties</value></list></property></bean>

备注:实际使用中可能会遇到 sun.misc.BASE64Encoder无法使用的问题,下面给出解决办法

解决方案1(推荐): 
只需要在project build path中先移除JRE System Library,再添加库JRE System Library,重新编译后就一切正常了。 
解决方案2: 
Windows -> Preferences -> Java -> Compiler -> Errors/Warnings -> 
Deprecated and trstricted API -> Forbidden reference (access rules): -> change to warning

转载于:https://www.cnblogs.com/richard-ju/p/7279948.html

springMVC web项目 对访问数据库的用户名密码进行加密解密相关推荐

  1. 对数据库中的数据(用户名/密码)加密解密

    生成32位加密文: public static String md5Encode(String inStr) throws Exception {MessageDigest md5 = null;tr ...

  2. ASP.NET Core Web项目连接MySQL数据库

    作者在新建了一个ASP.NET Core Web项目的基础上,想连接本地的Mysql数据库,参考了很多博客,各种各样的说法都有,多少让人有感凌乱!自己最后捣鼓成功了!所以写一篇博客,以便后人查阅! 操 ...

  3. idea 启动php项目路径,关于idea中Java Web项目的访问路径问题

    说明 这里只以 servlet 为例,没有涉及到框架,但其实路径的基本原理和框架的关系不大,所以学了框架的同学如果对路径有疑惑的也可以阅读此文 项目结构 在 idea 中新建一个 Java Web 项 ...

  4. Web项目,要求:保存用户名和密码在Cookie中,下次登录不再重新输入

    设计一个实现登录功能的Web项目,要求:保存用户名和密码在Cookie中,下次登录不再重新输入 var cookie = {};//设置 cookie.SetCookies=function(name ...

  5. 配置springcloud中eureka服务访问时需要用户名密码

    配置springcloud中eureka服务访问时需要用户名密码 1.application.yml中配置使用用户名密码登录链接: eureka:client:service-url:defaultZ ...

  6. oracle修改数据库用户名密码,怎样修改oracle数据库的用户名密码

    对于不经常使用数据库的同学们来说,忘记用户名密码是很常见的一件事.下面就让学习啦小编给大家说说怎样修改oracle数据库的用户名密码吧. 修改oracle数据库用户名密码的方法 进入cmd命令界面(快 ...

  7. 网站安全狗安装时服务器名,解决网站安全狗安装后访问网站需要用户名密码的方法...

    安装网站安全狗后访问网站需要用户名和密码怎么办?很多用户反应,安装网络安全狗后访问网站需要用户名和密码才能访问,这是怎么回事?如果每次访问网站都需要用户名和密码,那不是很麻烦?这该怎么解决?接下来小编 ...

  8. DM8登录用户名密码增强加密

    登录用户名密码增强加密 生成公钥和私钥 ./dmkey PATH=/tmp 生成的文件名为dm_login.prikey和dm_login.pubkey 显示私钥的相关信息 ./dmkey prike ...

  9. java web项目中对数据库用户名密码加密的一种解决方案

    原文路径:https://blog.csdn.net/u010463032/article/details/7900906 我们使用的项目经常是这个样子的: <bean id="dat ...

  10. 实现以最快速度搭建springboot后台web项目并连通数据库实现控制层与服务层与dao层的select查询...

    背景 Servlet的出现 上世纪90年代,随着Internet和浏览器的飞速发展,基于浏览器的B/S模式随之火爆发展起来.最初,用户使用浏览器向WEB服务器发送的请求都是请求静态的资源,比如html ...

最新文章

  1. CloudCompare 的简单的使用说明
  2. python的语法类似php_PHP实现类似python__mian__=__name__来单独执行类文件
  3. wps数据匹配怎么做_【VK技术分享】数据安全怎么做—静态数据的识别和治理
  4. oracle数字加 39,Oracle数据库之SQL单行函数—数字函数-Oracle
  5. pandas手册_Github标星6000+ 这可能是最全的机器学习工具手册
  6. dot-files/directories 点开头的文件或文件夹(windows/linux)
  7. Ubuntu18.04 从头开始编译 Android Native WebRTC
  8. Linux进程优先级取值范围,Linux中使用nice和renice命令:改变进程优先级
  9. 研究人性弱点的黑客?聊聊社会工程学与网络安全
  10. g5500服务器装系统,联想G50笔记本U盘重装win10系统教程
  11. 医疗废物信息管理系统
  12. html+css基础教程之CSS 透明边框和样式
  13. windows默认打开计算机,[Answers 分享]如何在Windows 7中还原.dll文件的默认打开方式...
  14. macmini做文件服务器,macmini改造云服务器
  15. G1 Concurrent Refinement Thread 在干啥?
  16. 字段缩写ti表示什么_以下哪个字段缩写表示“摘要”?
  17. 深圳软件测试几月份好找工作,上海与深圳的软件测试发展,未来哪个更有发展前景?...
  18. Python 随机提取Excel中部分数据并输出为新表格
  19. java上传视频文件到服务器,java视频上传到远程服务器
  20. 21个为您的网站和博客提供的免费视频播放器[转载]

热门文章

  1. python 遍历文件夹文件代码
  2. 让Apache Shiro保护你的应用[转]
  3. ★☆★书已到手《Java程序员,上班那点事儿》正式上架★☆★
  4. Visual Graph图形控件的高级应用
  5. C语言中fp=fopen NULL,c – “FILE * fp,* fopen();”是什么?
  6. 基于耗散性的matlab,基于耗散能的沥青抗老化性能评价方法与流程
  7. Linux电源管理-Suspend/Resume流程
  8. 通过KGDB进行双机内核调试
  9. logistic回归详解(三):梯度下降训练方法
  10. python学习(六)----文件和异常