Domanda

Utilizzo di Primavera Framework qui ...

Ho creato un filtro per modificare il corpo di risposta dei file CSS e se chiamo direttamente un URL è eseguito. Tuttavia, se una regola di urlrewrite è abbinata al filtro viene saltato.

Esempio: In 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>
.

C'è una mappatura imposta come questo in urlrewrite.xml:

<rule>
    <from>/styles-special/(.*)$</from>
    <to last="true">/styles/$1</to>
</rule>
.

(abbiamo bisogno di questo per una serie di motivi)

Allora, qualsiasi file * .csss il cui percorso avvia w / "/ stili-special speciale /" verrà riscritto su "/ stili /" e il cssfilter non verrà chiamato, ma qualsiasi file * .csss il cui percorso inizia w / "/ stili /" funzionerà attraverso il cssfilter come previsto.

Ho provato a cambiare il modello URL per CSSFilter in un numero di opzioni diverse, ma stesso risultato. Mi sembra che il filtro da urlrewrite del tucone

Qualche idea quale sia il problema qui? Questa funzionalità prevista è? Qualche soluzione alternativa? ... forse un intercettore o un controller è il modo di andare qui?

Grazie in anticipo per qualsiasi consiglio su questo !!


.

Nota: utilizzando quanto segue (come suggerito da Axtavt):

<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
.

Corregge il problema con la catenatura e il filtro è eseguito. Tuttavia, ottengo il seguente errore:

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)
.

here's code snippet dal filtro:

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
...
.

È stato utile?

Soluzione

When Tuckey UrlRewrite Filter rewrites a URL, it forwards request to the new URL instead of passing it down the filter chain. By default filters are not applied to the forwarded requests, so you need to configure it:

<filter-mapping>
     <filter-name>cssFilter</filter-name>
     <url-pattern>*css</url-pattern>
     <dispatcher>REQUEST</dispatcher>
     <dispatcher>FORWARD</dispatcher>
</filter-mapping>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top