在配置数据库密码加密时,参照网上资料修改了配置文件中关于filter部分,启动项目报错。

druid:
	  #就是它↓
      filters: config,wall,stat

报错信息:

java.lang.IllegalStateException: dbType not support : null, url
jdbc:p6spy:mysql://192.168.22.58:3306/english?autoReconnect=true&useSSL=false&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true
at com.alibaba.druid.wall.WallFilter.init(WallFilter.java:159)
~[druid-1.1.10.jar:1.1.10]

原因:
1.上面的配置方式,WallFilter没有指定dbtype,WallFilter初始化时找不到匹配的dbType抛出异常。
在这里插入图片描述
2.dbType为null的原因为,项目中使用了P6Spy 框架,而且没有显示指定WallFilter的dbType。这一点在Druid文档中有作说明。

在WallFilter初始化时,如果dbtype为空,会根据jdbcURL获取(下图红框方法),但是因为配置了P6Spy ,Util里面没有jdbc:p6spy:mysql的匹配项,仍然返回null。

datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.p6spy.engine.spy.P6SpyDriver
    url: jdbc:p6spy:mysql://192.168.22.58:3306/english?autoReconnect=true&useSSL=false&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true

在这里插入图片描述
解决:
配置数据库密码加密根本不需要WallFilter和StatFilter,要解决这个问题,直接去掉配置文件中的stat和wall,或者为wallfilter指定dbType。

public-key: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAORbdAnZ/F9SwQ7REnScoKkDAQAPleBYkaLzTYCWxumG5Anc0PcQLKEDHLBqCFO3vwEAAQ==
    druid:
      filters: config
      connection-properties: config.decrypt=true;config.decrypt.key=${public-key};
      #其他配置省略

或者

druid:
      filter:
        config:
          enabled: true
        stat:
          enabled: true
          db-type: mysql
        wall:
          enabled: true
          db-type: mysql
      connection-properties: config.decrypt=true;config.decrypt.key=${public-key};

参考文档:https://github.com/alibaba/druid/wiki/%E9%85%8D%E7%BD%AE-wallfilter
关于WallFilter dbType的配置说明:
在这里插入图片描述

Logo

更多推荐