您的位置:首页 > 编程语言 > Java开发

struts2配置定义过滤器无效

2014-03-18 10:13 696 查看
今天在用struts2写一个自定义过滤器的时候发现想要过滤的请求一直没有进入过滤器,一直觉得奇怪了。

在web.xml中就是这样配置的。

<filter>
		<filter-name>login filter</filter-name>
		<filter-class>com.danale.filter.LoginFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>login filter</filter-name>
		<url-pattern>*.jsp</url-pattern>
	 
	</filter-mapping>
 	<filter-mapping>
		<filter-name>login filter</filter-name>
		<url-pattern>*.action</url-pattern>
	 
	</filter-mapping>


我的目地是想将未登录的用户请求(.jsp .action),多转入到过滤器,而且跳转到login

过滤器是这么写的。

public class LoginFilter implements Filter {

@Override
	public void destroy() {
		// TODO Auto-generated method stub
	}
	@Override
	public void doFilter(ServletRequest arg0, ServletResponse arg1,
			FilterChain arg2) throws IOException, ServletException {
		HttpServletRequest request = (HttpServletRequest) arg0;
		HttpServletResponse response = (HttpServletResponse) arg1;
		HttpSession session = request.getSession();
		String url = request.getRequestURI();
		String username = (String) session.getAttribute("username");
		if (username == null || username.equals("")) {
			if (url != null && !url.equals("")
					&& (url.indexOf("Login") < 0 && url.indexOf("login") < 0)) {
				response.sendRedirect("login.jsp");
				return;			}		}
		arg2.doFilter(arg0, arg1);
		return;
	}

	@Override
	public void init(FilterConfig arg0) throws ServletException {
		// TODO Auto-generated method stub

	}
}


开始觉得这没有任何问题啊,至少没发现,
后来把web.xml中的配置改成

<filter>
		<filter-name>login filter</filter-name>
		<filter-class>com.danale.filter.LoginFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>login filter</filter-name>
		<url-pattern>/*</url-pattern>
	 
	</filter-mapping>


确实起作用的,把所以的请求都揽入过滤器中的,但是出现了一个问题,就是连页面的css,js等等全部都过滤了,出现了只有html元素的页面,这也不行。

后面经过查找,只需要把自定义的过滤器在web.xml中的配置放在struts过滤器的前面才会生效。如:

<filter>
		<filter-name>login filter</filter-name>
		<filter-class>com.danale.filter.LoginFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>login filter</filter-name>
		<url-pattern>*.jsp</url-pattern>
	 
	</filter-mapping>
 	<filter-mapping>
		<filter-name>login filter</filter-name>
		<url-pattern>*.action</url-pattern>
	 
	</filter-mapping>
<filter>
<filter-name>struts-cleanup</filter-name>
<filter-class>org.apache.struts2.dispatcher.ActionContextCleanUp</filter-class>
</filter>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>


这样就ok,希望还有更好的解决方法的朋友,发表意见。谢谢
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: