2010-09-25 5 views
0

Le filtre de servlet suivant est appelé, mais ne peut pas donner la réponse correcte. Je viens de boucler à l'intérieur du filtre lui-même. Le navigateur dit,Comment obtenir une réponse de ce filtre?

The page isn't redirecting properly 
Firefox has detected that the server is redirecting the request for this address in a way that will never complete. 

ExpenseAuthenticationFilter.class

public class ExpenseAuthenticationFilter implements Filter { 
public ExpenseAuthenticationFilter() { 
    // TODO Auto-generated constructor stub 
} 

public void destroy() { 
    // TODO Auto-generated method stub 
} 

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 

    try 
    { 
     HttpSession session = ((HttpServletRequest)request).getSession(false); 

     if (session == null){ 
      System.out.println("Inside login Filter"); 
      ((HttpServletResponse) response).sendRedirect("ExpenseManagementLogin.html"); 
     } 
    } 
    catch (IllegalStateException ise){ 
     System.out.println("Session Not Yet Created"); 
    } 

    chain.doFilter(request, response); 
} 
public void init(FilterConfig fConfig) throws ServletException { 
    // TODO Auto-generated method stub 
} 

} 

ExpenseAuthentication.class

public class ExpenseAuthentication implements Filter { 
public ExpenseAuthentication() { 
    // TODO Auto-generated constructor stub 
} 

public void destroy() { 
    // TODO Auto-generated method stub 
} 

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException, IllegalStateException{ 
    try 
    { 
     HttpSession session = ((HttpServletRequest) request).getSession(false); 
     if (session == null){ 
      System.out.println("Management Filter"); 
      ((HttpServletResponse) response).sendRedirect("ExpenseManagementLogin.html"); 
     } 

    } 
    catch (IllegalStateException ise){ 
     System.out.println("Session Not Yet Created"); 
    } 
    chain.doFilter(request, response); 
} 
public void init(FilterConfig fConfig) throws ServletException { 
    // TODO Auto-generated method stub 
} 

} 

Le Web.xml

<filter> 
    <filter-name>ExpenseAuthentication</filter-name> 
    <filter-class>com.pricar.hibernate.ExpenseAuthentication</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>ExpenseAuthentication</filter-name> 
    <url-pattern>*/ExpenseDetailsManagement.html</url-pattern> 
</filter-mapping> 
<filter-mapping> 
    <filter-name>ExpenseAuthenticationFilter</filter-name> 
    <url-pattern>*/ExpenseManagementLogin.html</url-pattern> 
</filter-mapping> 

La console Log pour "http: // localhost: 8080/Hibernate/ExpenseDetailsManagement.html" est

Inside login Filter 
Inside login Filter 
Inside login Filter 
Inside login Filter 
Inside login Filter 
Inside login Filter 
Inside login Filter 
Inside login Filter 
Inside login Filter 
Inside login Filter 
Inside login Filter 
Inside login Filter 
Inside login Filter 
Inside login Filter 
Inside login Filter 
Inside login Filter 
Inside login Filter 
Inside login Filter 

Sa va pas vraiment dans ExpenseAuthentication.class, mais il va à ExpenseAuthenticationFilter .class et boucles à l'intérieur de celui-ci.

Toutes les suggestions !!

Merci!

Répondre

3

Lorsque vous faites ceci:

((HttpServletResponse) response).sendRedirect("ExpenseManagementLogin.html"); 

que vous envoyez droit à l'utilisateur de la page « ExpenseManagementLogin.html » qui est filtré avec ExpenseAuthenticationFilter.

Voici votre boucle infinie.

Tant que l'utilisateur n'a pas de session, il boucle. Et comme le filtre est en boucle sur lui-même, il n'y aura pas de session.
Même chose avec votre deuxième filtre. Si un filtre fait un sendRedirect à un chemin qui doit être filtré par lui-même. A moins d'avoir quelques contrôles (ici une création de session), vous aurez une boucle infinie.

Comme ce filtre ne fonctionne que sur "ExpenseManagementLogin.html", pourquoi faites-vous cette redirection?

Questions connexes