Gewusst wie: speichern abgerufene Objekt in der session-und nachworte?
Ich versuche, erstellen Sie eine einfache login-Seite. Rufe ich eine User
Objekt aus meiner Datenbank über hibernate. Das Teil funktioniert gut, ich mache das wie folgt:
//data from login form
String username = request.getParameter("username").trim();
String password = request.getParameter("password").trim();
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
try {
User currentUser = (User) session.get(User.class, username);
if(password.equals(currentUser.getPassword())) {
response.sendRedirect("index.jsp?page=login&success=true");
} else {
session.getTransaction().rollback();
response.sendRedirect("index.jsp?page=login&success=false");
}
} catch //...
Gegeben, die richtigen Anmeldeinformationen, login erfolgreich ist. Wenn ich das richtig verstanden habe, meinen code oben schon speichert der Nutzer in der session, wenn der login erfolgreich war, so alles, was ich tun müssen, ist Zugriff auf die session?
Aber ich kann nicht herausfinden, wie Zugriff auf die abgerufenen User
- Objekt aus der session, an anderen stellen meiner Webseite. Nachdem der Benutzer angemeldet ist, möchte ich zeigen, Benutzer-spezifische Informationen auf meiner website und dafür muss ich zum überprüfen der Benutzername und ob der Benutzer angemeldet ist, auf alle.
Also zusammenfassend: Wie kann ich die abgerufene User
Objekt in anderen teilen meiner website?
Ich gerade angefangen zu lernen, Java EE und hibernate, also bitte Geduld mit mir.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kann man es mit einer HttpSession, die abgerufen werden können durch das HttpServletRequest-Objekt.
Nun zu prüfen, ob das user-Objekt vorhanden ist, in verschiedene Teile der Anwendung, können Sie Folgendes tun:
Logout eines Benutzers oder in anderen Worten, die Unwirksamkeit der Sitzung, können Sie rufen Sie die Methode invalidate.
Nützliche links: HttpServletRequest und HttpSession
HttpSession unterscheidet sich von der Hibernate-session. Die Hibernate-session bietet die Möglichkeit zum Abfragen und speichern von persistenten entities, die in einer Datenbank gespeichert. Die HttpSession wird von der servlet-container zu geben, einen Weg, um
Objekte speichern für einen bestimmten Benutzer basierend auf einem cookie in die Anfrage des Benutzers.
Was Sie store in der HttpSession sollte minimal sein, teilweise zu sparen auf overhead von Knoten im cluster der Vereinbarkeit Ihrer Sitzungen, sondern vor allem um Ihre Anwendung weniger fehleranfällig. Hier könnte es ausreichend sein, um den store eine Benutzer-ID in die session anstatt das ganze user-Objekt. Auch wenn das User-Objekt enthaltenen Rollen, es wäre besser, auf diejenigen, die sich für jede Anfrage, so dass alle änderungen sofort übernommen. Auch durch die Speicherung nur die ids, die Sie vermeiden Probleme mit dem anschließen Entitäten (so dass Sie vermeiden, eine der verwirrendsten und störenden Teile mit Hibernate). Wenn etwas anderes in Ihre Anwendung muss den Zugriff der Benutzer kann die Abfrage der Hibernate-session (mit
session.get(id)
) vorbei in die primary key-Wert gespeichert, in der HttpSession.Sollten Sie eine 1-way-hash zum speichern von Passwörtern, so dass wird sich ändern, wie Sie vergleichen Passwörter.
Sollte die Anwendung erstellen einer Hibernate-SessionFactory nur einmal bei der Initialisierung, es threadsicher ist und alles in der Anwendung werden soll, dass eine Instanz.
Rollback für eine Transaktion, bei der alles, was Sie tun, ist wählen Sie unnötig scheint.
In der Regel haben Sie Zugang zu der HttpSession nur aus der Sicht und den web-controller. Es sieht aus wie Sie haben web-controller-Logik und business-Logik in einen Topf geworfen, eine Aufgabenteilung zwischen Steuerung und service kann hier hilfreich sein.
Vorausgesetzt, Sie sind in eine Web-Anwendung, und Sie wollen etwas von der
User
Person, die Sie verbreiten sollten den gleichen Wert/Referenz auf das Web/controller-Schicht (im Fall, Sie sind mit einem MVC-Ansatz); dann halten Sie es, da es der geeignetste Ort, um zu speichern etwas über die HTTP-Sitzung, die von den meisten frameworks.EMPFEHLUNG(EN)
SessionFactory
sollte einmal instanziiert.Die Sitzung, die Sie hier erwähnt haben(org.hibernate.Sitzung) keinen Zugriff von anderen Orten in Ihrem web-site, anstatt Sie Ihre Benutzer-Objekt in ein HttpSession .