Gdzie zapisywać najlepiej zalogowanego użytkownika?

Zalogowanego użytkownika można zapisać:

  • w klasie rozszerzającej UI jako pole, ale kiedy ktoś otworzy kolejną zakładkę z tym samym adresem to tworzy nam się nowa instancja UI, w której już nie mamy informacji o zalogowanym użytkowniku na innej karcie, ale przecież tej samej sesji, więc jest to złe rozwiązanie.

Wydaje się więc, że najlepiej zapisać taką informację w danych sesji. Nie wiem jednak gdzie zapisać najlepiej i jakie są różnice?:

this.getSession().getSession().setAttribute("loggedUser", user);
this.getSession().setAttribute("loggedUser", user);
this.getSession().getService().getCurrentRequest().setAttribute("loggedUser", user);
this.getSession().getService().getCurrentRequest().getWrappedSession().setAttribute("loggedUser", user);

W programie lubię zapisywać też w logach ID sesji, ale nie ma czegoś takiego jak:

this.getSession().getId();
Jest tylko:
this.getSession().getSession().getId();

Jest jeszcze kwestia “kasowania/zamykania” sesji i związanych z nią danych Dobrze przeczytałem, że jeżeli trzymamy coś w:
this.getSession().setAttribute(“loggedUser”, user);
To zamykamy: this.getSession().close();
A jeśli trzymamy dane tak: this.getSession().getSession().setAttribute(“loggedUser”, user); to zamykamy:
this.getSession().getSession().invalidate();

Mógłby ktoś krótko też opowiedzieć czym te wszystkie sposoby się różnią, kiedy jest tworzony dany typ sesji i czy ta sama sesja obejmuje otwarcie w innej karcie.

Ostatni mały niuans. Jak się orietnuję nie ma różnicy między:

this.getSession().getSession().setAttribute("loggedUser", user); a

this.getUI().getSession().getSession().setAttribute("loggedUser", user);

itd. dla pozostałych przkładów.

UI::getSession() zwraca obiekt klasy
VaadinSession
. VaadinSession to nie to samo co HttpSession, natomiast z poziomu VaadinSession można pobrać sesję HTTP za pomocą metody VaadinSession::getSession(). Więcej informacji na ten temat znajduje się w
Książce Vaadina w rodziale czwartym
.