网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

如何分析WEB-INF目录

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

我们提供的服务有:成都网站设计、网站制作、外贸营销网站建设、微信公众号开发、网站优化、网站认证、文成ssl等。为1000+企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的文成网站制作公司

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目录的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注创新互联行业资讯频道,感谢各位的阅读!


分享文章:如何分析WEB-INF目录
本文URL:http://bjjierui.cn/article/igheoi.html

其他资讯