springMVC web项目 对访问数据库的用户名密码进行加密解密
在使用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项目 对访问数据库的用户名密码进行加密解密相关推荐
- 对数据库中的数据(用户名/密码)加密解密
生成32位加密文: public static String md5Encode(String inStr) throws Exception {MessageDigest md5 = null;tr ...
- ASP.NET Core Web项目连接MySQL数据库
作者在新建了一个ASP.NET Core Web项目的基础上,想连接本地的Mysql数据库,参考了很多博客,各种各样的说法都有,多少让人有感凌乱!自己最后捣鼓成功了!所以写一篇博客,以便后人查阅! 操 ...
- idea 启动php项目路径,关于idea中Java Web项目的访问路径问题
说明 这里只以 servlet 为例,没有涉及到框架,但其实路径的基本原理和框架的关系不大,所以学了框架的同学如果对路径有疑惑的也可以阅读此文 项目结构 在 idea 中新建一个 Java Web 项 ...
- Web项目,要求:保存用户名和密码在Cookie中,下次登录不再重新输入
设计一个实现登录功能的Web项目,要求:保存用户名和密码在Cookie中,下次登录不再重新输入 var cookie = {};//设置 cookie.SetCookies=function(name ...
- 配置springcloud中eureka服务访问时需要用户名密码
配置springcloud中eureka服务访问时需要用户名密码 1.application.yml中配置使用用户名密码登录链接: eureka:client:service-url:defaultZ ...
- oracle修改数据库用户名密码,怎样修改oracle数据库的用户名密码
对于不经常使用数据库的同学们来说,忘记用户名密码是很常见的一件事.下面就让学习啦小编给大家说说怎样修改oracle数据库的用户名密码吧. 修改oracle数据库用户名密码的方法 进入cmd命令界面(快 ...
- 网站安全狗安装时服务器名,解决网站安全狗安装后访问网站需要用户名密码的方法...
安装网站安全狗后访问网站需要用户名和密码怎么办?很多用户反应,安装网络安全狗后访问网站需要用户名和密码才能访问,这是怎么回事?如果每次访问网站都需要用户名和密码,那不是很麻烦?这该怎么解决?接下来小编 ...
- DM8登录用户名密码增强加密
登录用户名密码增强加密 生成公钥和私钥 ./dmkey PATH=/tmp 生成的文件名为dm_login.prikey和dm_login.pubkey 显示私钥的相关信息 ./dmkey prike ...
- java web项目中对数据库用户名密码加密的一种解决方案
原文路径:https://blog.csdn.net/u010463032/article/details/7900906 我们使用的项目经常是这个样子的: <bean id="dat ...
- 实现以最快速度搭建springboot后台web项目并连通数据库实现控制层与服务层与dao层的select查询...
背景 Servlet的出现 上世纪90年代,随着Internet和浏览器的飞速发展,基于浏览器的B/S模式随之火爆发展起来.最初,用户使用浏览器向WEB服务器发送的请求都是请求静态的资源,比如html ...
最新文章
- CloudCompare 的简单的使用说明
- python的语法类似php_PHP实现类似python__mian__=__name__来单独执行类文件
- wps数据匹配怎么做_【VK技术分享】数据安全怎么做—静态数据的识别和治理
- oracle数字加 39,Oracle数据库之SQL单行函数—数字函数-Oracle
- pandas手册_Github标星6000+ 这可能是最全的机器学习工具手册
- dot-files/directories 点开头的文件或文件夹(windows/linux)
- Ubuntu18.04 从头开始编译 Android Native WebRTC
- Linux进程优先级取值范围,Linux中使用nice和renice命令:改变进程优先级
- 研究人性弱点的黑客?聊聊社会工程学与网络安全
- g5500服务器装系统,联想G50笔记本U盘重装win10系统教程
- 医疗废物信息管理系统
- html+css基础教程之CSS 透明边框和样式
- windows默认打开计算机,[Answers 分享]如何在Windows 7中还原.dll文件的默认打开方式...
- macmini做文件服务器,macmini改造云服务器
- G1 Concurrent Refinement Thread 在干啥?
- 字段缩写ti表示什么_以下哪个字段缩写表示“摘要”?
- 深圳软件测试几月份好找工作,上海与深圳的软件测试发展,未来哪个更有发展前景?...
- Python 随机提取Excel中部分数据并输出为新表格
- java上传视频文件到服务器,java视频上传到远程服务器
- 21个为您的网站和博客提供的免费视频播放器[转载]
热门文章
- python 遍历文件夹文件代码
- 让Apache Shiro保护你的应用[转]
- ★☆★书已到手《Java程序员,上班那点事儿》正式上架★☆★
- Visual Graph图形控件的高级应用
- C语言中fp=fopen NULL,c – “FILE * fp,* fopen();”是什么?
- 基于耗散性的matlab,基于耗散能的沥青抗老化性能评价方法与流程
- Linux电源管理-Suspend/Resume流程
- 通过KGDB进行双机内核调试
- logistic回归详解(三):梯度下降训练方法
- python学习(六)----文件和异常