?
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
}
}
}
Java单体项目里,我们一般是只需配置一个数据库,这时代码里的dao层都是只对一个数据库 *** 作;但有时候我们的数据可能在2个或者3个数据库,这时就需要配置更多数据源,进行数据库直连 *** 作,下面以MySQL的两个库为例(Oracle也就换个驱动类与连接串)。
(本文阅读大概花费两分钟)
技术条件:
springboot 2.5.3 (即springframework 5.3.9)
MySQL 5.7
mybatis-plus 3.5.0
dynamic-datasource 3.5.0
druid 1.2.9
idea开发工具、maven 3.3.9
1、导入相关依赖
2、建立两个数据库mydb(表 user)、db2(表t_class),并分别建一张表
3、编写application.yaml配置文件
4、编写po类、dao层、一个接口测试类
其中,在dao的类加上对应的数据源标识符,使用此注解com.baomidou.dynamic.datasource.annotation.DS
5、启动项目,查看结果
至此,多数据源环境集成成功;当然这里只使用了查询功能,对应事务相关的下一回合文章再做讨论啥。
现针对数据库密码加密方面,利用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>
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)