undertow + shiro 场景下filter顺序问题

jfinal的undertow启动的时候默认就会配置上JFinalFilter,相当于后续无论添加什么Filter顺序都是在JFinalFilter之后。

但是因为旧项目原因,web的所有鉴权都交由Shiro控制,ShiroFilter必须优先其他所有Filter加载才行,否则某些web交互下会出现诡异的问题

不知道这个filter顺序问题能否解决,求各位大虾帮忙

评论区

zeroabc

2019-06-21 16:00

奇怪,通过代码
undertow.onDeploy((classLoader, deploymentInfo) -> {
for (FilterMappingInfo fm : deploymentInfo.getFilterMappings()) {
System.out.println(fm.getFilterName());
}
});

输出的是
shiro
jfinal

zeroabc

2019-06-21 16:24

undertow源码里面configJFinalFilter()先于builder.build()执行

JFinal

2019-06-21 16:47

@zeroabc 看一下 UndertowServer 源码,有很多扩展方式,例如可以继承一下 UndertowServer 覆盖父类中相关方法来改变次序

zeroabc

2019-06-21 16:48

用insertFilterUrlMapping,打扰了各位大佬

undertow.configWeb(builder -> {
builder.addListener("org.apache.shiro.web.env.EnvironmentLoaderListener");

builder.addFilter("shiro", "com.quickplan.projectname.shiro.QpShiroFilter");
});
undertow.onDeploy((classLoader, deploymentInfo) -> {
deploymentInfo.insertFilterUrlMapping(0, "shiro", "/*", DispatcherType.REQUEST);
});

zeroabc

2019-06-21 16:50

@JFinal 好的好的

JFinal

2019-06-21 17:16

@zeroabc jfinal undertow 不支持 shiro ,这个在文档中有过说明,难道你的项目没有问题?

zeroabc

2019-06-21 17:43

@JFinal 按照上面的设置,暂时没发现问题

热门反馈

扫码入社