?
1
2
3
<property name="passwordCallback" >
<bean class="utils.DBPasswordCallback" />
</property>
DBPasswordCallback类实现:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class DBPasswordCallback extends DruidPasswordCallback {
/**
* serialVersionUID
*/
private static final long serialVersionUID = 1L
@Override
public void setProperties(Properties properties)
{
super.setProperties(properties)
String pwd = properties.getProperty("password")
if (!StringUtil.isTrimEmpty(pwd)) {
try {
setPassword(EncryptUtil.decrypt2AES(pwd).toCharArray())
} catch (Exception e) {
setPassword(pwd.toCharArray())
}
}
}
}
可是无法解密。 调试时发现properties是空的({}),取不到jdbc配置的原始密码,所以后面的 *** 作也就没有意义了。 大家知道正确的做法吗?
Druid版本1.0.2
单车架构师
发帖于 2年前
3回/634阅
标签: Druid
举报
| 分享到
0收藏(1)
按票数排序 显示最新答案 共有3个答案 (最后回答: 2年前 )
0
单车架构师2年前
有人知道吗?
评论(0)| 引用此答案| 举报 (2014-02-22 12:57)
0
兮风古道2年前
可以扩展Spring的PropertyPlaceholderConfigurer,摘录别人一段代码你参考
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class DecryptPropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer{
/**
*/
@Override
protected String convertProperty(String propertyName,String propertyValue){
if(isEncryptPropertyVal(propertyName)){
return DesUtils.getDecryptString(propertyValue)//调用解密方法
}else{
return propertyValue
}
}
/**
* 判断属性值是否需要解密,这里我约定需要解密的属性名用encrypt开头
* @param propertyName
* @return
*/
private boolean isEncryptPropertyVal(String propertyName){
if(propertyName.startsWith("encrypt")){
return true
}else{
return false
}
}
}
评论(0)| 引用此答案| 举报 (2014-02-22 13:37)
0
单车架构师2年前
引用来自“兮风古道”的答案
可以扩展Spring的PropertyPlaceholderConfigurer,摘录别人一段代码你参考
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class DecryptPropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer{
/**
* 重写父类方法,解密指定属性名对应的属性值
*/
@Override
protected String convertProperty(String propertyName,String propertyValue){
if(isEncryptPropertyVal(propertyName)){
return DesUtils.getDecryptString(propertyValue)//调用解密方法
}else{
return propertyValue
}
}
/**
* 判断属性值是否需要解密,这里我约定需要解密的属性名用encrypt开头
* @param propertyName
* @return
*/
private boolean isEncryptPropertyVal(String propertyName){
if(propertyName.startsWith("encrypt")){
return true
}else{
return false
}
}
}
现针对数据库密码加密方面,利用druid进行数据库加密,实现项目配置文件中数据库密码密文存储,一定程度上保证了数据安全。配置方法:
1、数据源配置[spring-mybatis.xml文件]
<!-- 配置数据源 -->
<bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
init-method="init" destroy-method="close">
<property name="driverClassName" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<!-- 配置初始化大小、最小、最大 -->
<property name="initialSize" value="${jdbc.pool.init}" />
<property name="minIdle" value="${jdbc.pool.minIdle}" />
<property name="maxActive" value="${jdbc.pool.maxActive}" />
<!-- 配置获取连接等待超时的时间 -->
<property name="maxWait" value="60000" />
<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="60000" />
<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
<property name="minEvictableIdleTimeMillis" value="300000" />
<property name="validationQuery" value="${jdbc.validation.query}" />
<property name="testWhileIdle" value="true" />
<property name="testOnBorrow" value="false" />
<property name="testOnReturn" value="false" />
<!-- 打开PSCache,并且指定每个连接上PSCache的大小(Oracle使用)
<property name="poolPreparedStatements" value="true" />
<property name="maxPoolPreparedStatementPerConnectionSize" value="20" />-->
<!-- 配置监控统计拦截的filters -->
<!--<property name="filters" value="stat" />-->
<property name="filters" value="${jdbc.filters}" />
<property name="connectionProperties"
value="${jdbc.connectionProperties}"/>
</bean>
作为参考,数据本身提供的字符串加密方法:------------1.HASHbytes---------------
SELECT sys.fn_sqlvarbasetostr(HASHbytes('MD5','2324243')),sys.fn_VarBinToHexStr(HASHbytes('MD5','2324243'))
------------2. EncryptByPassPhrase 带公钥---------------
--公钥最好保存在其他地方
declare @pwd varbinary(max) ,@password nvarchar(1000) , @EncrptString nvarchar(max)
set @password ='1234567'
set @EncrptString= N'我是中国人'
--加密
SELECT @pwd = EncryptByPassPhrase( @password, @EncrptString)
select @pwd
--解密
SELECT @EncrptString =CAST( DecryptByPassPhrase(@password,@pwd) as nvarchar(max))
select @EncrptString
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)