如何在春季3结束会议

时间:2013-06-20 05:20:46

标签: spring spring-mvc

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

感谢。

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

1 个答案:

答案 0 :(得分:22)

我认为使用@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";
  }
}