看起来,当我尝试使用ModelAndView()调用URL时,会话结束,当视图加载时,会创建一个没有任何希望保留的数据的新会话。当重定向到URL时会话过期
return new ModelAndView("redirect:http//.....)
移动到不同的控制器时,除了@SessionAttributes还有更好的方式来处理会话吗?
看起来,当我尝试使用ModelAndView()调用URL时,会话结束,当视图加载时,会创建一个没有任何希望保留的数据的新会话。当重定向到URL时会话过期
return new ModelAndView("redirect:http//.....)
移动到不同的控制器时,除了@SessionAttributes还有更好的方式来处理会话吗?
@SessionAttributes
会话对象并不意味着在控制器之间共享。这里有一些替代方案:
您可以将属性直接存储到HttpSession对象中。
public ModelAndView myControllerMethod(..., HttpSession session) {
...
session.setAttribute("someAttribute", someValue);
...
}
您还可以自动装配HttpSession对象,然后用它在控制器方法:您可以将其添加到控制器的方法参数获得HttpSession对象
@Autowired
private HttpSession httpSession;
您可以创建一个会话作用域bean和注入该bean到需要它的控制器:
<bean id="mySessionDataBean" class="com.example.MySessionDataBeanImpl" scope="session">
<aop:scoped-proxy />
</bean>
然后在控制器使用它(MySessionDataBeanImpl实现SessionDataBean接口在本例中):
public class MyController {
....
@Autowired
SessionDataBean sessionDataBean;
@RequestMapping(...)
public ModelAndView controllerMethod(...) {
...
sessionDataBean.setSomeValue(someValue);
}
}
感谢您的咨询! – Sean 2014-09-10 19:22:39
会话是会话 - 除非它是HTTP v。HTTPS,在这种情况下,在某些服务器下,您需要指示两个协议应共享会话。你不提供太多的信息继续下去。 – 2014-09-10 15:41:12