can';t在会话中存储参数(Spring MVC)
基于注释的Spring MVC存在以下问题: 我有两个控制器(LoginController、AdminController),我可以通过在会话中持久化一个对象(类型为BonjourUser的loggedInUser),将它从LoginController传递给AdminController。到目前为止还不错 为了防止热链接,在初始“GET”时,AdminController会验证调用它时是否收到了有效的管理员用户。 这在第一次工作正常,因为loginController将对象添加到会话中 现在我的问题来了: 一旦管理员登录并尝试重新访问管理员页面(例如通过JSP中的链接),用户对象似乎已经从会话中消失,因为我得到了“loggedInUser”属性的HttpSessionRequiredException。 AFAIK除非我在会话上调用setComplete(),否则不应从会话中删除该对象。(我没有调用这个方法!)那么为什么要从会话中删除该属性呢?我了解到您无法在控制器之间传递会话属性。但据说这是可能的。我还认为它应该可以工作,因为当我从LoginController重定向到AdminController时,我已经在控制器之间传递了一个参数 下面是代码: 登录控制器:can';t在会话中存储参数(Spring MVC),spring,exception,spring-mvc,httpsession,required,Spring,Exception,Spring Mvc,Httpsession,Required,基于注释的Spring MVC存在以下问题: 我有两个控制器(LoginController、AdminController),我可以通过在会话中持久化一个对象(类型为BonjourUser的loggedInUser),将它从LoginController传递给AdminController。到目前为止还不错 为了防止热链接,在初始“GET”时,AdminController会验证调用它时是否收到了有效的管理员用户。 这在第一次工作正常,因为loginController将对象添加到会话中 现在
@Controller
@SessionAttributes("loggedInUser")
public class LoginController extends BonjourController
{
[...]
@RequestMapping(value = {"/home"}, method = RequestMethod.POST)
public String validate(@ModelAttribute(value = "command") BonjourUser user, ModelMap map, HttpSession session)
{
[...]
map.addAttribute("loggedInUser", loggedInUser);
[...]
return "redirect:/admin";
}
}
@Controller
@RequestMapping(value = "/admin")
@SessionAttributes("loggedInUser")
public class AdminController extends BonjourController
{
@RequestMapping(method = RequestMethod.GET)
public String loginAdmin(@ModelAttribute("loggedInUser") BonjourUser loggedInUser, ModelMap map, HttpSession session)
{
//check if access is authorized
if(loggedInUser == null)
{
return "redirect:/login";
}
[...]
}
}
和管理员控制器:
@Controller
@SessionAttributes("loggedInUser")
public class LoginController extends BonjourController
{
[...]
@RequestMapping(value = {"/home"}, method = RequestMethod.POST)
public String validate(@ModelAttribute(value = "command") BonjourUser user, ModelMap map, HttpSession session)
{
[...]
map.addAttribute("loggedInUser", loggedInUser);
[...]
return "redirect:/admin";
}
}
@Controller
@RequestMapping(value = "/admin")
@SessionAttributes("loggedInUser")
public class AdminController extends BonjourController
{
@RequestMapping(method = RequestMethod.GET)
public String loginAdmin(@ModelAttribute("loggedInUser") BonjourUser loggedInUser, ModelMap map, HttpSession session)
{
//check if access is authorized
if(loggedInUser == null)
{
return "redirect:/login";
}
[...]
}
}
我在管理员jsp中使用的链接(导致异常)如下所示
<a href="admin">Once more to admin section</a>
例外情况如下所示:
org.springframework.web.HttpSessionRequiredException: Expected session attribute 'loggedInUser'
那么,我需要做哪些更改以确保用户对象(loggedInUser)不会从会话中删除
提前感谢,
Maex将Spring更新到最新版本,它应该可以工作。请参阅对此答案的评论:我现在尝试了3种不同版本的spring: 3.1.1 3.2.2 3.2.3 总是一样的问题。调试器告诉我: 我从登录传递到管理员: 对象完全存储在会话->属性映射中 我使用链接或重新键入url再次访问同一页面:
会话->属性映射中不再有对象。我的坏-我阻止了Cookie 因此,除了POST请求外,会话没有机会被持久化,因此登录工作正常,但同一页面的GET没有