0

I have one simple controller and one interceptor.
Within interceptor in postHandle-method I am checking user.
Problem: My user-model is sometimes null, between controller-handles.

  1. postHandle invoked by home-handle==> User-Model is not null
  2. postHandle invoked by check_user-handle ==> User-model is null
  3. postHandle invoked by redirectToErrorPage-handle ==> User-model is not null anymore and contains everything, what i've expected by check_user-PostHandle Invocation.

Here is my controller

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

And my Interceptor:

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

While I retrive, which keys my model has, when postHandle was invoked by "check_user", I have only one key "totalTime". Whats going on with my model?

vinS
  • 1,417
  • 5
  • 24
  • 37
Roma Kap
  • 517
  • 1
  • 8
  • 23

1 Answers1

0

Try modifying your postHandle() as below:

...
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    User user = (User) request.getSession().getAttribute("user");
...