Witam,
W kontrolerze mam metodę, w której zapisuje obiekt do sesji.
@PostMapping("/ofertaBanku")
public String displayBankOffer(Model model, @ModelAttribute("client") Client client, BindingResult bindingResult,
HttpSession session) {
if (bindingResult.hasErrors()) return BANK;
long clientNumber = client.getClientNumber();
Client user = userService.getClient(clientNumber);
session.setAttribute("user", user);
model.addAttribute("clientNumber", clientNumber);
model.addAttribute("firstLogin", userService.checkFirstLogin(user));
return BANK_OFFER;
}
W innych metodach potrzebuje pobrać ten obiekt z sesji.
@GetMapping("/mojeKonto")
public String displayBankAccounts(Model model, @SessionAttribute("user") Client user, RedirectAttributes
attributes) {
setAccounts(model, user);
model.addAttribute("creationDate", user.getCreationDate());
model.addAttribute("clientNumber", user.getClientNumber());
return MY_ACCOUNT;
}
I to działa. Ale oprócz tego potrzebuję ustawić czas trwania sesji.
W pliku properties dodałem wpis.
server.session.timeout=60
Po tym jak minie czas sesji i program przejdzie do wybranej metody odczytującej obiekt z sesji, wyrzuca błąd.
Missing session attribute 'user' of type Client
W jaki sposób sprawdzić czy sesja wygasła przed wywołaniem danej metody ?
Wiem, że można to zrobić np. w taki sposób: https://stackoverflow.com/questions/1026846/how-to-redirect-to-login-page-when-session-is-expired-in-java-web-application ale szukam jeszcze innych alternatyw.
Edit: Rozwiązałem - inną alternatywą jest dopisanie w adnotacji parametru required, który poprzez ustawienie na false pozwoli nam przechwycić obiekt kiedy jest nullem. Wtedy sesja wygasła.
@SessionAttribute(value = "user", required = false)