繁体   English   中英

使用RequestDispatcher将请求从Servlet转发到JSP不会隐藏目标URL

[英]Forwarding a request from servlet to JSP using RequestDispatcher doesn't hide the target URL

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

我的设置如下:

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

从浏览器访问后,Servlet将预处理传入的GET请求,并使用以下代码片段将其转发到JSP:

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

对于浏览器而言,理想的行为是在用户看到JSP的内容时维护URL“ www.mydomain.com/pages/page1”。

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

谁能告诉我,这是什么原因造成的?

来源:此解决方案在此CodeRanch答案中进行了描述,在该解决方案中,它们成功地“隐藏”了JSP的地址: http : //www.coderanch.com/t/618800/JSP/java/Url-hiding

在对实现进行了一些深入研究之后,我得以找出导致此问题的原因。 确切的源代码太复杂了,无法在此处发布,实际上是无关紧要的。

该问题是由于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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM