【问题标题】:Spring MVC Session AttributeSpring MVC 会话属性
【发布时间】:2017-12-18 19:06:19
【问题描述】:

您好,我的会话属性有问题

我有 2 个控制器类

头等舱(用户)

@Controller
@RequestMapping("users")
@SessionAttributes("activeuser")
public class UserController {

    ....

    @RequestMapping(value = "/login", method = RequestMethod.POST)
    public String  loginUser(HttpServletRequest request,Model model, @ModelAttribute("userlogininfo") User loginuser,
            BindingResult result, SessionStatus status) {
        User activeuser = userService.checkuserlogin(loginuser.getUsername(), loginuser.getPassword());

        if (activeuser!=null) {
            request.getSession().setAttribute("activeuser", activeuser);
            return "redirect:/home";
        } else
            return "redirect:/index";


    }

二等(银行)

@Controller
@RequestMapping("banka")
@SessionAttributes("activeuser")
public class BankController {
....
    @RequestMapping(value = "/save", method = RequestMethod.POST)
    public String saveBanka(HttpServletRequest request, @ModelAttribute("banka") Banka banka, BindingResult result,
            SessionStatus status) {

        User user = (User) request.getSession().getAttribute("activeuser");

        banka.setUser(user);
        bankService.insert(banka);
        return "redirect:/home";
    }


}

第二类是从"(User) request.getSession().getAttribute("activeuser")"返回空值

提前感谢您的帮助。

【问题讨论】:

  • 假设当 BankController 接收到 /save 方法时会话是否处于活动状态,您通常应该从会话中获取“activeuser”。要使用@SessionAttributes 中定义的属性,请尝试使用 public String saveBanka(...@ModelAttribute("activeuser") User user) 并且您应该获得会话属性
  • 确保你的会话对象是可序列化的。

标签: java spring model-view-controller


【解决方案1】:

将您的属性添加到模型(而不是 request.getSession().setAttribute("activeuser", activeuser);

model.addAttribute("activeuser", activeuser);

确保 activeuser 是可序列化的。

【讨论】:

  • OP 使用的是会话而不是请求。
  • 我相信redirect:前缀会生成一个302重定向http响应并且会创建session,所以将session属性放入redirected handler必须得到session属性。
  • @tsolakp 他正在从请求中获取会话request.getSession().setAttribute("activeuser", activeuser); 重定向后请求已死,无法生存。
  • 无所谓不同的请求可以给出相同的会话。这就是会话的重点:在请求之间保持相同(使用转发或重定向)。
  • 如果他直接从HttpSession获取就可以了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-18
  • 2013-08-15
  • 1970-01-01
  • 1970-01-01
  • 2017-09-14
  • 2017-07-08
  • 1970-01-01
相关资源
最近更新 更多