Sitzung-Validierung-filter, die meldet den Benutzer ab, wenn die Sitzung abgelaufen ist
Habe ich eine session-Validierung, Filter, meldet den Benutzer ab, wenn die Sitzung abgelaufen ist.
Hier ist ein Stück code, aber dieser funktioniert nicht. Nicht arbeiten heißt, dies ist nicht die Umleitung auf die login-Seite, auch wenn die Sitzung abläuft.
Bitte helfen Sie mir dieses Problem zu beheben.
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletResponse res = (HttpServletResponse) response;
HttpServletRequest req = (HttpServletRequest) request;
HttpSession s = req.getSession(false);
if (s==null)
{
//redirect to login page with session expiry message
} else {
chain.doFilter(request, response);
}
}
haben Sie überprüft, sesion-id in der redirect-block? verändert es sich? Ist es möglich, dass Ihre soft - /framework-Aufrufe getSession(true) irgendwo?
InformationsquelleAutor Kiran | 2011-09-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das macht ehrlich gesagt keinen völligen Sinn. Wenn Sie beim speichern des angemeldeten Benutzers als Attribut der session und abzufangen, die "angemeldet" - status basierend auf der Anwesenheit des angemeldeten Benutzers in der session, dann brauchen Sie nicht manuell Abmelden der Benutzer, wenn die session abgelaufen ist. Wenn die Sitzung abgelaufen ist, werden alle seine attribtues bekommen sowieso verloren und damit der Benutzer wird "automatisch" abgemeldet.
Hier ist ein Beispiel, wie Sie login des Benutzers in die
doPost()
einer servlet, die aufgerufen wird, indem Sie einen BEITRAG Einreichen, der das login-Formular JSP.Sehen Sie, wenn der login gültig ist, wird der Benutzer gespeichert, die als session-Attribut. Der überrest der code kann nur überprüfen, ob er null ist oder nicht, um festzustellen, ob der Benutzer angemeldet ist. Wenn die Sitzung abläuft, wird es automatisch null.
Ich habe keine Ahnung, was du versuchst zu tun, die seit der ersten funktionalen Anforderung macht keinen Sinn. Es gibt jedoch zwei Allgemeine funktionale Anforderungen in Bezug auf den Ablauf der Sitzung und die login-Seite. Ich denke mal, dass du eigentlich müssen entweder einer von Ihnen:
"Wie kann ich die Umleitung der Besucher auf der login-Seite, wenn er fordert eine Seite, die nur eingeloggten Benutzern angezeigt werden?"
Müssen Sie erstellen eine filter und anzeigen es auf die (gemeinsame) URL-Muster auf der eingeschränkten Seite(N). In den filter, die nur überprüfen, ob der Benutzer vorhanden ist in der session und dann weiter die Kette, sonst redirect auf die login-Seite.
"Wie kann ich automatisch die Umleitung der aktuell geöffneten Seite auf die login-Seite, wenn die Sitzung abläuft?"
Verwenden Sie die
<meta>
refresh in Kombination mitHttpSession#getMaxInactiveInterval()
.Dadurch wird automatisch die Umleitung der aktuellen Seite, um die gegebenen
url
wenn die Sitzung abläuft. Die${pageContext.session.maxInactiveInterval}
Ausdruck wird inline der session-Verfall Zeit in Sekunden, die ist genau das, was diecontent
- Attribut muss.Anscheinend ist es gedruckt
0
.OK. Könnten Sie mich, wie ich automatisch umleiten, wenn die Sitzung abläuft ?
Super Antwort, aber nur aus Neugier, was ist der Grund, nicht mit getSession(false) für tracking-Sitzung. Es ist klar geschrieben, in die docs, die es gibt null zurück, wenn es keine vorhandenen Sitzung an die Anfrage an.
weil der container zu erstellen, trotzdem. Beachten Sie, dass die filter nicht tun, weil Sie nicht wollen, dass die container, um nicht unnötig die schaffen es sogar, wenn du nicht gehst zu verwenden es.
InformationsquelleAutor BalusC