开发者社区 问答 正文

JFinal配置Druid的防注入功能启动报错

public void configPlugin(Plugins me) {
    DruidPlugin druidPlugin = new DruidPlugin(getProperty("jdbcUrl"), getProperty("user"), getProperty("password"),
"oracle.jdbc.driver.OracleDriver","wall");
    me.add(druidPlugin);
    // 配置ActiveRecord插件
    ActiveRecordPlugin arp = new ActiveRecordPlugin(druidPlugin);
    me.add(arp);
    arp.setDialect(new OracleDialect());
    arp.addMapping("blog","ID", Blog.class);    // 映射blog 表到 Blog模型
    arp.addMapping("TBL_CODE_AREA","AREA_UUID", NumberAreaInfo.class);
    arp.addMapping("TBL_CODE_AREA_MOBILE","ID", MobileTitle.class);
}

代码是这样的。

报错如下:
screenshot

展开
收起
小旋风柴进 2016-06-08 13:14:33 3448 分享 版权
1 条回答
写回答
取消 提交回答
  • 这个是Druid的一个 bug 导致的,解决办法是不要使用别名来应用过滤器,转而直接使用过滤器,具体见如下代码:

    // DruidPlugin
    DruidPlugin dp = new DruidPlugin(getProperty("jdbcUrl"), getProperty("user"), getProperty("password"));
    dp.addFilter(new StatFilter());
    WallFilter wall = new WallFilter();
    wall.setDbType("mysql");
    dp.addFilter(wall);
    me.add(dp);
     
    // ActiveRecordPlugin
    ActiveRecordPlugin arp = new ActiveRecordPlugin(dp);

    Druid 的bug 导致在使用别名过滤器时无法识别数据库类型,所以需要wall.setDbType("mysql");

    2019-07-17 19:31:42
    赞同 展开评论