如何在春季结束会话 3

2024-04-09

我在用@SessionAttributes在春天,但我不知道如何结束会话,我尝试了下面的代码,但出现错误,请给我一些例子。

Thanks.

@RequestMapping(value = "/LogoutAction")
public String logout(HttpServletRequest request) {
    Resource res = new ClassPathResource("spring-context.xml");
    BeanFactory factory = new XmlBeanFactory(res);
    HttpSession session = request.getSession();
    session.invalidate();
    return "Login";
}

我认为使用时常见的问题@SessionAttributes在您使当前会话无效之后,Spring MVC 将模型属性附加回新会话——因此给人一种它永远不会失效的印象

您可以在无效之前和之后检查 JSESSIONID 的值。您将获得一个全新的 JSESSIONID,但以前的模型属性会直接附加到新会话中

我发现自己必须这样做才能在使其无效后从会话中擦除名称为“counter”的模型属性

@RequestMapping(value="/invalidate", method=RequestMethod.POST)
public String invalidate(HttpSession session, Model model) {
  session.invalidate();
  if(model.containsAttribute("counter")) model.asMap().remove("counter");
  return "redirect:/counter";
}

如果你有很多属性,当然你可以尝试使用擦除所有内容

model.asMap().clear();

但在我看来,更好的方法是使用不具有以下功能的不同控制器来使其无效@SessionAttribute在上面。因此,其他控制器具有的任何模型属性都不会直接附加到新会话中。例如:

@Controller
@RequestMapping("/logout")
public class LogoutController {

  @RequestMapping(method=RequestMethod.POST)
  public String logout(HttpSession session) {
    session.invalidate();
    return "redirect:/login";
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在春季结束会话 3 的相关文章

随机推荐