0

Mon application Web est une application purement JS avec un carrefour js pour le routage. Pour la connexion j'utilise j_security_check FORME Auth et/LogOut servlet pour invalider la session.Java: la vérification du filtre de délai d'attente HttpSession renvoie un objet de session valide

Numéro 1 La vraie question vient quand la session a expiré, la login.html est rendue en partie de la page sans css, avec l'erreur « ressource interprétée comme feuille de style, mais transféré avec le texte de type MIME/html "

Lors de l'utilisation filtre

<filter> 
    <description>Session Timeout Filter</description> 
    <filter-name>SessionTimeoutFilter</filter-name> 
    <filter-class>filters.SessionTimeoutFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>SessionTimeoutFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 
.... 
<session-config> 
    <session-timeout>1</session-timeout> 
</session-config> 

et le code Java

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

    HttpServletRequest req = null; 
    HttpSession session = null; 
    try { 
     req = (HttpServletRequest) request; 
     session = req.getSession(false); 
     if (session != null && !session.isNew()){ 
      LOGGER.log("Session is Valid"); 
      chain.doFilter(request, response); 
     }else{ 
      LOGGER.log("Session is Invalid"); 
      req.getRequestDispatcher("/login.html?loggedOut=true").forward(request, response); 
     }    
    } catch (Throwable t) { 

    } 

} 

Édition 2 Lorsque le filtre s'exécute après disons 2-3 minutes, il imprime "Session is Valid". Pourquoi est-ce vrai?

Répondre

0

Numéro 1:

Lorsque la session est invalide, le filtre intercepte les demandes et à l'avant login.html. login.html inclut un fichier CSS. Ainsi, le navigateur envoie une requête HTTP pour le fichier CSS. Mais le filtre est mappé sur /*. Il intercepte donc toutes les requêtes, y compris celle envoyée par le navigateur pour le fichier CSS. Et puisque la session est toujours invalide, le navigateur transmet la requête, supposée envoyer un fichier CSS, à login.html.

Numéro 2:

Je ne sais pas. Peut-être votre serveur utilise-t-il un thread de fond nettoyant des sessions expirées toutes les quelques minutes, et il n'a pas encore été exécuté, même si votre délai d'attente très court s'est écoulé. Ou peut-être que le navigateur envoie des requêtes en arrière-plan qui maintiennent la session active.

+0

Pour le numéro 1, j'ai inclus une vérification dans le filtre pour continuer à filtrer si la demande est pour la connexion HTML et CSS. Même dans ce cas, le problème persiste. –