用web.xml控制Web应用的行为( 限制对Web资源的访问)

转载 2007年10月12日 15:14:00

 限制对Web资源的访问

      现在,可以指示服务器使用何种验证方法了。"了不起,"你说道,"除非我能指定一个来收到保护的URL,否则没有多大用处。"没错。指出这些URL并说明他们应该得到何种保护正是security-constriaint元素的用途。此元素在web.xml中应该出现在login-config的紧前面。它包含是个可能的子元素,分别是:web-resource-collection、auth-constraint、user-data-constraint和display-name。下面各小节对它们进行介绍。

      web-resource-collection

      此元素确定应该保护的资源。所有security-constraint元素都必须包含至少一个web-resource-collection项。此元素由一个给出任意标识名称的web-resource-name元素、一个确定应该保护的URL的url-pattern元素、一个指出此保护所适用的HTTP命令(GET、POST等,缺省为所有方法)的http-method元素和一个提供资料的可选description元素组成。例如,下面的Web-resource-collection项(在security-constratint元素内)指出Web应用的proprietary目录中所有文档应该受到保护。

<security-constraint>
<web-resource-coolection>
<web-resource-name>Proprietary</web-resource-name>
<url-pattern>/propritary/*</url-pattern>
</web-resource-coolection>
<!-- ... -->
</security-constraint>

      重要的是应该注意到,url-pattern仅适用于直接访问这些资源的客户机。特别是,它不适合于通过MVC体系结构利用RequestDispatcher来访问的页面,或者不适合于利用类似jsp:forward的手段来访问的页面。这种不匀称如果利用得当的话很有好处。例如,servlet可利用MVC体系结构查找数据,把它放到bean中,发送请求到从bean中提取数据的JSP页面并显示它。我们希望保证决不直接访问受保护的JSP页面,而只是通过建立该页面将使用的bean的servlet来访问它。url-pattern和auth-contraint元素可通过声明不允许任何用户直接访问JSP页面来提供这种保证。但是,这种不匀称的行为可能让开发人员放松警惕,使他们偶然对应受保护的资源提供不受限制的访问。

      auth-constraint

      尽管web-resource-collention元素质出了哪些URL应该受到保护,但是auth-constraint元素却指出哪些用户应该具有受保护资源的访问权。此元素应该包含一个或多个标识具有访问权限的用户类别role-name元素,以及包含(可选)一个描述角色的description元素。例如,下面web.xml中的security-constraint元素部门规定只有指定为Administrator或Big Kahuna(或两者)的用户具有指定资源的访问权。

<security-constraint>
<web-resource-coolection> ... </web-resource-coolection>
<auth-constraint>
<role-name>administrator</role-name>
<role-name>kahuna</role-name>
</auth-constraint>
</security-constraint>

      重要的是认识到,到此为止,这个过程的可移植部分结束了。服务器怎样确定哪些用户处于任何角色以及它怎样存放用户的口令,完全有赖于具体的系统。

      例如,Tomcat使用install_dir/conf/tomcat-users.xml将用户名与角色名和口令相关联,正如下面例子中所示,它指出用户joe(口令bigshot)和jane(口令enaj)属于administrator和kahuna角色。

<tomcat-users>
<user name="joe" password="bigshot" roles="administrator,kahuna" />
<user name="jane" password="enaj" roles="kahuna" />
</tomcat-users>

      user-data-constraint

      这个可选的元素指出在访问相关资源时使用任何传输层保护。它必须包含一个transport-guarantee子元素(合法值为NONE、INTEGRAL或CONFIDENTIAL),并且可选地包含一个description元素。transport-guarantee为NONE值将对所用的通讯协议不加限制。INTEGRAL值表示数据必须以一种防止截取它的人阅读它的方式传送。虽然原理上(并且在未来的HTTP版本中),在INTEGRAL和CONFIDENTIAL之间可能会有差别,但在当前实践中,他们都只是简单地要求用SSL。例如,下面指示服务器只允许对相关资源做HTTPS连接:

<security-constraint>
<!-- ... -->
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint> 
display-name

     security-constraint的这个很少使用的子元素给予可能由GUI工具使用的安全约束项一个名称。

分配角色名

      迄今为止,讨论已经集中到完全由容器(服务器)处理的安全问题之上了。但servlet以及JSP页面也能够处理它们自己的安全问题。

      例如,容器可能允许用户从bigwig或bigcheese角色访问一个显示主管人员额外紧贴的页面,但只允许bigwig用户修改此页面的参数。完成这种更细致的控制的一种常见方法是调用HttpServletRequset的isUserInRole方法,并据此修改访问。

      Servlet的security-role-ref子元素提供出现在服务器专用口令文件中的安全角色名的一个别名。例如,假如编写了一个调用request.isUserInRole("boss")的servlet,但后来该servlet被用在了一个其口令文件调用角色manager而不是boss的服务器中。下面的程序段使该servlet能够使用这两个名称中的任何一个。

<servlet>
<!-- ... -->
<security-role-ref>
<role-name>boss</role-name> <!-- New alias -->
<role-link>manager</role-link> <!-- Real name -->
</security-role-ref>
</servlet>

      也可以在web-app内利用security-role元素提供将出现在role-name元素中的所有安全角色的一个全局列表。分别地生命角色使高级IDE容易处理安全信息。

 

控制会话超时

      如果某个会话在一定的时间内未被访问,服务器可把它扔掉以节约内存。可利用HttpSession的setMaxInactiveInterval方法直接设置个别会话对象的超时值。如果不采用这种方法,则缺省的超时值由具体的服务器决定。但可利用session-config和session-timeout元素来给出一个适用于所有服务器的明确的超时值。超时值的单位为分钟,因此,下面的例子设置缺省会话超时值为三个小时(180分钟)。

<session-config>
<session-timeout>180</session-timeout>
</session-config>

JSP页面中限制对 Web 资源的访问

现在,可以指示服务器使用何种验证方法了。“了不起,”你说道,“除非我能指定一个来收到保护的URL,否则没有多大用处。”没错。指出这些URL并说明他们应该得到何种保护正是security-constri...
  • xiantingxinbuone
  • xiantingxinbuone
  • 2013年08月18日 15:53
  • 1605

JSP页面中限制对 Web 资源的访问

现在,可以指示服务器使用何种验证方法了。“了不起,”你说道,“除非我能指定一个来收到保护的URL,否则没有多大用处。”没错。指出这些URL并说明他们应该得到何种保护正是security-constri...
  • xiantingxinbuone
  • xiantingxinbuone
  • 2013年08月18日 15:53
  • 1605

web应用和web.xml文件

构建Web应用手动建立一个web应用 1.任意目录建立demo文件夹,用于建立一个web应用 2.文件夹中建立一个WEB-INF文件夹(区分大小写) 3.在WEB-INF中建立web.xml文件,并添...
  • liu_c_y
  • liu_c_y
  • 2016年01月27日 13:54
  • 1595

WEB容器启动之Web.xml加载顺序

web.xml文件加载顺序   一、      1 、启动一个 WEB 项目的时候, WEB 容器会去读取它的配置文件 web.xml ,读取 和 两个结点。      ...
  • kucaozhuzhu
  • kucaozhuzhu
  • 2014年03月05日 14:56
  • 1488

web.xml文件详解

1、启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取和两个结点。  2、紧急着,容创建一个ServletContext(servlet上下文),这个web项目的所有部...
  • nsu406096612
  • nsu406096612
  • 2017年04月30日 13:54
  • 818

xml在Web中的作用

xml在web中的作用,及其一些讲解
  • jinhuoxingkong
  • jinhuoxingkong
  • 2016年06月08日 11:01
  • 1301

JavaWEB中web.xml和servlet不得不说的秘密。

上班两年多,今天突然温习一下基础知识,发现已经忘记很多,细思极恐,赶快重新练习下,记录在CSDN也希望能帮助到各位小伙伴。 创建web项目 我这边使用的是Eclipse,不多说话,我坚信用图比...
  • baidu_27621127
  • baidu_27621127
  • 2016年05月16日 22:12
  • 1636

javaweb项目将文件上传至数据库中的大小限制

SSH项目将大文件上传至数据库时会出现以下链接已重置: 首先将struts.xml中添加上配置 64M 然后上传大文件出现: Struts Problem Report Struts ha...
  • wangdechuan7
  • wangdechuan7
  • 2015年12月31日 12:07
  • 983

为Web应用建立JMX管理系统(二)

四.创建MBean描述文件  在上面第三段代码中,我们可以看到,要将MBean注册到MBean Server中必须先创建MBeanInfo,MBean的setModelMBeanInfo()用来...
  • healxp
  • healxp
  • 2014年02月21日 10:58
  • 417

web.xml中设置根目录

1、 web.xml配置    webAppRootKey webapp.root "webapp.root"这个字符串可以随便写任何字符串。如果不配置默认值是"webapp.root"。...
  • xqhys
  • xqhys
  • 2017年01月19日 18:49
  • 2513
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用web.xml控制Web应用的行为( 限制对Web资源的访问)
举报原因:
原因补充:

(最多只允许输入30个字)