Spring MVC: как удалить атрибут сессии?
Пример использования @SessionAttributes
ниже. Как очистить user
Атрибут сеанса после мастера завершен? В моем примере после возвращения к /wizard0
Атрибут сеанса все еще существует. я пробовал status.setComplete()
а также session.removeAttribute("user")
но это не работает
@Controller
@SessionAttributes("user")
public class UserWizard {
@RequestMapping(value = "/wizard0", method = RequestMethod.GET)
public String page1(Model model) {
if(!model.containsAttribute("user")) {
model.addAttribute("user", new User());
}
return "wizard/page1";
}
@RequestMapping(value = "/wizard1", method = RequestMethod.GET)
public String page2(@ModelAttribute User user) {
user.setFirstname(Utils.randomString());
return "wizard/page2";
}
@RequestMapping(value = "/wizard2", method = RequestMethod.GET)
public String page3(@ModelAttribute User user) {
user.setLastname(Utils.randomString());
return "wizard/page3";
}
@RequestMapping(value = "/finish", method = RequestMethod.GET)
public String page4(@ModelAttribute User user, HttpSession session, SessionStatus status) {
/**
* store User ...
*/
status.setComplete();
session.removeAttribute("user");
return "redirect:/home";
}
}
РЕДАКТИРОВАТЬ
Виноват. status.setComplete();
хорошо работает session.removeAttribute("user")
здесь нечего делать
1 ответ
Попробуй использовать WebRequest.removeAttribute
метод вместо HttpSession.setAttribute
метод (пример 1). Или другой способ, который делает то же самое, вы можете использовать 'SessionAttributeStore.cleanupAttribute' (пример 2).
Пример 1
@RequestMapping(value = "/finish", method = RequestMethod.GET)
public String page4(@ModelAttribute User user, WebRequest request, SessionStatus status) {
/**
* store User ...
*/
status.setComplete();
request.removeAttribute("user", WebRequest.SCOPE_SESSION);
return "redirect:/home";
}
Пример 2
@RequestMapping(value = "/finish", method = RequestMethod.GET)
public String page4(@ModelAttribute User user, WebRequest request, SessionAttributeStore store, SessionStatus status) {
/**
* store User ...
*/
status.setComplete();
store.cleanupAttribute(request, "user");
return "redirect:/home";
}
Ниже работал у меня -
@RequestMapping(value = "/finish", method = RequestMethod.GET)
public String page4(HttpSession httpsession, SessionStatus status) {
/*Mark the current handler's session processing as complete, allowing for cleanup of
session attributes.*/
status.setComplete();
/* Invalidates this session then unbinds any objects boundto it. */
httpsession.invalidate();
return "redirect:/home";
}