【问题标题】:Can i make a Java Servlet unaccessible from outside?我可以使 Java Servlet 无法从外部访问吗?
【发布时间】:2021-06-26 10:16:27
【问题描述】:

类似于this question,但我希望常规 servlet 只能通过 RequestDispatcher 访问。

例如,我有一个映射到/hiddenUrl 的servlet。这应该发生:

//forwards successfully
request.getRequestDispatcher(contextPath + "/hiddenUrl").forward(request,response);

//404 not found
response.sendRedirect(contextPath + "/hiddenUrl")  

就像在WEB-INF 目录中移动的JSP 一样。有可能吗?

【问题讨论】:

  • 抱歉,这看起来像 XY problem。你能解释一下你想要实现什么(这项技术并不新鲜,其他人可能已经有了更简单的解决方案来解决你的真正问题)?
  • @Pshemo 我在 中包含了一个部分,但现在我需要在显示部分之前执行一些数据检索。这意味着现在我需要执行 这会将我发送到返回 mypartial.jsp 的 servlet。但我不希望从外部访问“/urlPatternToServlet”。没有XY问题,我只是想知道这是否可能。
  • 您是否尝试将 servlet 绑定到 /WEB-INF/urlPatternToServlet
  • @PiotrP.Karwasz 我真的确信这样的映射不会起作用,并且 localhost:8080/myapp/WEB-INF/urlPatternToServlet 仍然可以访问。相反,这不是真的! servlet 现在不能直接访问。感谢您的帮助(为什么不将其作为实际答案?)

标签: java tomcat servlets jakarta-ee


【解决方案1】:

servlet 容器永远不会直接处理以/META-INF//WEB-INF/ 开头的请求(请参阅chapter 10.5 of the specification):

应用程序层次结构中存在一个名为 WEB-INF 的特殊目录。此目录包含与应用程序相关但不在应用程序文档根目录中的所有内容。大多数 WEB-INF 节点不是应用程序的公共文档树的一部分。除了静态资源和封装在 WEB-INF/lib 目录下的 JAR 文件的 META-INF/resources 中的 JSP 之外,WEB-INF 目录中包含的其他文件不能由容器直接提供给客户端。

因此,映射到/WEB-INF/something 的 servlet 将对其他 servlet 和 JSP 可见,但对用户不直接可见。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-28
    • 1970-01-01
    • 1970-01-01
    • 2016-09-21
    • 2019-02-25
    • 2013-12-22
    • 2011-02-02
    相关资源
    最近更新 更多