ShiroPlugin启动时无法获取到routeslist

 jfinal 3.3版本 

ShiroPlugin启动时无法获取到routeslist,查看jfinal源码发现 configPlugin 在configRoute 前,导致插件启动时 routeslist 并没有初始化 。。

除了改源码,有其他的解决方案吗??



评论区

tuozq

2017-12-13 12:00

我将ShiroPlugin放在afterJFinalStart中也不行,因为jfinal启动时构建完action后,会把routeslist清空

JFinal

2017-12-13 12:06

还想到一个不用改源码的方案:
1:做一个 MyActionMapping extends ActionMapping,在里头覆盖掉 buildActionMapping() 方法,拿到自己想要的东西,然后调有 super.buildActionMapping()

2:再做一个 MyActionHandler extends ActionHandler,覆盖 init(...) 方法,在里头趁机将 ActionMapping 这个参数换成自己的 MyActionMapping

3:在 configHandler(Handlers me) 中配置一下即可:
me.setActionHandler(new MyActionHandler());

记得搞定后回来分享

JFinal

2017-12-13 12:07

再补充一个改源码的方案:
创建一个 com.jfinal.core 的包到你的项目中,然后将 jfinal 源码中的 Config.java 拷贝过来,改掉里头的次序

如果觉得这样不太好看,可以将这个包创在 src/main/resources 目录下面,这样在开发的时候一般是看不到的, jfinal 3.4 发布以后,再删掉这个改动就可以了

此外,不用改源码的方案,除了我前面介绍的以外,或许 @玛雅牛 也有一个,找一下作者:
https://my.oschina.net/myaniu

tuozq

2017-12-13 12:36

@JFinal 多谢指导

tuozq

2017-12-13 13:52

@JFinal 已经解决了。
解决方案:创建一个 com.jfinal.core 的包到你的项目中,然后将 jfinal 源码中的 Config.java 拷贝过来,改掉里头的次序
jfinal的下个版本既然会修正这个问题,那就偷个懒采用最简单的方式了。。

分享一个我踩到的坑。。
记住一定要添加 me.add(new ShiroInterceptor()); 拦截器,我之前以为是一个普通拦截器和ShiroPlugin无关,就没有添加。。。 导致了shiro注解无效。

JFinal

2017-12-13 14:20

@tuozq 感谢分享

Lintel

2017-12-14 13:00

建议用http://www.jfinal.com/share/410这种方式继承shiro,不需要shiroplugin,也不存在楼主所说的问题

tuozq

2017-12-18 16:29

@Lintel 感谢分享,确实比这种插件的方式要简单,已经换成你分享的方案了。

热门反馈

扫码入社