2017-03-23 2 views
0

ich einen Filter gemacht haben zu ändern, die für das Hinzufügen von .do auf Anfragen zuständig ist, und ist das erste erklärt Filter:Filter & Request URL Auswirkungen auf bestehende Filter

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); 
    } 

Es gibt verschiedene andere Filter auch im Projekt deklariert web.xml Datei und ich notificing mit dem Debugger, dass sie nicht ausgeführt werden.

Die aktuelle Zuordnung für einen wichtigen Filter ist zum Beispiel:

ContentResponseCachingFilter * .do

Aber die anfängliche eingehende Anforderung keine .do in der URL, bis sie durch die BetaRewriteUrlFilter weitergegeben.

Wenn RequestDispatcher.forward aufgerufen wird, werden die Filter angewendet oder müssen wir sie manuell calieren oder stattdessen eine 302-Weiterleitung verwenden ???

Antwort

0

Was ich getan habe, war, diesen neuen Filter zuletzt in der web.xml-Definition zu platzieren.

Dieser Umschreibungsfilter musste als letzter in der Kette sein, da die Verwendung der request dispatcherforward Methode die Funktionalität nicht unterbricht oder den Betrieb der anderen Filter verhindert.