我們知道,使用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的邏輯進行處理。這個小小的自定義過濾器雖然看上去十分簡單,但用氣來卻很方便,於是就在這里整理了。