Druid(三)数据源密码加密及回调解密

项目中的 jdbc.properties 文件中配置的数据库连接信息中密码是明文密码,现在考虑配置密码密文以提高安全性。

1. 采用可逆的加密方式对原密码进行加密(此处采用des方式加密和解密)。

    加密和解密过程参考另一篇博文:https://blog.youkuaiyun.com/HSH205572/article/details/95307512

2. 配置Druid回调解密类,此类需要继承 DruidPasswordCallback, 并重写 它的 setProperties(Properties properties) 方法。

import com.alibaba.druid.util.DruidPasswordCallback;
import org.apache.commons.lang3.StringUtils;

import java.util.Properties;

/**
 * 描述 数据库密码回调解密 - 继承 DruidPasswordCallback,
 * 并重写 setProperties(Properties properties) 方法。
 *
 * @author ***
 * @date 2019/7/10 10:26
 */
public class DbPasswordCallback extends DruidPasswordCallback {

    /**
     * 数据库密码解密
     *
     * @param properties
     */
    @Override
    public void setProperties(Properties properties) {
        super.setProperties(properties);
        String pwd = properties.getProperty("password");
        if (StringUtils.isNotBlank(pwd)) {
            try {
                //这里的password是将jdbc.properties配置得到的密码进行解密之后的值,所以这里的代码是将密码进行解密
                String password = DesUtil.decrypt(pwd);
                setPassword(password.toCharArray());
            } catch (Exception e) {
                setPassword(pwd.toCharArray());
            }
        }
    }

}

上述类中的 DesUtil 是工具类,在步骤一中的博文可以看到。

3.  在数据源配置文件中 添加如下红色部分配置。

<!--数据库密码回调解密bean-->
<bean id="dbPasswordCallback" class="com.***.***.utils.DbPasswordCallback" lazy-init="true"/>

<!-- 默认数据源 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
    <property name="driverClassName" value="${spring.jdbc.driverClass}"/>
    <property name="url" value="${spring.jdbc.jdbcUrl}"/>
    <property name="username" value="${spring.jdbc.user}"/>
    <property name="password" value="${spring.jdbc.password}"/>
    <property name="filters" value="stat"/>
    ...
    ...
    <!--密码加密回调解密-->
    <property name="connectionProperties" value="password=${spring.jdbc.password}"/>
    <property name="passwordCallback" ref="dbPasswordCallback"/>

    ...
    ...
</bean>

注:上述配置中的 ${spring.jdbc.password} 拿到的是 项目中经过加密后的数据库密码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值