使用Jfinal-undertow,感觉没有加载web.xml里面的Filter,不知什么原因

web.xml在Tomacat下正常加载了的。但是切换到了undertow,好像并没有加载,导致里面配置的ShiroFilter没有初始化,影响系统的权限功能正常使用。

JFinal-undertow,系统是怎样给一个初始化过程呢?我应该在什么地方加载ShiroFilter之类的Filter


以下是web.xml配置:

<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
          http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
	version="3.0">

	<display-name>shop</display-name>
	<listener>
		<listener-class>org.apache.shiro.web.env.EnvironmentLoaderListener</listener-class>
	</listener>
	<filter>
		<filter-name>shiroFilter</filter-name>
		<filter-class>org.apache.shiro.web.servlet.ShiroFilter</filter-class>
		<init-param>
			<param-name>configPath</param-name>
			<param-value>classpath:shiro.ini</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>shiroFilter</filter-name>
		<url-pattern>/*</url-pattern>
		<dispatcher>REQUEST</dispatcher>
		<dispatcher>FORWARD</dispatcher>
		<dispatcher>INCLUDE</dispatcher>
		<dispatcher>ERROR</dispatcher>
	</filter-mapping>
	<filter>
		<filter-name>JFinalFilter</filter-name>
		<filter-class>com.jfinal.core.JFinalFilter</filter-class>
		<init-param>
			<param-name>configClass</param-name>
			<param-value>com.jeasygooshop.cfg.JFWebConfig</param-value>
		</init-param>
	</filter>

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

	<session-config>
		<session-timeout>120</session-timeout>
	</session-config>
	
</web-app>

评论区

JFinal

2018-12-05 22:27

由于 undertow 是为嵌入式 server 而生,所以 jfinal undertow 项目是不需要 web.xml 这个文件的

线上这版 Filter、Servelt、Listener、WebSocket 最新的配置方式如下:
UndertowServer.create(AppConfig.class)
.configWeb( builder -> {
// 配置 Filter
builder.addFilter("myFilter", "com.abc.MyFilter");
builder.addFilterUrlMapping("myFilter", "/*");
builder.addFilterInitParam("myFilter", "key", "value");

// 配置 Servlet
builder.addServlet("myServlet", "com.abc.MyServlet");
builder.addServletMapping("myServlet", "*.do");
builder.addServletInitParam("myServlet", "key", "value");

// 配置 Listener
builder.addListener("com.abc.MyListener");

// 配置 WebSocket,MyWebSocket 需使用 ServerEndpoint 注解
builder.addWebSocketEndpoint("com.abc.MyWebSocket");
})
.start();

这个配置方法在源码的 UndertowServer.configWeb(...) 上有。注意,上面的配置版本还未发布到中心库,现在的老版本是通过
UndertowServer.addFilterInfo(...) 来添加的 Filter

建议通过下面的方法直接用上新版本:
git clone git@gitee.com:jfinal/jfinal-undertow.git
cd jfinal-undertow
mvn clean install
注意要先将 pom.xml 中的 skip 标签改成 true 才能安装

最后改一下版本号为 : 1.2-SNAPSHOT 即可用上最新版本

rock_ping

2018-12-06 13:49

@JFinal 上次有说不支持Shiro

veky

2020-06-13 10:02

shiro配置,标记一下
UndertowServer.create(ServerConfig.class).configWeb(builder -> {

builder.addListener("org.apache.shiro.web.env.EnvironmentLoaderListener");
builder.addFilter("shiroFilter", "org.apache.shiro.web.servlet.ShiroFilter");
builder.addFilterUrlMapping("shiroFilter", "/*");

}).start();

热门反馈

扫码入社