我们知道,使用struts2的时候需要设置一些不需要它过滤的请求(诸如我们使用的一些插件需要原生态的servlet),遇到这种情况的解决办法就是扩展struts的过滤器,下面请看web.xml的配置:
<filter> <filter-name>struts2</filter-name> <!-- <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> --> <filter-class>com.hsc.util.UeditFilter</filter-class> <init-param> <param-name>config</param-name> <param-value>struts-default.xml,struts-plugin.xml,../struts.xml</param-value> </init-param> </filter>
注释掉的部分就是原来struts2的过滤器,我们这里需要对它进行扩展,写一个自己的过滤器。过滤器的内容如下
package com.hsc.util; import java.io.IOException; import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter; public class UeditFilter extends StrutsPrepareAndExecuteFilter { public void doFilter(ServletRequest req, ServletResponse res,FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) req; //不过滤的url String url = request.getRequestURI(); if (url.indexOf("/resource/ueditor/jsp/imageUp.jsp") >= 0||url.indexOf("/servlet/onLineTakePhotoServlet") >= 0) { // System.out.println("使用自定义的过滤器"); chain.doFilter(req, res); }else{ // System.out.println("使用默认的过滤器"); super.doFilter(req, res, chain); } } }
由以上的代码可以看出,自定义的过滤器继承StrutsPrepareAndExecuteFilter 这个类,在过滤的逻辑中拦截url对不需要过滤的请求,这里的两个例子为“/resource/ueditor/jsp/imageUp.jsp”和"/servlet/onLineTakePhotoServlet" ,当过滤器检测到该Url的时候放行,否则继续按照struts2的逻辑进行处理。这个小小的自定义过滤器虽然看上去十分简单,但用气来却很方便,于是就在这里整理了。