kav*_*avi 10 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";
}
Run Code Online (Sandbox Code Playgroud)
ger*_*tan 23
我认为使用时的常见问题@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";
}
Run Code Online (Sandbox Code Playgroud)
如果你有足够的属性,那么你可以试着擦掉所有的东西
model.asMap().clear();
Run Code Online (Sandbox Code Playgroud)
但在我看来,更好的方法是使用不具有的不同控制器使其无效@SessionAttribute
.因此,其他控制器所具有的任何模型属性都不会直接附加到新会话中.例如:
@Controller
@RequestMapping("/logout")
public class LogoutController {
@RequestMapping(method=RequestMethod.POST)
public String logout(HttpSession session) {
session.invalidate();
return "redirect:/login";
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
27569 次 |
最近记录: |