重定向到URL时会话到期

时间:2014-09-10 15:37:31

标签: java spring

当我尝试使用ModelAndView()调用URL时,我的会话已经结束,并且在加载视图时,会创建一个新会话,而不会保留任何我希望保留的数据。

     return new ModelAndView("redirect:http//.....)

移动到不同的控制器时,除了@SessionAttributes之外还有更好的方法来处理会话吗?

1 个答案:

答案 0 :(得分:0)

@SessionAttributes会话对象不应在控制器之间共享。以下是一些替代方案:

您可以将属性直接存储到HttpSession对象中。您可以通过将控制器方法添加到参数:

来获取HttpSession对象
public ModelAndView myControllerMethod(..., HttpSession session) {
  ...
  session.setAttribute("someAttribute", someValue);
  ...
}

您还可以自动装配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);
    }
}