Code Bye

关于使用urlreqriter与filter的冲突的问题

 

1、web.xml中配置如下


<!--UrlRewriteFilter -->
	<filter>
		<filter-name>UrlRewriteFilter</filter-name>
		<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
		<init-param>
			<param-name>logLevel</param-name>
			<param-value>WARN</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>UrlRewriteFilter</filter-name>
		<url-pattern>/*</url-pattern>
		<dispatcher>REQUEST</dispatcher>  
    	<dispatcher>FORWARD</dispatcher>  
    	<dispatcher>INCLUDE</dispatcher>  
	</filter-mapping>

	<filter>
		<filter-name>struts2</filter-name>
		<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
	</filter>

	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>/*</url-pattern>
		<dispatcher>REQUEST</dispatcher>  
    	<dispatcher>FORWARD</dispatcher>  
    	<dispatcher>INCLUDE</dispatcher>
	</filter-mapping>

		<!-- session超时定义,单位为分钟 -->
	<session-config>
		<session-timeout>2</session-timeout>
	</session-config>

		<!-- 需要登陆的验证- -->
	<filter>
		<filter-name>SessionFilter</filter-name>
		<filter-class>com.abc.util.SessionFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>SessionFilter</filter-name>
		<url-pattern>*.action</url-pattern>
	</filter-mapping>



我在页面使用的伪静态化,所以页面看到的都是.html的链接,实际执行的都是.action

2、想实现的需求是,
既要是的filter能拦截未登录用户,又使得urlrewriter起作用啊。

现在的情况是,这个filter根本就没起作用。

两个过滤都是  /*  冲突了,,,,
<url-pattern>/*</url-pattern>

解决之道::  两个filter 使用不同的url-pattern
或者自定义struts的filter, 自己实现urlrewriteing


10分
两个过滤都是  /*  冲突了,,,,
<url-pattern>/*</url-pattern>

解决之道::  两个filter 使用不同的url-pattern
或者自定义struts的filter, 自己实现urlrewriteing


50分
1、2楼别误导人家,同一个URL匹配模式,可以有多个拦截器,这叫拦截器链,以xml配置的先后顺序来执行。
楼主的问题可能是要将SessionFilter加上:
<dispatcher>FORWARD</dispatcher>
原因是UrlRewriteFilter捕获到.html格式后转发(forward)给下面的StrutsFilter和SessionFilter,而SessionFilter默认是处理Request类型的dispatcher,所以就放过了forward来的。
另外应该要将SessionFilter放在中间吧,即StrutsFilter之前。
引用 3 楼 zhangjihao 的回复:

1、2楼别误导人家,同一个URL匹配模式,可以有多个拦截器,这叫拦截器链,以xml配置的先后顺序来执行。
楼主的问题可能是要将SessionFilter加上:
<dispatcher>FORWARD</dispatcher>
原因是UrlRewriteFilter捕获到.html格式后转发(forward)给下面的StrutsFilter和SessionFilter,而SessionFilter默认是处理Request类型的dispatcher,所以就放过了forward来的。
另外应该要将SessionFilter放在中间吧,即StrutsFilter之前。

哦,抱歉,放在StrutsFilter之前就只能当Servlet来写了。


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于使用urlreqriter与filter的冲突的问题