项目中的 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} 拿到的是 项目中经过加密后的数据库密码。