限制访问Web资源

来源:互联网 发布:燕郊淘宝店招聘 编辑:程序博客网 时间:2024/05/18 20:10

        

可以告诉服务器应该使用哪个验证方法。"了不起,"有人会说,"这个没什么用,除非配置需要保护的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核心编程

 使用和部署Web应用
  • 1.1.1 组织资源
  • 1.1.2 可移植性
  • 1.1.3 相互独立
  • 1.2.1 不同文件类型的存储位置
  • 1.2.2 JSP页面
  • 1.2.3 HTML文档、图像和其他常规的Web
  • 1.2.4 单独的servlet,bean和Helper类
  • 1.2.5 servlet、bean和Helper类(打包
  • 1.2.6 部署描述文件
  • 1.2.7 Tag Library Descriptor文件
  • 1.2.8 tag文件
  • 1.2.9 WAR Manifest文件
  • 1.3 在服务器上注册Web应用
  • 1.3.1 在Tomcat上注册一个Web应用
  • 1.3.2 在其他服务器上注册Web应用
  • 1.4.1 把Web应用目录复制到快捷方式或
  • 1.4.2 使用集成开发环境(IDE)的部署功
  • 1.4.3 使用ant,maven或者其他相似的
  • 1.4.4 结合使用IDE和ant
  • 1.5 WAR的艺术:把 Web应用打包成WAR
  • 1.6.1 下载app-blank并将其重命名为te
  • 1.6.2 下载test.html和test.jsp和Test
  • 16.3 把test.html和test.jsp添加到tes
  • 1.6.4 把TestServlet.java放入testApp
  • 1.6.5 编译TestServlet.java
  • 1.6.6 在web.xml文件中声明TestServle
  • 1.6.7 把testApp复制到tomcat_dir/Web
  • 1.6.8 启动Tomcat
  • 1.6.9 以http://localhost/testApp/so
  • 1.7 在不同的Web应用之间共享数据(1
  • 1.7 在不同的Web应用之间共享数据(2
  •  使用web.xml配置Web应用
  • 2.1 部署描述文件的作用
  • 2.2 定义头部和根元素
  • 2.3.1 2.4版本
  • 2.3.2 2.3版本
  • 2.4.1 指定名称
  • 2.4.2 定义自定义URL(1)
  • 2.4.2 定义自定义URL(2)
  • 2.4.3 JSP页面的命名
  • 2.5.1 重新映射/servlet/ URL路径模式
  • 2.5.2 全局禁用请求:Tomcat
  • 2.6.1 分配servlet初始化参数
  • 2.6.2 分配JSP初始化参数
  • 2.6.3 提供应用程序范围的初始化参数
  • 2.6.4 服务器启动时加载servlet(1)
  • 2.6.4 服务器启动时加载servlet(2)
  • 2.7 声明过滤器
  • 2.8 指定欢迎页面
  • 2.9 指定错误处理页面
  • 2.9.1 error-code元素
  • 2.9.2 exception-type元素
  • 2.10.1 配置验证方法
  • 2.10.2 限制访问Web资源
  • 2.10.3 指定角色名称
  • 2.11 控制会话失效时间
  • 2.12 为Web应用程序提供文件
  • 2.13 使用MIME类型关联文件
  • 2.14.1 定位标签库描述文件
  • 2.14.2 配置JSP页面的属性(1)
  • 2.14.2 配置JSP页面的属性(2)
  • 2.15 配置字符编码
  • 2.16 配置应用程序事件监听器
  • 2.17 面向群集环境的开发
  • 2.18.1 resource-env-ref元素
  • 2.18.2 resource-ref元素
  • 2.18.3 env-entry元素
  • 2.18.4 ejb-ref元素
  • 2.18.5 ejb-local-ref元素
  • 2.18.6 service-ref元素
  • 2.18.7 message-destination-ref元素
  • 2.18.8 message-destination元素