在匹配规则后,为什么Tuckey UrlRewrite不调用filter调用chain.doFilter?

在这里使用Spring Framework ……

我创建了一个filter来更改css文件的响应体,如果我直接调用url就会运行。 但是,如果匹配urlrewrite规则,则跳过filter。

示例:在web.xml中:

 UrlRewriteFilter org.tuckey.web.filters.urlrewrite.UrlRewriteFilter    UrlRewriteFilter /*   cssFilter org.springframework.web.filter.DelegatingFilterProxy   cssFilter *css  

在urlrewrite.xml中有一个这样的映射设置:

  /styles-special/(.*)$ /styles/$1  

(出于多种原因,我们需要这个)

因此,路径以“/ styles-special /”开头的任何* .css文件将被重写为“/ styles /”,并且不会调用cssFilter,但任何* .css文件的路径以“/ /”开头styles /“将按预期运行cssFilter。

我已经尝试将cssFilter的url-pattern更改为许多不同的选项,但结果相同。 在我看来,像tuckey urlrewritefilter只是在重写后没有调用chain.doFilter(),但也许它比那更复杂?

知道问题可能在这里吗? 这是预期的function吗? 有任何变通方法吗? …也许拦截器或控制器是去这里的方式?

在此先感谢您对此的任何建议!


注意:使用以下内容(如axtavt所建议):

 REQUEST FORWARD 

修复了链接和运行filter的问题。 但是,我收到以下错误:

 java.lang.IllegalStateException: NO CONTENT at org.mortbay.jetty.HttpGenerator.addContent(HttpGenerator.java:106) at org.mortbay.jetty.AbstractGenerator$Output.write(AbstractGenerator.java:644) at org.mortbay.jetty.AbstractGenerator$Output.write(AbstractGenerator.java:579) 

这是Filter的代码片段:

 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest httpRequest = (HttpServletRequest) request; HttpServletResponse httpResponse = (HttpServletResponse) response; OutputStream out = httpResponse.getOutputStream(); GenericResponseWrapper wrapper = new GenericResponseWrapper(httpResponse); chain.doFilter(request, wrapper); if(log.isDebugEnabled()) log.debug("doFilter: chain"); String respBody = new String(wrapper.getData()); // this throws error ... 

当Tuckey UrlRewrite Filter重写URL时,它会将请求转发给新URL,而不是将其传递给filter链。 默认情况下,filter不会应用于转发的请求,因此您需要对其进行配置:

  cssFilter *css REQUEST FORWARD