2017-04-12 57 views
0

我有一個簡單的控制器和一個攔截器。 在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「。我的模型正在發生什麼?

回答

0

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