今天在用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>
后面经过查找,只需要把自定义的过滤器在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,希望还有更好的解决方法的朋友,发表意见。谢谢