自定义struts2的过滤器,释放不需要过滤的类

  我们知道,使用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的逻辑进行处理。这个小小的自定义过滤器虽然看上去十分简单,但用气来却很方便,于是就在这里整理了。

原文地址:https://www.cnblogs.com/wq123/p/3484067.html