过滤器& RequestDispatcher用于更改现有过滤器的URL效果

时间:2017-03-23 17:19:45

标签: servlets web.xml servlet-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); } 文件中还声明了其他各种过滤器,我告诉调试器它们没有被运行。

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

    ContentResponseCachingFilter     *。做

但是初始传入请求在URl中不包括web.xml,直到它通过.do

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

1 个答案:

答案 0 :(得分:0)

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

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