Почему Tuckey UrlRewrite Filter не вызывает chain.doFilter после сопоставления правила?

Здесь используется Spring Framework ...

Я создал фильтр для изменения тела ответа файлов css, и если я вызываю URL напрямую, он запускается. Однако, если соблюдается правило перезаписи URL, фильтр пропускается.

Пример: Однако, если соблюдается правило перезаписи URL, фильтр пропускается. ...

Здесь используется Spring Framework ...

Я создал фильтр для изменения тела ответа файлов css, и если я вызываю URL напрямую, он запускается. Однако, если соблюдается правило перезаписи URL, фильтр пропускается.

Пример: Однако, если соблюдается правило перезаписи URL, фильтр пропускается. ...

Здесь используется Spring Framework ...

Я создал фильтр для изменения тела ответа файлов css, и если я вызываю URL напрямую, он запускается. Однако, если соблюдается правило перезаписи URL, фильтр пропускается.

Пример: В 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>

настроено сопоставление (нам это нужно по ряду причин)

, так что любой файл * .css, путь к которому начинается с " / styles-special / "будет переписан в" / styles / ", и cssFilter не будет вызываться, но любой файл * .css, путь которого начинается с /" / styles / ", будет проходить через cssFilter, как и ожидалось.

Я пробовал изменить шаблон URL для cssFilter на несколько разных вариантов, но результат тот же. Мне кажется, что фильтр 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
...
5
задан Sean Patrick Floyd 25 March 2012 в 10:12
поделиться