Filter & RequestDispatcher 更改 URL 对现有过滤器的影响

Filter & RequestDispatcher to change URL effect on existing filters

我做了一个过滤器,负责向请求添加.do,并且是第一个声明的过滤器:

 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

    if(! (request instanceof  HttpServletRequest)){
      chain.doFilter(request, response );
    }

    HttpServletRequest httpServletRequest = (HttpServletRequest) request;
    String requestUrl = httpServletRequest.getServletPath();

    if(!isBetaPathRequest(httpServletRequest) || StringUtils.contains(requestUrl,".")){
      chain.doFilter(request, response );
      return;
    }

    String newUrl = requestUrl;

    int lastIndexOf = requestUrl.lastIndexOf("?");
    if(lastIndexOf == -1){

      if(requestUrl.charAt(requestUrl.length()-1) != '/'){
        newUrl = newUrl.concat(".do");
      }

    }
    else{
      newUrl = requestUrl.substring(0, lastIndexOf-1) .concat(".do")  .concat(requestUrl.substring(lastIndexOf));
    }

    final RequestDispatcher rq = getRequestDispatcher(request, newUrl);
    rq.forward(request, response);
  }

项目 web.xml 文件中还声明了其他各种过滤器,我通过调试器通知它们没有 运行。

一个重要过滤器的当前映射例如:

内容响应缓存过滤器 *。做

但是最初传入的请求在通过 BetaRewriteUrlFilter 之前不会在 URl 中包含 .do

调用 RequestDispatcher.forward 时,是否应用了过滤器,或者我们是否需要手动校准过滤器或改为使用 302 重定向???

我最后做的是将这个新过滤器放在 web.xml 定义的最后。

这个重写过滤器需要放在链的最后,因为使用 request dispatcher forward 方法不会破坏功能或抑制其他过滤器的 运行。