Druid passwordcallback失效

发布时间 2023-06-21 11:31:43作者: kelelipeng

Druid passwordcallback失效

 

springboot利用druid连接池做数据库密码加密

引入依赖

<dependency>

    <groupId>com.alibaba</groupId>

    <artifactId>druid</ artifactId>

    <version>1.1.21</version>

</ dependency> 


配置如下:

spring:

    datasource:

        driverClassName: com.mysql.cj.jdbc.Driver

        url: jdbc:mysql://127.0.0.1:3306/test

        username: root

        druid:

            connectionProperties: password=加密后的密码     #自定义加密方式

            passwordCallbackClassName: com.sgcc.psr.DBPasswordCallback #回调类的路径


回调类DBPasswordCallback 代码如下:

/** *需要继承DruidPasswordCallback 并重写setProperties 方法 **/

public class DBPasswordCallback extends DruidPasswordCallback {

@Override

public void setProperties(Properties properties) {

super.setProperties(properties);

//获取配置文件中加密后的密码,和xml中的connectionProperties属性配置相关

String password = (String) properties.get("password");

try {

//解密过程,ConfigTools为druid自带,提供一些好用的函数

String dbpassword= ConfigTools.decrypt(publicKey,password);

//设置密码

setPassword(dbpassword.toCharArray());

}catch (Exception e){

    e.printStackTrace();

        }

    }

}

启动失败,报错提示密码错误。

猜想是密码解密失败,进入到druid.jar断点调试,发现没有进入druidDatasource中的passwordCallback方法。

解决办法:

换成springboot集成的druid依赖

<dependency>

    <groupId>com.alibaba</groupId>

    <artifactId>druid-spring-boot-starter</ artifactId>

       <version>1.1.21</version>

</ dependency>