温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何分析WEB-INF目录

发布时间:2022-01-17 18:46:51 来源:亿速云 阅读:169 作者:柒染 栏目:大数据

如何分析WEB-INF目录,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

Tomcat做为一个Web Container,最大的功能就是解析部署的WEB应用并给用户响应。

常见的WEB应用,也称为WAR文件

其中WEB-INF这个目录比较特殊,做为WEB应用的安全目录存在。Servlet规范是对此也有要求:

A special directory exists within the application hierarchy named “WEB-INF”.

This directory contains all things related to the application that aren’t in the document root of the application.

即所有与应用相关的,但又不能放到根目录下的文件可以放在这里。

包含的内容大致有以下几类:

  • web.xml

  • 对于servlet 3.0,支持其web-fragment.xml的声明。

  • classes目录,用于存放所有编译过的应用的class文件

  • lib目录,存放应用依赖的,第三方的jar文件。

对于WEB-INF目录的访问,规范中有如下约束

The Web application class loader must load classes from the WEB-INF/classes directory first, and then from library JARs in the WEB-INF/lib directory. Also, except

for the case where static resources are packaged in JAR files, any requests from the

client to access the resources in WEB-INF/ directory must be returned with a

SC_NOT_FOUND(404) response.

所以,所有从client端发起的,对WEB-INF目录的直接请求(direct access),都必须返回404

这样一来,我们一些需要保护的文件,就可以放到WEB-INF目录下,而不用担心被直接访问到。例如前面文章中提到的Manager应用,其对用户的访问设置了BASIC的登录验证,而验证需要的角色名称,验证方式,都是定义在web.xml中。如果WEB-INF目录能够被Client直接读取,那就太不安全了。

但是,对于应用自身,存放在WEB-INF目录下的文件仍然是需要访问的。为此,ServletContext接口对外提供了两个方法,方便使用。

  • getResource

  • getResourceAsStream

两个方法都接收一个以/开头的String类型的参数,用于获取从WEB应用的根目录下的所有资源,也包含WEB-INF目录。

Now, show you the code.

在Tomcat中,对于WEB-INF的直接访问保护,是如何实现的,

在StandardContextValve这个类中,Valve是Tomcat中的一个组件,译过来叫,在一个Pipeline中可以使用多个不同类型的Valve,来实现对整个Pipeline的控制。这里的StandardContextValve,是StandardContext(代表常用的一个Web应用)默认配置的一个Valve,所以,对于应用的请求,都会流经这个阀,处理之后,再进行下面其它组件的处理,而StandardWrapper(代表Servlet)是Context的一个下级组件,所以会在ContextValue处理之后再处理,从而实现访问控制。

而上面提到的ServletContext这个接口,是对外提供的一系列方法,用于和Servlet容器进行交互。

例如其除了暴露出getResource的接口外,还提供获取绝对路径的接口

getRealPath。

简单总结为,WEB-INF目录并不是WEB应用根目录树的一部分,其目录下所有内容,对服务端可见,对Client端不可见。在服务端,可以通过ServletContext接口对外暴露的方法读取。

看完上述内容,你们掌握如何分析WEB-INF目录的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI