Ich habe die Anforderung, dass der Endbenutzer nach dem Abmelden / Abmelden nicht zur eingeschränkten Seite zurückkehren kann. Derzeit kann der Endbenutzer dies jedoch über die Schaltfläche "Zurück" des Browsers, den Browserverlauf oder sogar durch erneutes Eingeben der URL in die Adressleiste des Browsers tun.
Grundsätzlich möchte ich, dass der Endbenutzer nach dem Abmelden in keiner Weise auf die eingeschränkte Seite zugreifen kann. Wie kann ich das am besten erreichen? Kann ich die Zurück-Schaltfläche mit JavaScript deaktivieren?
Antworten:
Sie können und sollten die Zurück-Schaltfläche oder den Verlauf des Browsers nicht deaktivieren. Das ist schlecht für die Benutzererfahrung. Es gibt JavaScript-Hacks, aber sie sind nicht zuverlässig und funktionieren auch nicht, wenn auf dem Client JS deaktiviert ist.
Ihr konkretes Problem ist, dass die angeforderte Seite nicht direkt vom Server, sondern aus dem Browser-Cache geladen wurde. Dies ist im Wesentlichen harmlos, aber für den Endbenutzer in der Tat verwirrend, da er fälschlicherweise denkt, dass es wirklich vom Server kommt.
Sie müssen nur den Browser anweisen, nicht alle eingeschränkten JSP-Seiten (und damit nicht nur die Abmeldeseite / Aktion selbst!) Zwischenzuspeichern . Auf diese Weise wird der Browser gezwungen, die Seite vom Server anstatt vom Cache anzufordern, und daher werden alle Anmeldeprüfungen auf dem Server ausgeführt. Sie können dies mit einem Filter tun, der die erforderlichen Antwortheader in der
doFilter()
Methode festlegt :Ordnen Sie dies beispielsweise
Filter
einemurl-pattern
von Interesse zu*.jsp
.Wenn Sie diese Einschränkung nur für gesicherte Seiten festlegen möchten, sollten Sie ein URL-Muster angeben, das alle diese gesicherten Seiten abdeckt. Wenn sich beispielsweise alle im Ordner befinden
/app
, müssen Sie das URL-Muster von angeben/app/*
.Darüber hinaus können Sie diesen Job genauso
Filter
ausführen, wie Sie die Anwesenheit des angemeldeten Benutzers überprüfen.Vergessen Sie nicht, den Browser-Cache vor dem Testen zu leeren! ;)
Siehe auch:
quelle
doFilter()
Methode zu überschreiben . Wenn ich die Abmeldetaste drücke, wird sie zu einem Servlet umgeleitet, in dem ich die Sitzung ungültig mache. Ich bin mir nicht sicher, wie diedoFilter()
Methode hier ins Spiel kommt. Können Sie mir bitte sagen, wie ich das umsetzen soll? Wie in, die richtigen Schritte zu befolgen. Vielen Dank.sendRedirect(...)
undforward()
.* .jsp im URL-Muster funktioniert nicht, wenn Sie eine Seite weiterleiten. Versuchen Sie auch, Ihr Servlet einzuschließen. Dadurch wird Ihre Anwendung vor diesem Problem mit der Zurück-Schaltfläche geschützt.
quelle
Der einfachste Weg, dies zu tun, ohne die Zurück-Schaltfläche des Browsers zu deaktivieren, besteht darin, diesen Code dem
page_load
Ereignis für die Seite hinzuzufügen, zu der der Benutzer nach dem Abmelden nicht zurückkehren soll:quelle
Sie können versuchen, den Browser anzuweisen, die Homepage nicht zwischenzuspeichern (mithilfe der entsprechenden Überschriften - Expires, Cache-Control, Pragma). Es ist jedoch nicht garantiert, dass es funktioniert. Sie können beim Laden der Seite einen Ajax-Aufruf an den Server senden, um zu überprüfen, ob der Benutzer angemeldet ist, und wenn nicht, umleiten.
quelle
Der richtige Weg, dies zu tun, ist das Hinzufügen der
Header auf gesicherten Seiten. Wenn sich der Benutzer abmeldet, löschen Sie sein Sitzungscookie. Wenn sie nach dem Abmelden zurück navigieren, fehlt der Browser-Cache. Dies hat auch den Vorteil, dass das Caching nicht vollständig besiegt wird.
quelle