之前小伙伴也碰到过这个问题,现在我有又碰到这个问题,因为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监控的登陆页的请求都无法正常处理:
我的猜测就是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.
不知波总是否能提供解决方案,在社区里找同样的问题确实有点难,因为没有搜索帖子的功能.
添加的时候可以为 druid 访问添加路由,例如:
me.add(new DruidStatViewHandler("/druid"));
DruidStatViewHandler 构造方还有一个重载方法,可以传入 IDruidStatViewAuth 支持权限控制