2017-04-12 6 views
0

하나의 컨트롤러와 하나의 인터셉터가 있습니다. postHandle-method의 인터셉터 내에서 사용자를 확인하고 있습니다. 문제점 : 컨트롤러 핸들 사이에 내 사용자 모델이 때때로 null 인 경우가 있습니다. 홈 핸들에 의해 호출Spring ModelAndView 속성이 null입니다.

  1. postHandle가 ==> 사용자 모델이 null이
  2. postHandle check_user 핸들에 의해 호출 ==>사용자 모델 redirectToErrorPage 핸들에 의해 호출 널
  3. postHandle는 = => 사용자 모델은 이 아니며 더 이상 null이 아니며 모든 내용이 포함되어 있습니다. check_user-PostHandle 호출.

    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"); 
          } 
        } 
    } 
    

    내가 PIN이 있지만, postHandle는 "check_user에 의해 호출 될 때 내 모델이있다 키 : 여기

내 컨트롤러

@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"; 
    } 

} 그리고 내 인터셉터입니다 ","totalTime "키가 하나뿐입니다. 내 모델은 어떻게됩니까?

답변

0

시도는 postHandle() 다음과 같이 수정 : ... @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { User user = (User) request.getSession().getAttribute("user"); ...