2017-03-23 3 views
0

j'ai fait un filtre qui est responsable de l'ajout .do aux demandes et est le premier filtre a déclaré:Filtre & RequestDispatcher pour modifier l'effet d'URL sur les filtres existants

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

Il existe d'autres différents filtres également déclarés dans le projet web.xml et je notifie avec le débogueur qu'ils ne sont pas en cours d'exécution.

La cartographie actuelle pour un filtre important est par exemple:

ContentResponseCachingFilter * .do

Mais la requête entrante initiale ne comprend pas .do dans le URl jusqu'à ce qu'elle passe à travers le BetaRewriteUrlFilter. Lorsque RequestDispatcher.forward est appelé, les filtres sont-ils appliqués ou faut-il les caler manuellement ou utiliser à la place une redirection 302 ???

Répondre

0

Ce que j'ai fini par faire était de placer ce nouveau filtre en dernier dans la définition web.xml.

Ce filtre de réécriture devait être le dernier sur la chaîne, car l'utilisation de la méthode request dispatcherforward ne romprait pas la fonctionnalité ni n'empêcherait le fonctionnement des autres filtres.