Spring ModelAndView属性为null

Spring ModelAndView属性为null

问题描述:

我有一个简单的控制器和一个拦截器。 在postHandle-method中的拦截器中,我正在检查用户。 问题:我的用户模型有时在控制器句柄之间为空。Spring ModelAndView属性为null

  1. 的postHandle由家庭手柄调用==>用户模型不为空
  2. 的postHandle通过check_user手柄调用==>用户模型是空
  3. 的postHandle通过redirectToErrorPage手柄调用= =>用户模型是 不再null,并包含所有内容,我期望通过 check_user-PostHandle调用。

这里是我的控制器

@Controller 
    @SessionAttributes("user") 
    public class HomeController { 

    @RequestMapping(value = "/", method = RequestMethod.GET) 
     public ModelAndView home(Model model, HttpServletRequest request, HttpSession session) { 

      User user = new User(); 
      return new ModelAndView("login", "user", user); 
      ////now User-Model was saved in the session 
     } 


     //now i'am redirectring user in the "check_user"-handle 
     @RequestMapping(value = "/check_user", method = RequestMethod.POST) 
     public ModelAndView checkUser(@Valid @ModelAttribute("user") User user, BindingResult bindingResult, Model model, 
       HttpServletRequest request, RedirectAttributes redirectAttr) { 
      RedirectView redirectView = null; 
      ModelAndView mav=null; 
      try {  
       if(!bindingResult.hasErrors()){ 
        redirectView = new RedirectView("home"); 
        redirectView.setStatusCode(HttpStatus.FOUND); 
        redirectAttr.addFlashAttribute("httpStatus", HttpStatus.FOUND); 
        mav = new ModelAndView(redirectView); 
        return mav; //at next i entry post-handle from interceptor, 
           //which says to me, that user-model is null. 

       } 
     } 
//My interceptor redirects me to this handle. 
//After this handle within interceptor method "postHandle", i see, that 
//user-object exists 
@RequestMapping(value = "/error", method = RequestMethod.GET) 
    public String redirectToErrorPage(HttpServletRequest request){ 

     return "error"; 
    } 

}

我的拦截器:

public class UserInterceptor extends HandlerInterceptorAdapter { 

    @Override 
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, 
      ModelAndView modelAndView) throws Exception { 
      User user = (User) modelAndView.getModel().get("user"); 
      if(user == null || !user.isAdmin()){ 
       response.sendRedirect(request.getContextPath()+"/failed"); 
      } 
    } 
} 

虽然我retrive,我的模型有哪些键,当的postHandle被“check_user调用“,我只有一个键”totalTime“。我的模型正在发生什么?

尝试修改您的postHandle()如下: ... @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { User user = (User) request.getSession().getAttribute("user"); ...