【问题标题】:Forwarding a request from servlet to JSP using RequestDispatcher doesn't hide the target URL使用 RequestDispatcher 将请求从 servlet 转发到 JSP 不会隐藏目标 URL
【发布时间】:2016-03-28 04:25:06
【问题描述】:

简而言之,我有一个将 GET 请求转发到 JSP 的 servlet,我想对用户“隐藏”目标 URL。

我的设置如下:

  1. 一个 servlet,映射到 URL“www.mydomain.com/pages/page1”
  2. 一个 JSP,地址为“/WEB-INF/pages/page1.jsp”,相对于应用程序根目录。 JSP 位于 WEB-INF 目录中,以便不能直接从浏览器访问。

在从浏览器访问时,servlet 预处理传入的 GET 请求,并使用以下 code-sn-p 将其转发给 JSP:

request.getRequestDispatcher("/WEB-INF/pages/page1.jsp").forward(request, response);

所需的行为是浏览器维护 URL“www.mydomain.com/pages/page1”,而用户看到 JSP 的内容。

不幸的是,浏览器一直切换到显示 JSP 的 URL:“www.mydomain.com/WEB-INF/pages/page1.jsp”(在 Chrome 和 Firefox 中测试)

谁能告诉我,是什么导致了这种行为?

来源: 此 CodeRanch 答案中描述了此解决方案,其中他们成功地将地址“隐藏”到 JSP:http://www.coderanch.com/t/618800/JSP/java/Url-hiding

【问题讨论】:

  • 这应该可以正常工作。你能发送你的servlet的完整的doGet()方法和web.xml中的servlet-mapping吗?
  • @W-S,感谢您确认您也希望这可以正常工作。这启发了我进行一些调试,并找到问题的牵强附会的原因。请参阅下面的答案。

标签: java jsp servlets forward requestdispatcher


【解决方案1】:

在对我的实现进行了广泛的探索之后,我能够找出导致此问题的原因。确切的源代码过于复杂,无法在此处发布,实际上是无关紧要的。

问题是由这段晦涩的 Javascript 代码引起的,它通过一个 scriptlet 从一个单独的实用程序类中拉入 JSP(过时的做法)。

<script type='text/javascript'>
  window.history.replaceState(null, document.title, sanitizedURL);
</script>

由于遗留原因,页面 URL 正在通过删除其查询字符串的一部分进行“清理”,然后发生“替换窗口历史记录的状态”。我不确定这是否符合重新加载页面的条件,但不想要的副作用是实际资源 URL “www.mydomain.com/WEB-INF/pages/page1.jsp”的表面化

底线:如果您遇到类似问题,请尝试查找与窗口/文档状态混淆的 Javascript

【讨论】:

    猜你喜欢
    • 2014-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-23
    相关资源
    最近更新 更多