首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >转发到不属于当前httpRequest的HttpRequest

转发到不属于当前httpRequest的HttpRequest
EN

Stack Overflow用户
提问于 2016-08-06 21:13:41
回答 1查看 31关注 0票数 0

我正在制作一个使用Spring 4框架的Java。

当用户发出任何请求时,如果用户未登录,我将使用拦截器将该请求对象存储在用户的会话中。之后,我将用户重定向到登录屏幕。

当用户成功登录时,我希望登录控制器不返回模型和视图(例如主页),而是从会话中获取存储的先前请求,并“执行”它,就好像用户刚刚启动了该请求一样。

我在填写一些变量时遇到了一些问题:

代码语言:javascript
运行
复制
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; //???????????
}
  1. 当获得请求分配器时,您需要给它一个url。我使用了httpServletRequest.getServletPath(),但我不确定这是否正确。
  2. 转发时,您需要给出一个请求和响应对象。但此时我没有响应对象。我也可以像处理请求那样存储响应对象。或者还有别的办法吗?如果我提供当前的response对象而不是以前的响应对象,会发生什么情况?
  3. 我的方法希望我返回一个模型和视图,但是我没有任何模型和视图。我如何告诉Spring停止其正常的“模型和视图”方案,转而开始转发请求?
EN

回答 1

Stack Overflow用户

发布于 2016-08-11 16:54:00

上述设置在Jboss中是不可能实现的。您不能转发和传递任意请求对象,因为servlet容器将显示一个错误。转发方法用于转发容器开始处理的当前请求对象。

一种可能的策略,尽管仍然不理想,是将存储的请求与新传入的请求一起包装,并覆盖重要的方法(如getParameters()´ andgetAttribute())来使用存储的请求而不是实际的请求。这就是Spring安全解决这个问题的方法。

似乎不可能告诉servlet容器停止处理当前请求,并将其重定向或转发到您的servlet中恰好可用的任意请求对象。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38808764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档