Spring MVC会话属性访问
问题内容:
在Spring 3.0下,有什么方法可以访问HttpSession而不将其包括在方法签名中?我真正想做的是能够从HttpSession中传递可以为空的值。
像这样:
@RequestMapping("/myHomePage")
public ModelAndView show(UserSecurityContext ctx) {}
代替这个:
@RequestMapping("/myHomePage")
public ModelAndView show(HttpSession session) {
UserSecurityContext ctx = (UserSecurityContext) session.getAttribute("userSecurityCtx");
}
问题答案:
@SessionAttribute
@uthark提到的注释不适合此任务-
我认为也是,但有些阅读反而表明:
使用此批注指示的会话属性对应于特定处理程序的模型属性,并透明地存储在会话会话中。一旦处理程序指示其会话会话完成,这些属性将被删除。因此,将此功能用于这样的会话属性,这些属性应该在特定处理程序的会话过程中临时存储在会话中。
对于永久会话属性,例如用户身份验证对象,请改用传统的session.setAttribute方法。或者,考虑使用通用WebRequest接口的属性管理功能。
换句话说,@SessionAttribute
用于将会话MVC模型对象存储在会话中(与将它们存储为请求属性相反)。它不适用于任意会话属性。正如您所发现的,只有在session属性始终存在的情况下它才起作用。
我不知道还有其他选择,我认为您一直坚持 HttpSession.getAttribute()