限制访问Web资源

        

可以告诉服务器应该使用哪个验证方法。"了不起,"有人会说,"这个没什么用,除非配置需要保护的URL。"没错,配置这些URL然后描述它们应有的保护正是security-constraint元素的作用。这个元素包含4个子元素:web-resource-collection, auth-constraint, user-data-constraint和display-name。下面对其中的每个元素进行描述。

web-resource-collection元素

该元素标识需要保护的资源。所有security-constraint元素必须包含至少一个web-resource-collection。该元素有一个web-resource-name元素,后者提供一个任意的标识名,还包含一个url-pattern元素以指出哪些URL需要保护。另一个可选的http-method元素为保护应用指定HTTP命令(GET,POST等;默认是所有方法),还有一个可选的description元素用于提供文本说明。比如,下面的web-resource-collection(在一个security-constraint元素中)配置了Web应用程序proprietary目录下所有的文档都需要保护。

 
 
  1. <security-constraint>  
  2.   <web-resource-collection>  
  3.     <web-resource-name>Proprietary</web-resource-name>  
  4.     <url-pattern>/proprietary/*</url-pattern>  
  5.   </web-resource-collection>  
  6.   <!-- ... -->  
  7. </security-constraint> 

务必注意,url-pattern只能应用于可以直接访问资源的客户端。在某种特殊情况下,它不能够应用在通过MVC框架的RequestDispatcher或jsp:forward访问的页面。这个不对称性如果利用得当,将非常好。比如,在MVC框架中一个servlet查找存储在bean中的数据,然后跳转请求到一个从bean中提取数据并显示数据的页面。需要确保JSP页面不能够被直接访问,只能通过页面将要用来创建bean的servlet才能访问。url-pattern和auth-constraint元素可以通过声明任何用户都不能直接访问这个JSP页面来达到此目的。但这个不对称性使开发人员放松了警惕,允许他们偶尔能够不受限制的访问保护资源。

核心警告:这些保护只能应用于防止客户端直接访问。安全模式不能应用于通过RequestDispatcher或jsp:forward访问的页面。

auth-constraint元素

尽管web-resource-collection元素配置了哪些URL需要保护,auth-constraint元素配置了哪些用户可以访问被保护的资源。这里还应该包含一个或多个role-name元素来标识有权访问资源的用户类型,另外还可以有一个可选的description元素来描述这个角色。所有出现在web.xml的auth-constraint子元素role-name中的角色名称必须是在security-role元素中全局声明的角色。这个security-role元素直接在web-app元素下。它包含一个或多个的role-name子元素。例如,下面web.xml中的security-constraint元素说明只有被指定为Administrators或者Big Kahunas(或者两者都是)的用户才有权访问指定的资源。

 
 
  1. <security-constraint>  
  2.   <web-resource-collection>...</web-resource-collection>  
  3.   <auth-constraint>  
  4.     <role-name>administrator</role-name>  
  5.     <role-name>kahuna</role-name>  
  6.   </auth-constraint>  
  7. </security-constraint>  
  8. <security-role>  
  9.   <role-name>administrator</role-name>  
  10.   <role-name>kahuna</role-name>  
  11. </security-role> 

注意,整个处理过程的可移植部分就是在这一点终止的。服务器怎样检查哪个用户属于哪个角色以及它怎样存储用户密码,完全依赖于系统。详细请参见3.1节,通过使用Tomcat的方法。

比如,在默认情况下,Tomcat使用install_dir/conf/tomcat-users.xml文件将用户名和角色名密码相关联,如下面的例子所示,将用户joe(密码为bigshot)和jane(密码为enaj)指定属于administrator和/或kahuna角色。

 
 
  1. <tomcat-users>  
  2.   <user name="joe" 
  3.          password="bigshot" roles="administrator,kahuna" />  
  4.  
  5.   <user name="jane" 
  6.          password="enaj" roles="kahuna" />  
  7.   <!-- ... -->  
  8. </tomcat-users> 

核心警告:容器管理安全机制需要一个重要的服务器特有组件。具体说来,必须使用一个特定方法来将用户名和密码相关联,将用户名与角色名进行映射。

user-data-constraint元素

这个可选的元素表明当相关资源被访问的时候应该采用传输层保护。必须包含一个transport-guarantee子元素(合法值为NONE,INTEGRAL或者CONFIDENTIAL),还可以包含一个可选的description元素。transport-guarantee元素的值为NONE(默认值)时使用无限制的通信协议。值为INTEGRAL表示在通信过程中避免数据在没有察觉的情况下被修改。值为CONFIDENTIAL表示数据在以一种不能被拦截数据的人读取的方式传输。虽然在理论上(和将来的HTTP版本中),INTEGRAL和CONFIDENTIAL有一定的差别,但在当前的实际中,它们都只是简单使用SSL的指令。比如,下面的代码只允许服务器使用HTTPS链接到相关资源。

 
 
  1. <security-constraint>  
  2.   <!-- ... -->  
  3.   <user-data-constraint>  
  4.     <transport-guarantee>CONFIDENTIAL</transport-guarantee>  
  5.   </user-data-constraint>  
  6. </security-constraint> 

display-name元素

这个很少使用的security-constraint子元素用于为一个可能使用GUI工具创建的安全约束提供名称。

附摘:

JSP和servlet核心编程


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值