2009-12-08 15 views
1

J'ai configuré un filtre pour désactiver le bouton de retour du navigateur et afficher l'utilisateur lorsque la session a expiré. Il fonctionne comme prévu quand je le configure dans mon prototype d'application mais quand je l'ai intégré à mon application (Spring MVC) ça ne marche pas.Le filtre du bouton Précédent ne fonctionne pas

J'ai configuré mon filtre comme celui-ci

<filter> 
    <filter-name>backButtonFilter</filter-name> 
    <filter-class> 
     com.filters.BackButtonFilter 
    </filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>backButtonFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

et j'avais le contenu de mon filtre comme celui-ci

response.setHeader("cache-control", "no-cache, no-store, must-revalidate"); 
response.setHeader("pragma", "no-cache"); 
response.setDateHeader("expires", 0); 
response.setHeader("Cache-Type", "private"); 

Je vous ai présenté la déclaration de journal pour voir si mon filtre est CHAISE ou non. Je peux le voir en train de l'exécuter.

Pourquoi cela se passe-t-il ainsi?

Répondre

2

Puis-je suggérer d'utiliser Firebug pour vérifier les en-têtes HTTP à la fin du navigateur? Cela devrait permettre de voir plus facilement pourquoi ils ne fonctionnent pas comme prévu.

EDIT Une chose à surveiller, assurez-vous que les en-têtes HTTP sont tous écrits avant le corps HTTP.

+0

Je ne suis pas au courant de bug de feu. Je vais essayer de suivre cette – Shiv

0

Essayez de configurer un intercepteur à l'intérieur Contexte Servlet comme ceci:

<!-- configuration for handling browser back button --> 
<mvc:interceptors> 
    <mvc:interceptor> 
     <mvc:mapping path="/**/*"/> 
     <beans:bean id="webContentInterceptor" class="org.springframework.web.servlet.mvc.WebContentInterceptor"> 
      <beans:property name="cacheSeconds" value="0"/> 
      <beans:property name="useExpiresHeader" value="true"/> 
      <beans:property name="useCacheControlHeader" value="true"/> 
      <beans:property name="useCacheControlNoStore" value="true"/> 
     </beans:bean> 
    </mvc:interceptor> 
</mvc:interceptors> 

Mais si la session est en direct ou non, il faut vérifier ou traitées dans votre vue (HTML ou JSP). Vous pouvez avoir les balises meta suivantes dans votre vue de dire non-cache et aucun magasin

<meta http-equiv="Cache-control" content="no-cache"> 

ou

<META HTTP-EQUIV="Cache-Control" CONTENT="No-Cache,Must-Revalidate,No-Store"> 

Si vous soumettez votre formulaire avec GET, l'utilisateur peuvent toujours aller au résultat écran en appuyant sur le bouton de retour.

Si vous utilisez POST, le navigateur indiquera que cela peut ne pas être possible.