하나의 컨트롤러와 하나의 인터셉터가 있습니다. postHandle-method의 인터셉터 내에서 사용자를 확인하고 있습니다. 문제점 : 컨트롤러 핸들 사이에 내 사용자 모델이 때때로 null 인 경우가 있습니다. 홈 핸들에 의해 호출Spring ModelAndView 속성이 null입니다.
- postHandle가 ==> 사용자 모델이 null이
- postHandle check_user 핸들에 의해 호출 ==>사용자 모델 redirectToErrorPage 핸들에 의해 호출 널
- 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 "키가 하나뿐입니다. 내 모델은 어떻게됩니까?