JAVA流通桥

JAVA启发者

统计

留言簿(3)

AJAX相关网址

Eclipse相关网址

Hibernate

java相关网址

LINUX相关网址

webwork相关网址

友好链接

阅读排行榜

评论排行榜

Servlet2.3中文文档(第11,12,13章)

                                                  第十一章 请求到servlet的映射
11.1 URI的使用
web容器根据客户端的请求决定要调用的资源。
URL路径映射规则是第一个匹配成功就不再匹配了。
1)引擎将尽力为每一个请求一个servlet的路径匹配一个servlet
2)引擎将递归的匹配最长的路径前缀(在一个目录树中)
3)如果在URL路径中的最后一节有扩展名(例如:.jsp),则servlet引擎将会匹配一个适当的servlet获
取请求对象
4)如果没有一个servlet能够匹配请求,引擎将用一个适当的资源来处理该请求。如:在应用中配置了
默认的servlet,就会被用来处理匹配不到资源的请求。
11.2 匹配规则
在web应用描述文件中,匹配的定义如下:
.以'/'开始,以'/*'为结尾的字符串,用作路径匹配
.以'*.'开始的字符串,用作扩展名匹配
.包含'/'字符串,定义一个默认的servlet。如匹配的servlet路径是请求URI路径的最小上下文路径,路经
的info为空。
.其它的字符串用作精确的匹配。
11.2.1 绝对匹配
servlet引擎能够匹配任何精确的资源,如后缀为*.jsp的匹配,引擎中有JSP引擎的话,就会把所有的JSP
页面和与之对象的资源相匹配。
11.2.2 匹配的例子:
path pattern servlet
/foo/bar/* servlet1
/baz/* servlet2
/catalog servlet3
*.bop servlet4
incoming path servlet handling request
/foo/bar/index.html servlet1
/foo/bar/index.bop servlet1
/baz servlet2
/baz/index.html servlet2
/catalog servlet3
/catalog/racecar.bop servlet4
/index.bop servlet4
第十二章 安全
12.1介绍
web应用的资源能够被很多的用户访问,这些资源经常没有保护的暴露在网络中,因此一个稳定的web
应用需要一个安全的环境。
提高安全性有以下的几个方面:
.认证:访问一个实例前需要一个特殊的ID进行授权认证后才能访问该实例
.资源的访问控制:一些机密资源或局部资源只限制给某些用户或程序使用。
.数据完整性:在传输过程中数据不能被意外的改变。
.机密性:确定信息只能被授权过的用户使用。
12.2 公共安全
安全性声明是指表明应用是有安全结构的;包括权限、访问控制、认证。在web应用中部署描述是安全
声明的主要工具。
开发者应该为应用运行时配一个逻辑安全策略,在运行时中,servlet引擎用这个安全策略去验证授权请
求。
安全模块应该适用web应用的静态内容,当servlet用RequestDispatcher调用一个静态资源或servlet用
forward或include,时安全模块不适用。
12.3 程序级安全
当应用的安全模块不能充分的表明安全时程序安全就可以被使用。
程序安全有以下部分组成:
HttpServletRequest接口:
.getRemoteUser
.isUserInRole
.getUserPrincipal
getRemoteUser方法返回客户端用户的名称,用于授权。
isUserInRole方法判断远程用户是否在一个安全的角色内。
getUserPrincipal方法返回一个java.security.Principal对象,表明当前用户的主要名称。这个API允许
servlet根据这个信息处理一些业务逻辑。
如果用户没有授权,getRemoteUser返回null,isUserInRole返回false,getUserPrincipal返回null。
isUserInRole以一个role-name为参数。一个security-role-ref元素为在部署描述文件中定义,role-name
子元素包含角色名称。Security-role包含一个子元素role-link,role-link的value值是客户端用户将匹配的
安全角色。当用isUserInRole时引擎将调用security-role-ref到security-role的匹配。
举个例子:
<security-role-ref>
<role-name>FOO</role-name>
<role-link>manager</role-link>
</security-role-ref>
当一个用户属于“manager”角色是调用isUsesrInRole("FOO")返回true
如果匹配一个security-role元素的security-role-ref没有被定义,引擎必须找出一个与security-role
列表不同的roel-name元素作为web应用默认的安全角色。但默认的安全角色限制了变换角色名
称不需要重新编译的机动性。
12.4 角色
一个安全角色是一组用户的逻辑名称。当应用发布时,角色就部署在web应用的运行时环境中
了。在基于安全属性的请求到来时,servlet引擎就会执行公共安全或程序级安全。安全请求在以
下的一些情况中会产生:
1)开发者给用户群配置了一个安全角色。
2)开发者把一个安全角色配置给一个安全域中的一个主要名称。
12.5 验证
web客户端可以用以下的一些机制验证用户:
.HTTP Basic Authentication
.HTTP Digest Authentication
.HTTPS Client Authentication
.Form Based Authentication
12.5.1 HTTP Basic Authentication
HTTP Basic Authentication是基于用户名和密码的验证机制,是在HTTP/1.0规范中定义的。web
服务要求客户端验证用户,web服务用一个realm字符串作为请求的一部分,用户通过这个realm
字符串被验证。realm字符串不会和任何安全域相关联。客户端获得用户名称和密码发送到服务
端。然后服务端用一个特殊的realm去验证该用户。
Basic Authentication 不是安全的验证协议。用户的密码是用base64编码的,服务端是不能够识
别的。一些附加的安全措施可以被使用,这些协议有:HTTPS安全传输协议或网络安全标准(如
IPSEC协议、VPN策略)。
12.5.2 HTTP Digest Authentication
和HTTP Basic Authentication一样,HTTP Digest Authentication 也是验证用户名和密码的。然而
这种验证是把密码加密传输的,要比Basic Authentication的base64编码要安全的多。Digest
Authentication 没有被广泛的运用,建议servlet引擎支持这种验证,但不是必须的。
12.5.3 Form Based Authentication
web应用部署描述文件包含登陆表单和错误页面。登陆表单必须包含用户名和用户密码字段,这
两个字段必须以j_username和j_password命名。当一个用户要访问一个被保护的资源时,引擎就
会验证该用户信息,如果该用户验证通过就会调用保护的资源,如果没有验证通过,以下的步骤
就会发生:
1)登陆表单被送到客户端,启动这个验证的URL路径将被引擎保存。
2)用户被要求填写用户名和密码
3)客户端重新post表单到服务端
4)引擎尝试着重新去验证该用户的信息
5)如果验证有失败,响应被设置为401的错误页面将被返回
6)如果验证成功,如果该访问的资源在一个授权角色中,将进一步验证。
7)如果用户是授权用户,客户端将用保存的URL路径重新定向到访问的资源。
发送到验证失败的用户的错误页面包含了失败的信息。
Form Based Authentication 和 Basic Authentication 有一样的弊端,密码是用简单的文本传输
的,不能够被服务端验证。附加的一些协议可以增强这部分功能。如HTTPS传输协议,或网路安
全标准(如IPSEC协议或VPN策略)。
12.5.3.1 登陆表单的一些注意事项
登陆的表单和跟踪session的URL实现上是有限制的。
登陆表单只能在cookies或SSL跟踪session的方式下才能使用。
登陆表单要进行验证的话,表单的action就必须为j_security_check。这个约束使得登陆表单访问
的资源没有问题,也避免了把表单外的字段提交进请求中。
在HTML页面中登陆表单的一个例子如下:
<form method="POST" action="j_security_check" >
<input type="text" name="j_username">
<input type="password" name="j_password">
</form>
当登陆表单因为HTTP请求被调用时,原始的请求参数必须被引擎存储,在验证成功后重新定向
请求的资源。
如果用登陆表单的用户被验证通过,创建了一个session,当session超时或调用了失效方法,使得
登陆者推出了。后续来的请求就必须重新对用户进行验证。
12.5.4 HTTPS Client Authentication
用HTTPS验证用户是很强的验证机制。这个验证需要用户拥有一个公共钥匙(PKC)。servlet引
擎不需要支持HTTPS协议。
12.6 验证信息的跟踪
基本的身份验证实在运行时环境中进行的:
1)确认一个登陆验证机制或策略已经配置在web应用中。
2)把需验证的信息发往一个容器中的所有应用。
3)当一个安全域被删除时,用户的请求就需要重新验证。

第十三章 部署描述文件
13.1 部署描述元素
部署描述文件中的所有元素都要被所有的servlet引擎支持。配置类型有下面的几种:
.ServletContext Init Parameteres
.Session Configuration
.Servlet Declaration
.Servlet Mapping
.Application Lifecycle Listener classes
.Filter Dfinitions and Filter Mappings
.MIME Type Mappings
.Error Pages
servlet 引擎是实现了J2EE规范的一部分的时候,安全信息才有必要在部署描述文件中定义。
部署描述文件不光光只支持servlet规范,在部署描述文件为了适应web应用的需求增加了其他的部属描述元素。如:
.taglib
.用于查找JNDI对象的一些元素(env-entry,ejb-ref,ejb-local-ref,resource-ref,resource-env-ref)
 
13.2 处理部属描述文件的规则
本节主要讲一下web容器访问部属描述文件的几种规则。
.web容器应该忽略部属描述文件中数据的开始空字符和最后的空字符。
.web容器应该有一个广泛的选项用户检查web应用的有效性。如检查web应用是否包含部署描述文件,部属描述文件结构是否正确。部署描述中应该有语义检查,如:安全规则有同样的名字,应该报错等等。
.部署描述中的URI是假定在URL解码表单中的
.引擎必须正确解释部属文件中的路径,如:路径'/a/../b'必须解释为'/b',因为路径是以'..'开始的路径在部署描述中是无效的。
.调用资源的URI与WAR的根目录关联,以‘/’开头
.在一个元素中,如果它的显示值是一个列表,则这个列表将可能会报错
13.2.1 DOCTYPE
所有2.3版本的部属描述文件的DOCTYPE必须是:
<!DOCTYPE web-app PUBLIC "-//sun Microsystems, inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
13.3 DTD
web应用的部署描述文件DTD如下:
<!--
 web-app 元素是部署描述的根元素
-->
<!ELEMENT web-app(icon?,display-name?,description?,distributable?,context-param*,filter*,filter-mapping*,listener*,servlet*,servlet-mapping*,session-config?,mime-mapping*,welcome-file-list?,error-page*,taglib*,resource-env-ref*,resource-ref*,security-constraint*,login-config?,security-role*,env-entry*,ejb-ref*,ejb-local-ref*)>
<!--
Auth-constraint 元素定义了可以访问资源列表的用户角色。Role-name可以作为security-role元素的子元素出现也可以以role-name"*"出现表示所有的角色,如果*和role-name都出现了,引擎将解释这个资源可以被所有角色使用。如果没有定义角色,用户就不能够访问定义的资源。
Used in :security-constraint
-->
<!ELEMENT auth-constraint (description?,role-name*)>
<!--
Auth-method 元素是配置web应用的安全机制的,是访问被保护资源的先决条件。用户必须用这个验证机制验证。这个元素Value值有“BASIC”,“DIGEST”,“FORM”或“CLIENT-CERT”
Userd in : login-config
-->
<!ELEMENT auth-method(#PCDATA)>
<!--
Context-param元素包含了servlet context初始化的参数
Used in :web-app
-->
<!ELEMENT context-param(param-name,param-value,description?)>
<!--
description元素用于对父元素进行说明,description元素可以包含任何说明信息。当父元素被工具访问时这些说明就会显示。
Used in :auth-contraint,context-param,ejb-local-ref,ejb-ref,env-entry,filter,init-param,resource-env-ref,resource-ref,ren-as,security-role,security-role-ref,servlet,user-data-constraint,web-app,web-resource-collection
-->
<!ELEMENT description(#PCDATA)>
<!--
Display-name元素是一个简称,被调用的工具显示,这个简称不必是唯一的
Used in: filter,security-constraint,sevlet,web-app
例如:
<display-name>Employee self Service </display-name>
-->
<!ELEMENT display-name(#PCDATA)>
<!--
Distributable 元素,这个元素出现在部署描述中,说明该应用可以部署在分布式servlet引擎中。
Used in :web-app
-->
<!ELEMENT distributable EMPTY>
<!--
Ejb-link 元素用在ejb-ref 或ejb-local-ref元素中,去指定EJB关联的一个enterprise bean.
Ejb-link中的名字是一个关联着enterprise bean的路径 或者是目标bean+一个以“#”开头的路径。一个ejb-name可以对应多个enterprise beans。
Used in : ejb-local-ref,ejb-ref
例如:
<ejb-link>EmployeeRecord</ejb-link>
<ejb-link>../products/product.jar#ProductEJB</ejb-link>
-->
<!ELEMENT ejb-link (#PCDAATA)>
<!--
 ejb-local-ref 元素用于描述本地enterprise bean的home接口,描述由下面的部分组成:
一个可选的描述
enterprise bean 相关的EJB名称
Enterprise bean 的类型
Enterprise bean 的本地接口
可选的ejb-link信息
Used in: web-app
-->
<!ELEMENT ejb-local-ref (description?,ejb-ref-name,ejb-ref-type,local-home,local,ejb-link?)>
<!--
Ejb-ref 元素用于描述enterprise bean的home接口。描述由下面组成:
一个可选描述
enterprise bean 相关的EJB名称
Enterprise bean 的类型
Enterprise bean 的本地接口
可选的ejb-link信息
Used in:web-app
-->
<!ELEMENT ejb-ref(description?,ejb-ref-name,ejb-ref,type,home,remote,ejb-link?)>
<!--
Ejb-ref-name 元素包含一个EJB的名字,这个名字必须是唯一的;这个EJB是web应用环境和关联的java:comp/env context的入口。建议名字以“ejb/”开头。
Used in : ejb-local-ref,ejb-ref
例如:
<ejb-ref-name>ejb/Payroll</ejb-ref-name>
-->
<!ELEMENT ejb-ref-name(#PCDATA)>
<!--
Ejb-ref-type 元素包含enterprise bean的类型。Ejb-ref-type元素必须是下面的一种:
<ejb-ref-type>Entity</ejb-ref-type>
<ejb-ref-type>Session</ejb-ref-type>
Used in :ejb-local-ref,ejb-ref
-->
<!ELEMENT ejb-ref-type(#PCDATA)>
<!--
Env-entry 元素包含了web应用的环境入口的描述。描述包含一个可选的描述,一个环境入口的名称,一个可选的value,如果value没有被指定,在部署中必须提供。
-->
<!ELEMENT env-entry (description?,env-entry-name,env-entry-value?,env-entry-type)>
<!--
 env-entry-name元素包含了web应用环境入口的名称,这个名称是一个java:comp/env context关联的JNDI名称。名字必须是唯一的。
例如:
<env-entry-name>minAmount</env-entry-name>
Used in: env-entry
-->
<!ELEMENT env-entry-name(#PCDATA)>
<!--
Env-entry-type 元素包含环境入口值的fully-qualified java类型,这是web应用程序期望有的。
Env-enry-type合法的类型如下:
Java.lang.Boolean
Java.lang.Byte
Java.lang.Character
Java.lang.String
Java.lang.Short
Java.lang.Integer
Java.lang.Long
Java.lang.Float
Java.lang.Double
Used in : env-entry
-->
<!ELEMENT env-entry-type(#PCDATA)>
<!--
Env-entry-value元素包含了web应用环境入口的值,值必须是一个字符串。
例如:
<env-entry-value>100.00</env-entry-value>
Used in : env-entry
<!ELEMENT env-entry-value(#PCDATA)>
 
<!--
Error-code元素包含HTTP的一个错误代码,如:404
Used in : error-page
-->
<!ELEMENT error-code(#PCDATA)>
<!--
 error-page 元素包含一个错误代码映射或错误类型资源的一个路径
Used in : web-app
-->
<!ELEMENT error-page((error-code | exception-type),location)>
<!--
 exception-type 包含一个java exception 类型的类名称
Used in : error-page
-->
<!ELEMENT exception-type(#PCDATA)>
<!--
 extension元素包含一个扩展名。如“txt”
Used in : mine-mapping
-->
<!ELEMENT extension (#PCDATA)>
<!--
 filter被filter-mapping中的一个servlet或一个URL通过filter-name映射。filter在运行时能够通过FilterConfig接口访问初始化的参数。
Used in : web-app
-->
<!ELEMENT filter (icon?,filter-name,display-name?,description?,filter-class,init-param*)>
 
<!--
 filter-class元素指明filter类.
Used in :filter
-->
<!ELEMENT filtere-class(#PCDATA)>
<!--
 引擎用filter-mapping去匹配请求的URI以及匹配的顺序,引擎在把匹配的URI匹配一个servlet。
Used in : web-app
-->
<!ELEMENT filter-mapping (Filter-name,(url-pattern | servlet-name))>
<!--
 filtere-name元素表明了一个filter的逻辑名称用于匹配用的。逻辑名称必须唯一
Used in : filter,filere-mapping
-->
<!ELEMENT filter-name (#PCDATA)>
<!--
 form-error-page元素定义了当登陆失败是调用的页面。这个路径以“/”开始
Used in: form-login-config
-->
<!ELEMENT form-error-page (#PCDATA)>
<!--
 form-login-config元素指定了登陆的错误页面,如果form不需要验证,这个元素将被忽略。
Used in : login-config
-->
<!ELEMENT form-login-cofig (form-login-page,form-error-page)>
<!--
 form-login-page 元素定义了登陆的页面。路径以“/”开头
 used in :form-login-config
-->
<!ELEMENT form-login-page (#PCDATA)>
<!--
 home元素包含了enterprise bean的home接口的名称
Used in :ejb-ref
例如:
<home>com.aardvark.payroll.PayrollHome</home>
<!ELEMENT home (#PCDATA)>
<!--
 http-method 包含了HTTP 方法(GET | POST |...)
Used in:web-resource-collection
-->
<!ELEMENT http-method (#PCDATA)>
 
<!--
 icon 元素包含small-icon 和large-icon元素,指明一个gif或jpeg的图标名称
Used in : filter,servlet,web-app
-->
<!ELEMENT icon (small-icon?,large-icon?)>
 
<!--
 init-param元素包含了name/value的servlet的初始化参数
Used in : filter,servlet
-->
<!ELEMETN init-param (param-name,param-value,description?)>
<!--
 jsp-file 元素 包含了一个以“/”开头JSP文件的全名。
Used in : servlet
-->
<!ELEMENT jsp-file (#PCDATA)>
<!--
 large-icon 元素包含一个32*32的图标文件名称。图片可以是jpeg或gif。
 used in :icon
例如:
<large-icon>employee-service-icon32*32.jsp</large-icon>
-->
<!ELEMENT large-icon (#PCDATA)>
 
<!--
 listener 元素对应着listener bean
Used in : web-app
-->
<!ELEMENT listener (listener-class)>
<!--
 listener-class 元素,元素值是监听类的类名。
Used in : listener
-->
<!ELEMENT listener-class (#PCDATA)>
<!--
 load-on-startup 元素指明了这个servlet在web启动时是否必须装入(调用servlet的init()方法)。这个内容是可选的,但有值时必须是个整数,如果是负数,引擎可以选择在任何时候装载该servlet,如果是整数或0,引擎就必须在web应用启动时装入该servlet。数字越小越被优先装入。如果值一样,引擎可以自由选择装入的顺序。
Used in : servlet
-->
<!ELEMENT load-on-startup (#PCDATA)>
<!--
 local元素包含了enterprise bean的local接口
Used in : ejb-local-ref
-->
<!ELEMENT local (#PCDATA)>
<!--
 local-home元素包含了enterprise bean的本地home接口
Used in : ejb-local-ref
-->
<!ELEMENT local-home (#PCDATA)>
 
<!--
 location 元素包含与web应用根目录关联的资源,值必须以‘/’开头
Used in : error-page
-->
<!ELEMENT location (#PCDATA)>
<!--
 login-config 元素用于配置验证的方法的。
Used in :web-app
-->
<!ELEMENT login-conifg (auth-method?,realm-name?,form-login-config?)>
 
<!--
 mime-mapping 元素定义了扩展名和mime类型的映射关系。
Used in :web-app
-->
<!ELEMENT mime-mapping (extension,mime-type)>
 
<!--
 mime-type 元素包含了mime类型,如“text/plain”
Used in : mime-mapping
-->
<!ELEMENT mime-type (#PCDATA)>
<!--
 param-name 元素包含参数的名称,参数名必须唯一。
Used in : context-param,init-param
-->
<!ELEMENT param-name (#PCDATA)>
 
<!--
 param-value元素包含了参数的值
Used in : context-param,init-param
-->
<!ELEMENT param-value (#PCDATA)>
 
<!--
 realm-name 元素用于HTTP Basic 验证中
Used in : login-config
-->
<!ELEMENT realm-name (#PCDATA)>
 
<!--
 remote 元素包含了enterprise bean 的remote接口
Used in : ejb-ref
例如:
 <remote>com.wombat.empl.EmployeeService</remote>
-->
<!ELEMENT remote (#PCDATA)>
 
<!--
 res-auth 元素表明是web应用代码控制资源,还是引擎控制资源。该元素的值只能是以下的一种
    <res-auth>Application</res-auth>
    <res-auth>Container</res-auth>
Used in : resource-ref
-->
<!ELEMENT res-auth (#PCDATA)>
 
<!--
 res-ref-name 元素指明了资源管理器(连接工厂)的名称,这个名称是和java:comp/env cocntext关联的JNDI名称。该名称必须是唯一的。
Used in:resource-ref
-->
<!ELEMENT res-ref-name (#PCDATA)>
 
<!--
 res-sharing-scope 元素表明了从资源管理器连接工厂获得的连接是否可以被共享。值必须是下面的一种:
 <res-sharing-scope>Shareable</res-sharing-scope>
 <res-sharing-scope>Unshareable</res-sharing-scope>
默认的值是Shareable
Used in : resource-ref
<!ELEMENT ref-sharing-scope (#PCDATA)>
 
<!--
 res-type 元素描述了资源的数据类型。
Used in : resource-ref
-->
<!ELEMENT res-type (#PCDATA)>
 
<!--
 resource-env-ref 元素描述了与web应用管理对象相关的资源。包含一个可选的描述,一个资源环境名称,一个环境资源类型。
Used in :web-app
例如:
<resource-env-ref>
 <resource-env-ref-name>jms/StockQueue</resource-env-ref-name>
 <resource-env-type>javax.jms/Queue</resource-env-ref-type>
</resource-env-ref>
-->
<!ELEMENT resource-env-ref (description?,resource-env-ref-name,resource-env-ref-type)>
 
<!--
 resource-env-ref-name元素一定一个环境资源名称,这个名字是与java:comp/env context关联的JNDI名称,必须以唯一的。
Used in : resource-env-ref
-->
<!ELEMENT resource-env-ref-name (#PCDATA)>
 
<!--
 resource-env-ref-type元素定义了环境资源的类型,是一个java类或接口的全名。
Used in: resource-env-ref
-->
<!ELEMENT resource-env-ref-type (#PCDATA)>
 
<!--
   resource-ref 元素包含web应用涉及的外部资源的描述。它有一个可选的描述,一个资源管理连接工厂的名称,一个资源管理连接工厂的类型id,一个验证类型(Application 或 Container),和一个可选的连接共享的选项(Shareale 或 Unshareable)
Used in : web-app
例如:
<resource-ref>
<res-ref-name>jdbc/EmployeeApppDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
-->
<!ELEMENT resource-ref (description?,res-ref-name,res-type,res-auth,res-sharing-scope?)>
 
<!--
 role-link 元素是与安全角色相关的。Role-link元素必须包含一个在security-role元素中定义的安全角色的名称。
Used in: security-role-ref
-->
<!ELEMENT role-link (#PCDATA)>
 
<!--
 role-name 元素包含一个安全角色的名称,名称必须遵守NMTOKEN规则。
Used in : auth-constraint,run-as,security-role,security-role-ref
-->
<!ELEMENT role-name (#PCDATA)>
 
<!--
 run-as 元素包含一个可选的描述,和一个安全角色的名称。
Used in : servlet
-->
<!ELEMENT run-as (description?,role-name)>
 
<!--
 security-constraint元素用于安全约束与一个或多个web资源相关联。
Used in :web-app
-->
<!ELEMENT security-constraint (display-name?,web-resource-collection+,auth-constraint?,user-data-constraint?)>
 
<!--
 security-role元素包含安全角色的定义,它由一个可选的安全角色的描述,一个安全角色名称组成。
Used in : web-app
例如:
<security-role>
<description>
   this role includes all employees who are authorized to access the employee service application.
</description>
<role-name>employee</role-name>
</security-role>
-->
<!ELEMENT security-role (description?,role-name)>
 
<!--
 security-role-ref 元素包含一个可选的描述,一个调用代码中的安全角色名称,一个可选的安全角色连接。如果安全角色没有被指定,开发者必须选择一个适当的安全角色。这个role-name元素的值必须是EJBConteext.isCallerInRole(String roleName)或HttpServletRequest.isUserInRole(String role)中的参数。
Used in :servlet
-->
<!ELEMENT security-role-ref (description?,role-name,role-link?)>
 
<!--
 servlet 元素包含一个servlet的数据描述。如果load-on-startup元素中指定了一个jsp文件,该JSP将被装入。
Used in : web-app
<!ELEMENT servlet (icon?,servlet-name,display-name?,description?,(servlet-class|jsp-file),init-param*,load-on-startup?,run-as?,security-role-ref*)>
 
<!--
 servlet-class元素包含一个全名的servlet类名称。
Used in : servlet
-->
<!ELEMENT servlet-class (#PCDATA)>
 
<!--
 servlet-mapping元素定义了一个servlet和url的关联
Used in : web-app
-->
<!ELEMENT servlet-mapping (servlet-name,url-pattern)>
 
<!--
 servlet-name元素包含servlet的名称,名称是唯一的。
Used in : filter-mapping,servlet,servlet-mapping
-->
<!ELEMENT servlet-name (#PCDATA)>
 
<!--
 session-config 元素定义了session参数
Used in : web-app
-->
<!ELEMENT session-config (session-timeout?)>
 
<!--
 session-timeout 元素定义了一个默认的会话超时的时间,使用于web应用中的所有会话。时间必须是用分钟的数值表示。
如果timeout是0或负数,引擎将确保会话永远不会超时。
Used in : session-config
-->
<!ELEMENT session-timeout (#PCDATA)>
 
<!--
 small-icon 元素包含一个16*16图标文件的名称。
Used in : icon
例如:
 <small-icon>employee-service-icon16*16.jpg</small-icon>
-->
<!ELEMENT small-icon (#pCDATA)>
 
 taglib 元素用于描述JSP tag 库。
Used in : web-app
-->
<!ELEMENT taglib (taglib-uri,taglib-location)>
 
<!--
 taglib-location 元素包含一个资源定位,为tag库找到tag描述文件
Used in:taglib
-->
<!ELEMENT taglib-location (#PCDATA)>
 
<!--
 taglib-uri元素描述了一个URI
Used in: taglib
-->
<!ELEMENT taglib-uri (#PCDATA)>
 
<!--
 transport-guarantee元素指定了客户端和服务端的通信关系,有NONE,INTEGRAL,CONFIDENTIAL。NONE表示着应用不需要任何传输保障。INTEGRAL表示着在数据在客户端到服务端的过程中不能有任何改变。CONFIDENTIAL表示在传输过程中防止其他传输内容的干扰。在使用SSl时常用的就INTEGRAL或CONFIDENTIL。
Used in : user-data-constraint
<!ELEMENT transport-guarantee (#PCDATA)>
 
<!--
 url-pattern 元素包含映射的url。必须符合11.2章中servlet API描述的规则。
Used in:filter-mapping,servlet-mapping,web-resource-collection
-->
<!ELEMENT url-pattern (#PCDATA)>
 
<!--
 user-data-constraint元素用于表明数据在客户端到服务器端是怎么保护的。
Used in :security-constraint
-->
<!ELEMENT user-data-constraint (description?,transport-guarantee)>
 
<!--
 web-resource-collection元素用于web应用中安全限制的资源被那些方法使用,如果没有指定,就可以被web用的所有方法调用。
Used in:security-constraint
-->
<!ELEMENT web-resource-collection (web-resource-name,description?,url-pattern*,http-method*)>
 
<!--
 web-resource-name 包含一个web资源集合的名称
Used in:web-resource-collection
-->
<!ELEMENT web-resource-name (#PCDATA)>
 
<!--
 welcome-file元素包含了web应用中默认的访问文件,如index.html
Used in:welcome-file-list
-->
<!ELEMENT welcome-file (#PCDATA)>
 
<!--
 welcome-file-list包含welcome-file的列表
Used in:web-app
-->
<!ELEMENT welcome-file-list (welcome-file+)>
<!--
 ID机制可以增加额外的部署信息,不允许加一个非标准的元素到标准的部署描述中
-->
<!ATTLIST auth-constraint id ID #IMPLIED>
<!ATTLIST auth-method id ID #IMPLIED>
<!ATTLIST context-param id ID #IMPLIED>
<!ATTLIST description id ID #IMPLIED>
<!ATTLIST display-name id ID #IMPLIED>
<!ATTLIST ejb-link id ID #IMPLIED>
<!ATTLIST ejb-local-ref id ID #IMPLIED>
<!ATTLIST ejb-ref  id ID #IMPLIED>
<!ATTLIST ejb-ref-name id ID #IMPLIED>
<!ATTLIST ejb-ref-type id ID #IMPLIED>
<!ATTLIST env-entry id ID #IMPLIED>
<!ATTLIST env-entry-name id ID #IMPLIED>
<!ATTLIST env-entry-type id ID #IMPLIED>
<!ATTLIST env-enry-value id ID #IMPLIED>
<!ATTLIST error-code id ID #IMPLIED>
<!ATTLIST error-page id ID #IMPLIED>
<!ATTLIST exception-type id ID #IMPLIED>
<!ATTLIST extension id ID #IMPLIED>
<!ATTLIST filter id ID #IMPLIED>
<!ATTLIST filter-class id ID #IMPLIED>
<!ATTLIST filtere-mapping id ID #IMPLIED>
<!ATTLIST filter-name id ID #IMPLIED>
<!ATTLIST form-error-page id ID #IMPLIED>
<!ATTLIST form-login-config id ID #IMPLIED>
<!ATTLIST form-login-page id ID #IMPLIED>
<!ATTLIST home id ID #IMPLIED>
<!ATTLIST http-method id ID #IMPLIED>
<!ATTLIST icon id ID #IMPLIED>
<!ATTLIST init-param id ID #IMPLIED>
<!ATTLIST jsp-file id ID #IMPLIED>
<!ATTLIST large-icon id ID #IMPLIED>
<!ATTLIST listener id ID #IMPLIED>
<!ATTLIST listener-class id ID #IMPLIED>
<!ATTLIST load-on-startup id ID #IMPLIED>
<!ATTLIST local id ID #IMPLIED>
<!ATTLIST local-home id ID #IMPLIED>
<!ATTLIST location id ID #IMPLIED>
<!ATTLIST login-config id ID #IMPLIED>
<!ATTLIST mime-mapping id ID #IMPLIED>
<!ATTLIST mime-type id ID #IMPLIED>
<!ATTLIST param-name id ID #IMPLIED>
<!ATTLIST param-value id ID #IMPLIED>
<!ATTLIST realm-name id ID #IMPLIED>
<!ATTLIST remote id ID #IMPLIED>
<!ATTLIST res-auth id ID #IMPLIED>
<!ATTLIST res-ref-name id ID #IMPLIED>
<!ATTLIST res-sharing-scope id ID #IMPLIED>
<!ATTLIST res-type id ID #IMPLIED>
<!ATTLIST resource-env-ref id ID #IMPLIED>
<!ATTLIST resource-env-ref-name id ID #IMPLIED>
<!ATTLIST resource-env-ref-type id ID #IMPLIED>
<!ATTLIST resource-ref id ID #IMPLIED>
<!ATTLIST role-link id ID #IMPLIED>
<!ATTLIST role-name id ID #IMPLIED>
<!ATTLIST run-as id ID #IMPLIED>
<!ATTLIST security-constraint id ID #IMPLIED>
<!ATTLIST security-role id ID #IMPLIED>
<!ATTLIST security-role-ref id ID #IMPLIED>
<!ATTLIST sevlet id ID #IMPLIED>
<!ATTLIST servlet-class id ID #IMPLIED>
<!ATTLIST servlet-mapping id ID #IMPLIED>
<!ATTLIST servlet-name id ID #IMPLIED>
<!ATTLIST session-config id ID #IMPLIED>
<!ATTLIST session-timeout id ID #IMPLIED>
<!ATTLIST small-icon id ID #IMPLIED>
<!ATTLIST taglib id ID #IMPLIED>
<!ATTLIST taglib-location id ID #IMPLIED>
<!ATTLIST taglib-uri id ID #IMPLIED>
<!ATTLIST transport-guarantee id ID #IMPLIED>
<!ATTLIST rul-pattern id ID #IMPLIED>
<!ATTLIST user-data-constraint id ID #IMPLIED>
<!ATTLIST web-app id ID #IMPLIED>
<!ATTLIST web-resource-collection id ID #IMPLIED>
<!ATTLIST web-resource-name id ID #IMPLIED>
<!ATTLIST welcome-file id ID #IMPLIED>
<!ATTLIST welcome-file-list id ID #IMPLIED>
 
13.4 例子
13.4.1 基本的例子
<!DOCTYPE web-app PUBLIC "-//Sun Mmicrosystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/j2ee/dtds/web-app_2_3.dtd">
<web-app>
    <display-name>A Simple Application</display-name>
    <context-param>
        <param-name>Webmaster</param-name>
        <param-value>webmaster@mycorp.com</param-value>
   </context-param>
    <servlet>
        <servlet-name>catalog</servlet-name>
        <serrvlet-class>com.mycorp.Catalogservlet</servlet-class>
        <init-param>
            <param-name>catalog</param-name>
            <param-value>Spring</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>catalog</servlet-name>
        <url-pattern>/catalog/*</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>30</session-timeout>
    </session-config>
    <mime-mapping>
        <extension>pdf</extension>
        <mime-type>application/pdf</mime-type>
    </mime-mapping>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
    </welcome-file-list>
    <error-page>
        <error-code>404</error-code>
        <location>/404.html</location>
    <error-page>
</web-app>
 
13.4.2 一个安全的例子
<!DOCTYPE web-app PUBLIC "-//Sun Mmicrosystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/j2ee/dtds/web-app_2_3.dtd">
<web-app>
    <display-name>A Secure Application</display-name>
    <security-role>
        <role-name>manager</role-name>
    </security-role>
    <servlet>
        <servlet-name>catalog</servlet-name>
        <servlet-class>com.mycorp.CatalogServlet</servlet-class>
        <init-param>
            <param-name>catalog</param-name>
            <param-value>Spring</param-value>
        </init-param>
        <security-role-ref>
             <role-name>MGR</role-name>
             <!-- 在代码中用的角色名称-->
             <role-link>manager</role-link>
        </security-role-ref>
    </servlet>
    <servlet-mapping>
         <servlet-name>catalog</servlet-name>
         <url-pattern>/catalog/*</url-pattern>
    </servlet-mapping>
    <security-constraint>
        <web-resource-collection>
            <web-resource-name>SalesInfo</web-resource-name>
            <url-pattern>/salesinfo/*</url-pattern>
            <http-method>GET</http-method>
            <http-method>POST</http-method>
        </web-resource-collection>
        <auth-constraint>
            <role-name>manager</role-name>
        </auth-constraint>
        <user-data-constraint>
            <transport-guarantee>CONFIDENTIAL</transport-guarantee>
        </user-data-constraint>
    </security-constraint>
</web-app>
 
结尾:
servlet2.3到此就结束了,至于对接口类的解释。这里就不给与了。有兴趣的朋友可以down一个servlet2.3的源码包自己研究研究。

posted on 2007-08-20 17:52 朱岩 阅读(367) 评论(0)  编辑  收藏 所属分类: servlet文章


只有注册用户登录后才能发表评论。


网站导航: