Sesja w SpringBoot

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?

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ść

0

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

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ć.
0

@Shalom:

	@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?
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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1