- 浏览: 1363805 次
- 性别:
- 来自: 江西
文章分类
- 全部博客 (287)
- oracle (30)
- Java (73)
- MySQL (16)
- Myeclipse/eclipse (12)
- javascript (15)
- JSP/Servlet (7)
- maven (14)
- AJAX (2)
- JQuery (9)
- tomcat (8)
- spring (21)
- Linux (28)
- PHP (9)
- UI (1)
- 编程错误及处理 (38)
- 多线程 (18)
- hibernate (10)
- Web Service (3)
- struts2 (6)
- log4j (3)
- SVN (4)
- DWR (1)
- lucene (1)
- 正则表达式 (4)
- jstl (2)
- SSL (3)
- POI (1)
- 网络编程 (1)
- 算法 (2)
- xml (4)
- 加密解密 (1)
- IO (7)
- jetty (2)
- 存储过程 (1)
- SQL Server (1)
- MongoDB (1)
- mybatis (1)
- ETL (1)
- Zookeeper (1)
- Hadoop (5)
- Redis (1)
- spring cloud (1)
最新评论
-
ron.luo:
牛逼,正解!
maven设定项目编码 -
lichaoqun:
java.sql.SQLException: Can't call commit when autocommit=true -
Xujian0000abcd:
Thanks...
Cannot proxy target class because CGLIB2 is not available. Add CGLIB to the clas -
renyuan2ni:
[i][b][u]引用[list]
[*][img][flas ...
Manual close is not allowed over a Spring managed SqlSession -
851228082:
宋建勇 写道851228082 写道<!-- 文件拷贝时 ...
maven设定项目编码
在开发和设计过程中,通常需要对一些配置数据进行加密,如数据库的连接方式等,在读取到加密数据后,我们必须解密后才能使用。
以下是来自书籍《Spring 3.x 企业应用开发实战》示例,可做参考!
一、编写加密代码DESUtil.java
二、继承PropertyPlaceholderConfigurer类并实现接口convertProperty
三、编写属性文件保存类,测试时用
四、创建属性文件
song.properties
song1.properties
其中
song.properties保存的是密文,如下:
username=Pa3HE99AWOg=
password=QAHlVoUc49w=
song.properties保存的是明文,如下:
username1=songjy
password1=123456
五、编写Spring配置文件
六、测试类编写
MD5加密效果如下:
DES对称加密的实现及其源代码
用 Java 解密 C# 加密的数据(DES)
Java文件加密-spring属性文件加密
Spring获取Bean的几种方式
MD5,salt,SHA,PBKDF2加密
备注:本次示例使用的Spring版本是:spring-core-3.2.4.RELEASE
以下是来自书籍《Spring 3.x 企业应用开发实战》示例,可做参考!
一、编写加密代码DESUtil.java
/** * DESUtil.java * cn.com.songjy * Function: TODO * * version date author * ────────────────────────────────── * 1.0 2013-9-25 songjy * * Copyright (c) 2013, TNT All Rights Reserved. */ package cn.com.songjy; import java.security.Key; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; /** * ClassName:DESUtil * * @author songjy * @version 1.0 * @since v1.0 * @Date 2013-9-25 下午4:19:48 */ public class DESUtil { private static Log log = LogFactory.getLog(DESUtil.class); public static void main(String[] args) { if (null != args) if (1 <= args.length) for (String src : args) log.info(src + ":" + encrypt(src)); } /* 1、指定DES加密解密所用的密钥 */ private static Key key; private static String KEY_STR = "myKey"; static { try { KeyGenerator generator = KeyGenerator.getInstance("DES"); generator.init(new SecureRandom(KEY_STR.getBytes())); key = generator.generateKey(); generator = null; } catch (NoSuchAlgorithmException e) { log.error(e.getMessage(), e); } } /* 2、对字符串进行DES加密,返回BASE64编码的加密字符串 */ public static String encrypt(String src/* 明文 */) { BASE64Encoder base64en = new BASE64Encoder(); try { byte[] src_byte = src.getBytes("UTF-8"); Cipher cipher = Cipher.getInstance("DES"); cipher.init(Cipher.ENCRYPT_MODE, key); byte[] final_byte = cipher.doFinal(src_byte); return base64en.encode(final_byte); } /* * catch (UnsupportedEncodingException e) { log.info(e.getMessage(), e); * } catch (NoSuchAlgorithmException e) { log.info(e.getMessage(), e); } * catch (NoSuchPaddingException e) { log.info(e.getMessage(), e); } */catch (Exception e) { throw new RuntimeException(e.getMessage(), e); } } /* 3、对BASE64编码的加密字符串进行解密,返回解密后的字符串 */ public static String decrypt(String src/* 密文 */) { BASE64Decoder base64de = new BASE64Decoder(); try { byte[] src_byte = base64de.decodeBuffer(src); Cipher cipher = Cipher.getInstance("DES"); cipher.init(Cipher.DECRYPT_MODE, key); byte[] decrypt_byte = cipher.doFinal(src_byte); return new String(decrypt_byte, "UTF-8"); } catch (Exception e) { throw new RuntimeException(e.getMessage(), e); } } }
二、继承PropertyPlaceholderConfigurer类并实现接口convertProperty
/** * EncryptPropertyPlaceholderConfigurer.java * cn.com.songjy * Function: TODO * * version date author * ────────────────────────────────── * 1.0 2013-9-25 songjy * * Copyright (c) 2013, TNT All Rights Reserved. */ package cn.com.songjy; import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer; /** * ClassName:EncryptPropertyPlaceholderConfigurer * * @author songjy * @version 1.0 * @since v1.0 * @Date 2013-9-25 下午4:22:13 */ public class EncryptPropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer { private Log log = LogFactory.getLog(EncryptPropertyPlaceholderConfigurer.class); /** * (non-Javadoc) * @see org.springframework.beans.factory.config.PropertyResourceConfigurer#convertProperty(java.lang.String, java.lang.String) */ @Override protected String convertProperty(String propertyName, String propertyValue) { if(encryptPropNames.contains(propertyName))//属性propertyName的值加密了,需要解密 return DESUtil.decrypt(propertyValue); return super.convertProperty(propertyName, propertyValue); } private List<String> encryptPropNames;//保存加密的属性字段 public List<String> getEncryptPropNames() { return encryptPropNames; } public void setEncryptPropNames(List<String> encryptPropNames) { for (String string : encryptPropNames) { log.info("属性"+string+"的值已加密"); } this.encryptPropNames = encryptPropNames; } }
三、编写属性文件保存类,测试时用
/** * MyConfig.java * cn.com.songjy * Function: TODO * * version date author * ────────────────────────────────── * 1.0 2013-9-26 songjy * * Copyright (c) 2013, TNT All Rights Reserved. */ package cn.com.songjy; /** * ClassName:MyConfig * * @author songjy * @version 1.0 * @since v1.0 * @Date 2013-9-26 上午9:31:56 */ public class MyConfig { private String username; private String password; private String username1; private String password1; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getUsername1() { return username1; } public void setUsername1(String username1) { this.username1 = username1; } public String getPassword1() { return password1; } public void setPassword1(String password1) { this.password1 = password1; } }
四、创建属性文件
song.properties
song1.properties
其中
song.properties保存的是密文,如下:
username=Pa3HE99AWOg=
password=QAHlVoUc49w=
song.properties保存的是明文,如下:
username1=songjy
password1=123456
五、编写Spring配置文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean class="cn.com.songjy.EncryptPropertyPlaceholderConfigurer"> <property name="encryptPropNames"> <list> <value>username</value> <value>password</value> </list> </property> <property name="locations"> <list> <value>classpath:cn/com/songjy/song.properties</value> <value>classpath:cn/com/songjy/song1.properties</value> </list> </property> </bean> <bean id="my" class="cn.com.songjy.MyConfig"> <property name="username" value="${username}"/> <property name="password" value="${password}"/> <property name="username1" value="${username1}"/> <property name="password1" value="${password1}"/> </bean> </beans>
六、测试类编写
/** * Test.java * cn.com.songjy * Function: TODO * * version date author * ────────────────────────────────── * 1.0 2013-9-26 songjy * * Copyright (c) 2013, TNT All Rights Reserved. */ package cn.com.songjy; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * ClassName:Test * * @author songjy * @version 1.0 * @since v1.0 * @Date 2013-9-26 上午9:35:31 */ public class Test { /** * @method main * @param args * @since v1.0 */ public static void main(String[] args) { ApplicationContext ac = new ClassPathXmlApplicationContext("cn/com/songjy/beans.xml"); //MyConfig my = (MyConfig) ac.getBean("my"); MyConfig my = ac.getBean(MyConfig.class); System.out.println(my.getUsername().equals(my.getUsername1())); System.out.println(my.getPassword().equals(my.getPassword1())); } }
public void encrypt_MD5() { String 明文密码 = "123456"; try { java.security.MessageDigest md = java.security.MessageDigest .getInstance("MD5"); md.update(明文密码.getBytes()); byte b[] = md.digest(); int i; StringBuffer buf = new StringBuffer(); for (int offset = 0; offset < b.length; offset++) { i = b[offset]; if (i < 0) i += 256; if (i < 16) buf.append("0"); buf.append(Integer.toHexString(i)); } System.out.println("密文: " + buf.toString());// 32位的加密 System.out.println("密文: " + buf.toString().substring(8, 24));// 16位的加密 } catch (java.security.NoSuchAlgorithmException e) { e.printStackTrace(); } }
MD5加密效果如下:
DES对称加密的实现及其源代码
用 Java 解密 C# 加密的数据(DES)
Java文件加密-spring属性文件加密
Spring获取Bean的几种方式
MD5,salt,SHA,PBKDF2加密
备注:本次示例使用的Spring版本是:spring-core-3.2.4.RELEASE
发表评论
-
Failed to introspect annotations: interface com.xxx
2016-07-16 17:22 3785在使用maven打包发布项目时发现在tomcat容器中正常启动 ... -
REST API Design备忘
2016-07-12 15:26 585GET /collection:返回资源对象的列表(数组) ... -
java.lang.NoSuchMethodError: org.springframework.expression.spel.SpelParserConfi
2015-07-30 09:41 9886错误信息: [WARNING] FAILED remoting ... -
spring aop未执行问题记录
2015-07-03 11:54 1393在类com.ipharmacare.plat.service. ... -
Spring AOP配置不起作用
2015-01-17 14:27 0[url=http://blog.csdn.net/mmm33 ... -
class org.springframework.scheduling.quartz.CronTriggerBean
2014-05-09 08:56 2832提示错误信息:java.lang.IncompatibleCl ... -
Failed to read schema document
2013-09-17 15:21 4837使用 Spring Security 构建一个 HTTP 基本 ... -
spring拦截器配置问题<mvc:annotation-driven/>
2013-09-09 11:10 13936原始配置如下:<mvc:annotation-drive ... -
spring整合DWR步骤简单说明
2013-04-26 14:21 1234一、导入dwr包【dwr.jar】 ... -
Spring中PropertyPlaceholderConfigurer的使用
2012-08-23 14:29 1755<context:property-placeholde ... -
spring AOP配置
2012-08-20 15:03 1835耗时监控 package cn.com.tcgroup.yun ... -
454 Authentication failed, please open smtp flag first!
2012-08-03 18:37 11991用spring发送邮件,使用的是QQ邮箱,出现以下错误信息: ... -
spring MVC疑问-项目示例
2012-06-18 13:30 0applicationContext.xml <?xm ... -
Spring配置项<context:annotation-config/>解释说明
2012-06-14 11:47 1535在基于主机方式配置Spri ... -
axis2+spring集成 服务端及客户端
2012-06-05 16:56 2316整个项目代码见附件songjy-axis2spring-1.0 ... -
Spring AOP进行日志记录,管理 (使用Spring的拦截器功能获取对action中每个方法的调用情况,在方法调用前
2012-06-05 10:38 4106在java开发中日志的管理有很多种。我一般会使用过滤器,或者是 ... -
spring mvc事务管理不起作用-备忘
2012-06-04 16:58 2171不起作用前代码: ComusersController.ja ... -
Spring MVC 直接访问静态文件(html、jpg、js...)
2012-06-04 14:11 5718首先在spring-servle.xml文件中加入如下代码: ... -
freemarker spring hibernate 整合示例项目
2012-05-30 12:25 0User.java package com.mvc.enti ... -
Spring MVC 文件上传 Maven
2012-05-28 18:16 8352FileUploadController.java pack ...
相关推荐
在session共享中遇到的坑。自己通过更改源码实现自定义功能
18.3.3. 读取授权 18.4. 实现类 18.4.1. LdapAuthenticator实现 18.4.1.1. 常用功能 18.4.1.2. BindAuthenticator 18.4.1.3. PasswordComparisonAuthenticator 18.4.1.4. 活动目录认证 18.4.2. 链接到LDAP...
5.3.2 使用加密的属性文件 5.3.3 属性文件自身的引用 5.4 引用Bean的属性值 5.5 国际化信息 5.5.1 基础知识 5.5.2 MessageSource 5.5.3 容器级的国际化信息资源 5.6 容器事件 5.6.1 Spring事件类结构 5.6.2 解构...
同时,从数据库查询结果当中读取数据时自动把数据解密。 三、关于样例的说明 样例目录:examples/spring-boot-example/ 样例使用的数据库:mariadb(mysql同样适用) 数据库脚本:examples/spring-boot-example/src...
读取授权 19.4. 实现类 19.4.1. LdapAuthenticator 实现 19.4.1.1. 常用功能 19.4.1.2. BindAuthenticator 19.4.1.3. PasswordComparisonAuthenticator 19.4.1.4. 活动目录认证 19.4.2. 链接到LDAP ...
5.3.2 使用加密的属性文件 5.3.3 属性文件自身的引用 5.4 引用Bean的属性值 5.5 国际化信息 5.5.1 基础知识 5.5.2 MessageSource 5.5.3 容器级的国际化信息资源 5.6 容器事件 5.6.1 Spring事件类结构 5.6.2 解构...
读取授权 19.4. 实现类 19.4.1. LdapAuthenticator实现 19.4.1.1. 常用功能 19.4.1.2. BindAuthenticator 19.4.1.3. PasswordComparisonAuthenticator 19.4.1.4. 活动目录认证 19.4.2. 链接到LDAP...
采用springboot的基于Netty的SSL加密PKI认证通信,里面模拟了Netty的客户端和服务端的证书认证规则,同时分为单向认证和双向认证,信任证书链并对RA颁发的证书来进行验签,实现了双向和单向加密通信,保障了数据的...
该应用程序运行计划任务,读取加密货币的汇率并将其存储在Mongodb中。 UI使用rest服务读取费率并将其显示在表格上。 该表会定期更新。 详细信息页面显示货币数据以及当日,7天,30天,90天的汇率图表。 如果用户...
数据加密 一,简介数据库编码器自动加解密,通过注解方式实现二,支持情况支持mybatis,基于mybatis拦截器拦截器实现支持TK.mybatis扩展支持mybatis示例扩展支持spring-data-jpa三,快速开始见示例:example如果不是...
它已加密,但仍可作为原始分区读取和写入。 当eMMC发生故障时,它通常会变为只读状态甚至更糟-损坏。 我已经用这种方法找回了几只破碎的任天堂,这可能也对您有帮助!怎么运行的几乎所有SD卡读卡器都可以读取eMMC...
一个简单的应用程序,演示了如何使用Spring Cloud Cloud Foundry组件读取VCAP_SERVICES并初始化多个数据源。 此应用程序的另一个目的是演示可选的凭据加密,这是PCF客户的典型安全要求。 测验 此应用程序已配置有带...
主要给大家介绍了关于Spring boot配置文件加解密的相关资料,文中通过示例代码以及图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
DES加密工具类 参数验证注解 Xss攻击 接口访问超时拦截器 二叉树模糊匹配数字 Socket连接池封装 guava本地缓存异步更新 Redis实现Ip、手机号等访问次数限时,支持按照时间段(天、时、分、秒),支持按时间内(每一...
整合实现功能 (controller入口): 1. 用户管理 2. 卡管理 3. 设备控制 4. 语音对讲 5. 上传文件 6. 二维码开门 已整合接口deomo (AccessNew类): 订阅门禁事件 取消订阅门禁事件 订阅报警事件 ...二维码加密
基于LSB信息隐藏源程序,可有效隐藏文本信息!
主要介绍了Spring Boot 在启动时进行配置文件加解密的方法,本文通过实例给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下