打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Tomcat源码分析之 doGet方法(四)

1 目标

本次源码分析目标了解客户端请求在StandardContextValve 中做了哪些工作。

2 分析方法

根据第一讲的堆栈信息,结合 Intellij Idea 的堆栈视图、断点、单步调试等手段分析源码。

10. atorg.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)

3 分析流程

从上图我们可以看到,客户端请求在到达过滤器之前,会经历一系列的 Valve,本讲我们重点分析 StandardContextValve

invoke()方法主要做的工作有:

1) 检查请求路径的前缀是不是'/META-INF/','/WEB-INF/'开始,或者请求就是上面'/META-INF', '/WEB-INF',则禁止访问。

// Disallow any direct access to resources under WEB-INF orMETA-INF
MessageBytesrequestPathMB = request.getRequestPathMB();
if ((requestPathMB.startsWithIgnoreCase("/META-INF/", 0))
        ||(requestPathMB.equalsIgnoreCase(
"/META-INF"))
        ||(requestPathMB.startsWithIgnoreCase(
"/WEB-INF/", 0))
        ||(requestPathMB.equalsIgnoreCase(
"/WEB-INF"))) {
   response.sendError(HttpServletResponse.
SC_NOT_FOUND);
   
return;
}

2) request 对象中获得 StandardWrapperValve,并调用其 invoke()方法,开始进入到下一个 Valve 处理。

Wrapperwrapper = request.getWrapper();

wrapper.getPipeline().getFirst().invoke(request, response);

4 总结 

本讲重点了 StandardContextValve 组件,当请求到达该组件时,首先检查请求的路径信息,禁止以'/META-INF/','/WEB-INF/'为前缀的一些请求,从而保证服务器的安全,其次获得下一个组件 StandardWrapperValve,并调用其 invoke 方法。

在刚开始学习 JavaWeb的时候,我们就知道/WEB-INF/文件夹的文件是不能够直接访问的,禁止访问的。以前我们只是知道这个知识点,但是不明白为什么会这样。本讲我们从 Tomcat 源码的角度为大家分析了原因。

下一讲我们将分析 StandardHostValve 组件。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Tapestry3.0警告: Exception during post-request cleanup
Roller4.0.1源码编译安装
在JBoss下开发、部署EJB
Android多渠道打包这样做才酸爽!? | Geekwolf's Blog
关于不重启Tomcat自动加载改变的class文件
GeoServer2.17与Jetty9在Windows上的最佳安装实践
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服