我正在制作一个使用Spring 4框架的Java。
当用户发出任何请求时,如果用户未登录,我将使用拦截器将该请求对象存储在用户的会话中。之后,我将用户重定向到登录屏幕。
当用户成功登录时,我希望登录控制器不返回模型和视图(例如主页),而是从会话中获取存储的先前请求,并“执行”它,就好像用户刚刚启动了该请求一样。
我在填写一些变量时遇到了一些问题:
public ModelAndView login(RedirectAttributes redirectAttributes)
{
    ... //Do login stuff.
    HttpServletRequest previousRequest = (HttpServletRequest) httpServletRequest.getSession().getAttribute("previousRequest"); 
    httpServletRequest.getRequestDispatcher(previousRequest.getServletPath()).forward(previousRequest, ????????);
    //end of method, I must return a ModelAndView but I don't have any view, I just want the request to be forwarded??
    return null; //???????????
}发布于 2016-08-11 16:54:00
上述设置在Jboss中是不可能实现的。您不能转发和传递任意请求对象,因为servlet容器将显示一个错误。转发方法用于转发容器开始处理的当前请求对象。
一种可能的策略,尽管仍然不理想,是将存储的请求与新传入的请求一起包装,并覆盖重要的方法(如getParameters()´ andgetAttribute())来使用存储的请求而不是实际的请求。这就是Spring安全解决这个问题的方法。
似乎不可能告诉servlet容器停止处理当前请求,并将其重定向或转发到您的servlet中恰好可用的任意请求对象。
https://stackoverflow.com/questions/38808764
复制相似问题