J'ai l'obligation pour l'utilisateur final de ne pas pouvoir revenir à la page restreinte après la déconnexion / déconnexion. Mais actuellement, l'utilisateur final peut le faire par le bouton de retour du navigateur, en visitant l'historique du navigateur ou même en entrant à nouveau l'URL dans la barre d'adresse du navigateur.
Fondamentalement, je souhaite que l'utilisateur final ne puisse en aucun cas accéder à la page restreinte après la déconnexion. Comment puis-je y parvenir au mieux? Puis-je désactiver le bouton de retour avec JavaScript?
Réponses:
Vous pouvez et ne devez pas désactiver le bouton de retour ou l'historique du navigateur. C'est mauvais pour l'expérience utilisateur. Il existe des hacks JavaScript, mais ils ne sont pas fiables et ne fonctionneront pas non plus lorsque le client a désactivé JS.
Votre problème concret est que la page demandée est chargée depuis le cache du navigateur au lieu d'être directement depuis le serveur. Ceci est essentiellement inoffensif, mais en effet déroutant pour l'utilisateur final, car il / elle pense à tort que cela vient vraiment du serveur.
Il vous suffit d'indiquer au navigateur de ne pas mettre en cache toutes les pages JSP restreintes (et donc pas seulement la page / l'action de déconnexion elle-même!). De cette façon, le navigateur est obligé de demander la page au serveur plutôt qu'à partir du cache et donc toutes les vérifications de connexion sur le serveur seront exécutées. Vous pouvez le faire en utilisant un filtre qui définit les en- têtes de réponse nécessaires dans la
doFilter()
méthode:Mappez ceci
Filter
sur un pointurl-pattern
d'intérêt, par exemple*.jsp
.Ou si vous souhaitez mettre cette restriction sur les pages sécurisées uniquement, vous devez spécifier un modèle d'URL qui couvre toutes ces pages sécurisées. Par exemple, lorsqu'ils sont tous dans le dossier
/app
, vous devez spécifier le modèle d'URL de/app/*
.De plus, vous pouvez effectuer ce travail de la même manière
Filter
que lorsque vous vérifiez la présence de l'utilisateur connecté.N'oubliez pas de vider le cache du navigateur avant de tester! ;)
Voir également:
la source
doFilter()
méthode. Lorsque j'appuie sur le bouton de déconnexion, il est redirigé vers un servlet où j'invalide la session. Je ne sais pas comment ladoFilter()
méthode entre en jeu ici. Pouvez-vous me dire comment mettre en œuvre cela? Comme dans, les étapes correctes à suivre. Merci.sendRedirect(...)
etforward()
.* .jsp dans le modèle d'URL ne fonctionnera pas si vous transférez une page. Essayez également d'inclure votre servlet. Cela sécurisera votre application de ce problème de bouton de retour.
la source
Le moyen le plus simple de le faire sans désactiver le bouton de retour du navigateur consiste à ajouter ce code à l'
page_load
événement de la page sur laquelle vous ne souhaitez pas que l'utilisateur revienne après la déconnexion:la source
Vous pouvez essayer de dire au navigateur de ne pas mettre en cache la page d'accueil (en utilisant les en-têtes appropriés - Expire, Cache-Control, Pragma). Mais il n'est pas garanti que cela fonctionne. Ce que vous pouvez faire, c'est faire un appel ajax au serveur lors du chargement de la page pour vérifier si l'utilisateur est connecté, et sinon, rediriger.
la source
La bonne façon de procéder est d'ajouter le
en-tête sur les pages sécurisées. Lorsque l'utilisateur se déconnecte, effacez son cookie de session. Ensuite, lorsqu'ils reviennent après la déconnexion, le cache du navigateur manquera. Cela présente également l'avantage de ne pas vaincre complètement la mise en cache.
la source