Sesja w SpringBoot

Sesja w SpringBoot
K7
  • Rejestracja:ponad 5 lat
  • Ostatnio:prawie 5 lat
  • Postów:43
0

Cześć, w jaki sposob nalezy stworzyc licznik sesji ktory przekazywalby czas w headerze każdego z zapytań? Muszę stworzyć funkcjonalność która dodatkowo da informację o tym, ze sesja konczy sie na kilka minut wczesniej niz sam jej koniec( kojarzycie pewnie funkcjonalnosc, np. w apkach bankowych gdzie odliczany jest czas sesji ktory nam pozostal by trzeba bylo sie zalogowac kolejny raz). Mialby ktos podsunac jakis przyklad albo tutorial gdzie byloby fajnie wytlumaczone jak to zaimplementowac?

TY
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 2 lata
  • Postów:204
1

Timeout sesji resetuje się za każdym razem, gdy wyślesz żądanie. Zrób na frontencie licznik, który odlicza od danej wartości i resetuj go za każdym razem jak wyślesz żądanie. Nie trzeba robić nic na backendzie

No, chyba że nie resetujesz timeoutu po wysłaniu żądania i zawsze po np. 10min trzeba się zalogować ponownie mimo, że była jakaś aktywność

edytowany 1x, ostatnio: Tyvrel
K7
  • Rejestracja:ponad 5 lat
  • Ostatnio:prawie 5 lat
  • Postów:43
0

Mógłby ktoś jeszcze się wypowiedzieć ze swojego doświadczenia?

edytowany 1x, ostatnio: kiowa72
Shalom
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
1
  1. Najlepiej nie mieć żadnych sesji ;)
  2. Możesz sobie do kontrolera wrzucić argument HttpSession session i masz tam getCreationTime(), możesz sobie na tej podstawie pobierać z frontu informacje ile sesja jeszcze będzie żyć.

"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
edytowany 1x, ostatnio: Shalom
K7
  • Rejestracja:ponad 5 lat
  • Ostatnio:prawie 5 lat
  • Postów:43
0

@Shalom:

Kopiuj
	@GetMapping
	public UserShortModel getUserData( HttpSession httpSession ) throws ErrorException {
		Long time = httpSession.getCreationTime();
                if(time == 180000){   //trzy minuty
                    httpSession.invalidate(); 
                }
		
		Long userId = userService.getUserId(token);
		return userService.getUserData(userId);
	}
  1. ma ten kod prawo bytu?
  2. czy jeśli odpowiedź to TAK, to muszę w każdym controllerze ustawić taki sam warunek?
edytowany 1x, ostatnio: kiowa72
Shalom
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
1

Nie no to jest bez sensu przecież.

  1. getCreationTime zwraca ci epoch :D
  2. Jak chcesz mieć po prostu session expiry to ustaw jakieś property server.servlet.session.timeout i tyle
  3. Ten pomysł podałem na wypadek jak chcesz mieć endpoint który zwraca ci informacje o tym kiedy utworzono sesje, bo chciałeś wyświetlać jakiś timer.

"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
Zobacz pozostałe 2 komentarze
Shalom
To trochę hardkor jak sesja 60 sekund ale nie mnie oceniać...
K7
to tylko przykład :), to ustawienie jest globalne dla kazdego controllera/requesta?
Shalom
Tak.
K7
jak to można przetestować?
Shalom
Ustaw w properties testowych jakiś bardzo krótki czas, powiedzmy 5 sekund. W teście zaloguj usera, poczekaj te 5 sekund a potem sprawdź że go wylogowało... Nie wiem jaki jest sens w testowaniu springa, kiedy masz dośc własnego kodu do testowania, ale jak ktoś lubi...

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.