Frage

Ich bin neu in Servlets und JSPs. Ich wollte wissen, was das beste Design für eine Probe Problem würde ich Code zu schreiben versuchen. Hier geht -

Ich möchte eine Website (www.example.com) erstellen, die nur die Login-Geschichte jeder Benutzerlisten (nicht functionility jeder will aber nur ein Beispiel aus Gründen der eins).

Es gibt also zwei URLs hier -. /Index.jsp und / login (Nehmen wir an, alle Registrierungen werden durchgeführt)

Die index.jsp zeigt alle letzten Anmeldungen für diesen Benutzer. Aber dafür muss ich feststellen, ob der Benutzer bereits angemeldet ist oder nicht ist. Wenn der Benutzer bereits angemeldet ist ich ihm seine Geschichte zeigen, was ich habe ihn auf die Login-Seite automatisch zu übermitteln.

Ich schrieb bereits ein benutzerdefinierten kryptographisch starken Plätzchen, die mir sagen, ob der Benutzer angemeldet ist oder nicht ist. Also, wenn das Cookie zu mir geschickt wird, kann ich überprüfen, ob er authentifiziert ist oder wenn das Cookie / session abgelaufen ist oder nicht. Das ist kein Problem.

Das Design Problem, das ich habe, ist dies - wie die Java-Klasse für die Authentifizierung genannt wird Überprüfung sollte? Muss ich verwenden, um benutzerdefinierte jsp Tags für diese Überprüfung und die Seite umgeschrieben? Ich möchte die Klasse einfach machen für meine HTML-Entwickler zu verwenden, wenn das Anlegen neuer Seiten. Was ist der beste Weg, dies zu tun?

Ich denke, meine Frage hat mehr mit der richtigen Verwendung von Java-Code in jsps und / oder kann benutzerdefinierte Tag-Bibliotheken zu tun. Bitte zögern Sie nicht auf eine so lange Tirade gehen, wie Sie wollen:)

Danke für das Lesen.

  • Vas
War es hilfreich?

Lösung

Sie können mit einem Filter für diese. Auf diese Weise können Sie den Code Logik an einem einzigen Ort, ohne die Notwendigkeit zu halten, um unnötig Copypaste den gleichen Code über alle JSP-Seiten und es hält auch JSP schön scriptlet -frei.

Statt die Sitzung neu zu erfinden, indem ein Cookie selbst erstellen, können Sie auch machen nur die Verwendung der Java EE bereitgestellt HttpSession API. Dies ist im Grunde schon durch ein Cookie gesichert und Sie können speichern Java-Objekte in der Sitzung als Attribute, so dass sie die gesamte Benutzersitzung zur Verfügung stehen.

Ein Login einfach das User Objekt in HttpSession:

User user = userDAO.find(username, password);
if (user != null) {
    request.getSession().setAttribute("user", user);
} else {
    // Show error.
}

Um zu überprüfen, ob ein Benutzer angemeldet ist, verwenden Sie einen Filter. Implementieren Sie die doFilter() Verfahren wie folgt:

if (((HttpServletRequest) request).getSession().getAttribute("user") != null) {
    chain.doFilter(request, response); // User is logged in, just continue with request.
} else {
    ((HttpServletResponse) response).sendRedirect("login"); // Not logged in, redirect to login page.
}

und wo es sich auf einem url-pattern wie /secured, /restricted, /users oder so. Legen Sie die zu-beschränkt JSP-Seiten im gleichen Ordner in webcontent auch.

Um einen Spieler abzumelden, nur entfernen Sie sie aus der Sitzung:

request.getSession().removeAttribute("user");

// Or, more drastically, invalidate the entire session:
request.getSession().invalidate();

Wie gesagt, Java EE bietet bereits deklarative (xml-config-basiert) Container Managed Security können Sie ein Tutorial über sie finden hier . Sie können davon Gebrauch machen, aber wenn Sie Ihre Anwendung abfangen indepentently auf die Anmeldungen durch den Behälter zum Beispiel verwaltet lassen wollen einen Überblick über die Login-Geschichte halten, dann müssen Sie noch eine Filter erstellen. Zum Beispiel:

HttpServletRequest httpRequest = (HttpServletRequest) request;
UserPrincipal user = httpRequest.getUserPrincipal();
HttpSession session = httpRequest.getSession();
if (user != null && session.getAttribute("user") == null) {
    session.setAttribute("user", user);

    // First-time login. You can do your intercepting thing here.
}
chain.doFilter(request, response);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top