笨方法避免JFinal对非JF插件配置的Druid的监控页的请求接管而导致无法正常进入监控页

之前小伙伴也碰到过这个问题,现在我有又碰到这个问题,因为Druid我是集成到我自己写的小轮子里面,所以并没有使用JFinal提供的插件的方式去配置Druid.

这里就碰到这个尴尬的问题了,推荐配置下,JFinalFilter监管了所有的路由请求:

<filter>
    <filter-name>jfinal</filter-name>
    <filter-class>com.jfinal.core.JFinalFilter</filter-class>
    <init-param>
        <param-name>configClass</param-name>
        <param-value>ProjectStart</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>jfinal</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

而这就导致了,我们外部配置的Druid的监控页:/druid/*下的所有地方都被JF监控到了,这就会引发下面的问题:

在我们Druid监控的登陆页的请求都无法正常处理:

image.png

image.png

我的猜测就是JFinal接管了所有的请求,并且按照JFinal内部的规则处理请求了,所以Druid的内嵌监控页面和请求都无法正常处理.


那么我想到了什么笨方法来避免这个问题呢?

设置一个contextName!

刚接触JFianl不久,我连设置contextName的方法也很迷....

首先我们让JFinal的核心过滤器去监管以下路径:

<filter>
    <filter-name>jfinal</filter-name>
    <filter-class>com.jfinal.core.JFinalFilter</filter-class>
    <init-param>
        <param-name>configClass</param-name>
        <param-value>ProjectStart</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>jfinal</filter-name>
    <url-pattern>/arc/*</url-pattern>
</filter-mapping>

即前面加上一段自定义的路径,等于变相的set了contextName.

然后我们的controllerKey上都要加上这段路径....(真的是很蠢的方法)

me.add("/arc/user", UserController.class,"/");


如此一来,我们的Druid的监控页就不属于JFinal的管控范围之内了,所以我们就可以正常访问Druid的监控页了~


这是我想到的笨方法,变相设置contextPath.

不知波总是否能提供解决方案,在社区里找同样的问题确实有点难,因为没有搜索帖子的功能.

评论区

JFinal

2018-02-15 13:53

最简单的办法是添加一个 DruidStatViewHandler,有了这个 Handler,就不再需要在 web.xml 中折腾了

添加的时候可以为 druid 访问添加路由,例如:
me.add(new DruidStatViewHandler("/druid"));

DruidStatViewHandler 构造方还有一个重载方法,可以传入 IDruidStatViewAuth 支持权限控制

Youyinnn

2018-02-16 10:51

@JFinal 感谢波总

吴骑龙

2018-03-02 13:20

厉害了!

排行老七

2018-03-08 13:53

@JFinal 感谢波总

热门分享

扫码入社