用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>

限制访问Web资源

可以告诉服务器应该使用哪个验证方法。"了不起,"有人会说,"这个没什么用,除非配置需要保护的URL。"没错,配置这些URL然后描述它们应有的保护正是security-constraint元素的作用。这...
  • laukicn
  • laukicn
  • 2017-06-05 17:56:12
  • 492

web项目中禁止用户访问一些目录或目录中的文件

在web项目中的web.xml文件中进行配置,或者增加过滤器:     1.可以在web.xml文件中增加: Forbidden ...
  • lsxploc
  • lsxploc
  • 2015-10-09 15:21:43
  • 2989

Java web权限控制的实现方式归纳

用户:user 角色:role 用户-角色:user_role 资源:resource(包括上级菜单、子菜单、按钮等资源) 角色-资源:role_resource 一、第一种实现方式 ...
  • jie1336950707
  • jie1336950707
  • 2015-11-19 19:44:34
  • 3870

用web.xml控制Web应用的行为(1)

用web.xml控制Web应用的行为(1) 2008-06-23 15:24 1 定义头和根元素  部署描述符文件就像所有XML文件一样,必须以一个XML头开始。这个...
  • colorandsong
  • colorandsong
  • 2011-11-25 13:41:39
  • 224

如何在web.xml中配置jsp的访问路径

web.xml的内容如下:   test       index.html     index.htm     index.jsp     default.html     d...
  • suyu_yuan
  • suyu_yuan
  • 2016-03-03 13:34:33
  • 8348

tomcat如何禁止显示目录和文件列表

Tomcat禁止显示目录和文件列表  打开   tomcat的安装目录/conf/web.xml 文件         default         org.apache.catalina....
  • xiaokui_wingfly
  • xiaokui_wingfly
  • 2015-06-02 15:50:19
  • 3095

限制对Web资源的访问

开发人员遇到的一个老问题是:如何使资源不完全暴露在大庭广众下,而只让那些适当的人和程序有完全的权限来访问他们需要的资源?至少有三个好方法可以解决这个问题。作为一个Java Web开发人员,你可能已经对...
  • happyxyzw
  • happyxyzw
  • 2005-09-06 21:40:00
  • 1526

web.xml中配置http访问转向https

   CLIENT-CERT    Client Cert Users-only Area               SSL
  • cataclyam2000
  • cataclyam2000
  • 2010-12-07 13:59:00
  • 4018

web项目配置https

tomcat6配置:  1.单向认证,就是传输的数据加密过了,但是不会校验客户端的来源  2.双向认证,如果客户端浏览器没有导入客户端证书,是访问不了web系统的,找不到地址  如果只是加密,我...
  • keketrtr
  • keketrtr
  • 2016-10-20 09:48:02
  • 3941

用过滤器限制Web服务的访问权限

使用axis的Handler进行访问控制axis为Web服务的访问控制提供了相关的配置描述符,并且提供了一个访问控制的简单Handler(关于Handler的详细介绍见" J2EE Web服务开发系列...
  • thinker28754
  • thinker28754
  • 2007-03-20 22:54:00
  • 4567
收藏助手
不良信息举报
您举报文章:用web.xml控制Web应用的行为( 限制对Web资源的访问)
举报原因:
原因补充:

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