在這裏使用Spring Framework ...爲什麼不Tuckey UrlRewrite在規則匹配後過濾調用chain.doFilter?
我創建了一個過濾器來更改css文件的響應正文,如果我直接調用它的url,它會運行。但是,如果urlrewrite規則匹配,則會跳過篩選器。
示例: 在web.xml:
<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
<!-- skipping init params here for brevity -->
</filter>
<filter-mapping>
<filter-name>UrlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>cssFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>cssFilter</filter-name>
<url-pattern>*css</url-pattern>
</filter-mapping>
有一個在urlrewrite.xml設置像這樣的映射:
<rule>
<from>/styles-special/(.*)$</from>
<to last="true">/styles/$1</to>
</rule>
(我們需要此爲許多原因)
因此,其路徑以w /「/ styles-special /」啓動的任何* .css文件將被重寫爲「/ styles /」,並且cssFilter將不會被調用,但其路徑以w /「/ styles /」開頭的任何* .css文件將按預期運行通過cssFilter。
我試過將cssFilter的url-pattern改爲許多不同的選項,但是結果相同。在我看來,像tuckey的urlrewrite過濾器在重寫之後並不會調用chain.doFilter(),但也許它比這更復雜?
有什麼想法可能在這裏?這是預期的功能嗎?任何解決方法? ...也許一個攔截器或控制器是去這裏的路?
在此先感謝您的任何意見!
注意:使用以下(由axtavt建議):
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
修復該問題瓦特/鏈接和過濾器運行。不過,我得到以下錯誤:
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)
這裏的代碼片段從篩選:
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
...
太棒了!過濾器運行時,我補充說!不幸的是,當我在GenericResponseWrapper上調用getData時出現錯誤。嗯,我如何發佈代碼片段? – tkane2000 2011-02-18 18:59:47