arcims讲座三:怎样设置ArcIMS的权限验证
ArcIMS Servlet Connector 允许为MapService(地图服务)设定访问权限,这样只有被授权的用户才能访问他们。这个过程被称为权限验证。默认的,不进行权限验证, Servlet Connector将所有请求发给ArcIMS Application Server(应用服务器)。但是,你可以通过配置Servlet Connector来验证客户端: * 是否有有效的用户名和密码
* 是否可以从特定的机器(通过IP地址判断)访问MapService
* 是否有未过期的访问权限(如未服务设定了有效期)
* 是否有特定请求的访问权限(如是否能执行地址匹配功能)
当接到从客户端发来的请求,Servlet Conncctor首先检查是否为MapService设定了权限验证。如果设定了,Servlet Conncector从客户端获取必要的信息--如用户名,密码--然后确定是否满足条件。如果条件满足,请求将被发给Application Server。否则,将会提示用户无权访问该MapService。
Servlet Conncctor通过访问控制列表(ACL)来管理限定的和非限定的MapServices以及权限验证信息。ACL有两种格式:基于文件的ACL和基于JDBC的ACL。
基于文件的ACL的主要优点是容易建立,不需要其他的部件支持。基于文件的ACL将权限信息保存在XML文件中,该文件可以通过任何文本编辑器建立。在这个文件中,你可以定义哪个MapServices被限定以及如何访问他们--如包含所需的用户名和密码。当Servlet初始化时,这个文件的内容被加载进内存。因此,如果你编辑了ACL文件,需要重新启动servlet engine (如果servlet engine 嵌入web服务器,则需要重启web服务器)使你的更改生效。而且,在ACL文件中定义的用户数量的增加会导致web服务器的内存使用量的增加。
基于JDBC 的ACL将权限信息保存在通过JDBC驱动程序访问的关系型数据库中。JDBC的ACL可以比文件的ACL管理更大量的用户和MapService。而且,如果你需要频繁更改ACL,基于JDBC 的ACL可以不终止服务,即不需要重新启动servlet engine,而使更改立即生效。为了使用基于JDBC的ACL,你必须运行一个关系型数据库(如Oracle),并且有它的JDBC驱动。
注意:只有通过ArcIMS Servlet Connector处理的HTTP请求,才可以使用权限管理,其他连接器(如ActiveX Connector)不可用。
基于文件的ACL的权限验证
下面表明了通过XML文件设置MapServices的权限验证的步骤:
第一步:创建地图配置文件,设计web站点。
通过Author创建地图配置文件(AXL),然后通过Designer设计站点的外观。
注意:Designer不能访问到被限定的MapServices;所以,你必须在限定权限之前生成站点。
第二步:编辑Esrimap_prop文件。
定位Esrimap_prop文件所在目录,因为servlet engine不同,安装的目录有所不同,并用文本编辑器进行编辑。注意ArcIMS在Windows 的<installation directory>ConnectorsServlet或UNIX的< installation directory>/Middleware/Servlet_Connector目录下安装了Servlet Connector的一套备份文件。不要编辑该目录下的文件,它不会影响Servlet Connector的操作。
按照下面的提示设置属性。你可以简单地通过移走Esrimap_prop文件中的注释字符(#)设置许多属性。这些属性名称大小写敏感,但属性值不敏感。在ArcIMS Servlet Connector 属性文件中详细地描述了这些属性。
注意:如果你同时为基于XML文件和基于JDBC的ACL设置了属性,那结果将使用JDBC的设置。
enable=True
使用ArcIMS Servlet Connector.
authenticate=True
使用Servlet Connector的权限验证
authMethods=Basic
两种权限验证的方法: Basic和Digest.。Digest 更安全,但不是所有的浏览器都支持。
authenticateWithSessi
允许Servlet Connector更高效地处理客户端的请求。
sessi
大多数情况下,120秒应该足够了。
aclFileName=< ACL 文件的全目录>/aimsacl.xml
一般地,你可以将ACL文件放在与Esrimap_prop文件相同的目录下。表示目录的斜杠必须是"/"。
realm=ArcIMS Network
当提示用户输入用户名和密码时,realm名显示在对话框上。
第三步:创建保存访问控制列表的XML文件。
用文本编辑器创建XML文件。该文件表明哪个用户有权访问哪个MapServices。
需要牢记的是:
* 确认按照在Esrimap_prop文件的aclFileName属性中定义的文件和目录名命名并保存该文件。
* 用户名和密码是大小写敏感的。
* 在ACL文件中定义的MapService的名字必须与在Administrator中的完全一致。
* 只有在ACL文件中列出的MapServices才可用,即使你还有其他的MapServices在Administrator中运行。
下面的ACL文件包含一个限定的MapService和两个非限定的MapServices。
<?xml version="1.0"?>
<AIMSACL>
<USER name="*" services="SanFrancisco, World" />
<USER name="private" password="gray.hair" services="SecretData" />
</AIMSACL>
下面的ACL文件表明了怎样限定特定的机器访问限定的MapService,还增加了一个可以访问所有MapServices的用户。
<?xml version="1.0"?>
<AIMSACL>
<USER name="*" services="SanFrancisco, World" />
<USER name="private" password="gray.hair"
services="SecretData" trustedclients="198.102.62.1,198.102.62.22"/>
<USER name="superuser" password="all.access" services="*" />
</AIMSACL>
关于所有属性的描述,请参见ArcIMS Servlet Connector属性文件。
第四步:如果你使用的是Microsoft Windows 2000和Internet Information Server 5.0 (IIS),你需要为权限验证配置IIS。
在任务栏,点击 开始 | 设置 | 控制面板 | 管理工具 | Internet服务管理器。在左面板,双击机器名,展开树状目录,双击默认的Web站点。如果你运行的servlet engine软件是ServletExec或Jrun,双击Scripts;如果是Tomcat,双击jakarta。在右边面板,右键点击 ServletExec_ISAPI.dll,jrun.dll或isapi_redirect.dll,打开属性窗口。
点击"文件安全性"。
在"匿名访问和验证控制"栏点击"编辑"按钮。
取消"集成Windows验证"。
第五步:停止,重启servlet engine。如果servlet engine嵌入web服务器,停止、重启web服务器。
重启servlet engine(或web服务器)使得你在Esrimap_prop文件中的设置生效--通过ACL文件进行权限验证的工作完成了。
基于JDBC的ACL的权限验证
下面表明了通过基于JDBC的ACL设置MapServices的权限验证的步骤。前提条件假定你已经运行了一个关系型数据库,并且你已经安装并配置了JDBC驱动:
第一步:创建地图配置文件,设计web站点。(同基于文件的ACL第一步)
第二步:编辑Esrimap_prop文件。
前部分同基于文件的ACL的第二步,接下来要做的是:
useJdbc=True
使用可通过JDBC访问的数据库存储权限
jdbcDriver=< JDBC驱动的名称>
例如:jdbcDriver=database.sql.jdbc.JDBCDriver。驱动器所在目录必须是servlet engine的classpath设置的一部分。
jdbcUrl=<到数据库的URL >
到数据库的URL存储了访问控制信息。格式为:jdbc:<数据库类型>:@<机器名>.<域>.<组织代码>
如:jdbcUrl=jdbc:oracle:oci8:@arcims_maps.esri.com
jdbcUser=<数据库用户名>
访问数据库的用户名
jdbcPassword=<数据库用户的密码>
特定数据库用户的密码
jdbcUserTable=<数据表名>
数据库中存储有效用户和密码的表名
jdbcPermTable=<数据表名>
数据库中包含MapService名和特定用户访问权限列表的数据表名。
jdbcUidColumn=<数据库表字段名>
在数据库用户表和权限表中都存在的用户代码字段名
第三步:停止,重启servlet engine。如果servlet engine嵌入web服务器,停止、重启web服务器。(同基于文件的ACL第五步)
第四步:在关系型数据库中创建用户表
用户表包含了你希望访问你的MapServices的用户的名称和密码。它还包含了一个唯一的用户代码,ArcIMS通过它将此表和权限表连接。该表名必须与Esrimap_prop文件中jdbcUserTable设置的名称相同。该表必须包含下列字段:
字段名 类型(宽度)
Userid Number(32)
Username Varchar(64)
Password Varchar(64)
为了增加灵活性,你可以将userid字段命名为任何你希望的名称,只要它与Esrimap_prop文件中jdbcUidColumn 设定的名称一致即可。其他两个字段必须为username 和 password。
所有字段的描述信息,可以在ACL属性参考中找到。
第五步:在关系型数据库中为用户表添加记录
为用户表添加用户名和密码。确保userid是唯一的。你可以用*表明该MapServices不需要用户输入用户名和密码就可以访问。
Userid Username Password
1 *
2 USER1 PASSWORD1
3 USER2 PASSWORD2
4 USER3 PASSWORD3
第六步:在关系型数据库中创建权限表。
权限表将每个MapService与一组或多组用户名和密码关联。该表名必须与Esrimap_prop文件中jdbcPermTable定义的名称一致。该表必须包含下列字段:
UserID字段名必须与用户表中定义的名字和Esrimap_prop文件中jdbcUidColumn设定的名称一致。其他五个字段必须命名为以上字段名称。
所有字段的描述信息,可以在ACL属性参考中找到。
第七步:在关系型数据库中为权限表添加记录
为权限表添加用户代码,MapServices名和激活状态。每个记录只包含一个MapServices名。用户代码将MapService与用户名和密码关联起来。你可以增加其他的具有相同用户代码的记录与多个MapServices关联。下表显示了一个基本的权限表的配置。
字段名 类型(宽度)
Userid Number(32)
Service Varchar (64)
Active Number (32)
Expiration Data (格式MM/DD/YYYY HH:MM:SS)
Tclients Varchar (1024)
Ftags Varchar (1024)
你可以有选择地填写其他字段为MapService增加额外的限定条件。如,你可以增加过期时间 (10/16/2001 11:24:30),一组用逗号分开的通过IP地址识别的信任用户列表 (198.102.62.1,198.102.62.22) 和一组用逗号分开的限定功能的标签列表 (GET_GEOCODE,GET_EXTRACT).
第八步:如果你使用的是Microsoft Windows 2000和Internet Information Server 5.0 (IIS),你需要为权限验证配置IIS。(同基于文件的ACL第四步)
* 是否可以从特定的机器(通过IP地址判断)访问MapService
* 是否有未过期的访问权限(如未服务设定了有效期)
* 是否有特定请求的访问权限(如是否能执行地址匹配功能)
当接到从客户端发来的请求,Servlet Conncctor首先检查是否为MapService设定了权限验证。如果设定了,Servlet Conncector从客户端获取必要的信息--如用户名,密码--然后确定是否满足条件。如果条件满足,请求将被发给Application Server。否则,将会提示用户无权访问该MapService。
Servlet Conncctor通过访问控制列表(ACL)来管理限定的和非限定的MapServices以及权限验证信息。ACL有两种格式:基于文件的ACL和基于JDBC的ACL。
基于文件的ACL的主要优点是容易建立,不需要其他的部件支持。基于文件的ACL将权限信息保存在XML文件中,该文件可以通过任何文本编辑器建立。在这个文件中,你可以定义哪个MapServices被限定以及如何访问他们--如包含所需的用户名和密码。当Servlet初始化时,这个文件的内容被加载进内存。因此,如果你编辑了ACL文件,需要重新启动servlet engine (如果servlet engine 嵌入web服务器,则需要重启web服务器)使你的更改生效。而且,在ACL文件中定义的用户数量的增加会导致web服务器的内存使用量的增加。
基于JDBC 的ACL将权限信息保存在通过JDBC驱动程序访问的关系型数据库中。JDBC的ACL可以比文件的ACL管理更大量的用户和MapService。而且,如果你需要频繁更改ACL,基于JDBC 的ACL可以不终止服务,即不需要重新启动servlet engine,而使更改立即生效。为了使用基于JDBC的ACL,你必须运行一个关系型数据库(如Oracle),并且有它的JDBC驱动。
注意:只有通过ArcIMS Servlet Connector处理的HTTP请求,才可以使用权限管理,其他连接器(如ActiveX Connector)不可用。
基于文件的ACL的权限验证
下面表明了通过XML文件设置MapServices的权限验证的步骤:
第一步:创建地图配置文件,设计web站点。
通过Author创建地图配置文件(AXL),然后通过Designer设计站点的外观。
注意:Designer不能访问到被限定的MapServices;所以,你必须在限定权限之前生成站点。
第二步:编辑Esrimap_prop文件。
定位Esrimap_prop文件所在目录,因为servlet engine不同,安装的目录有所不同,并用文本编辑器进行编辑。注意ArcIMS在Windows 的<installation directory>ConnectorsServlet或UNIX的< installation directory>/Middleware/Servlet_Connector目录下安装了Servlet Connector的一套备份文件。不要编辑该目录下的文件,它不会影响Servlet Connector的操作。
按照下面的提示设置属性。你可以简单地通过移走Esrimap_prop文件中的注释字符(#)设置许多属性。这些属性名称大小写敏感,但属性值不敏感。在ArcIMS Servlet Connector 属性文件中详细地描述了这些属性。
注意:如果你同时为基于XML文件和基于JDBC的ACL设置了属性,那结果将使用JDBC的设置。
enable=True
使用ArcIMS Servlet Connector.
authenticate=True
使用Servlet Connector的权限验证
authMethods=Basic
两种权限验证的方法: Basic和Digest.。Digest 更安全,但不是所有的浏览器都支持。
authenticateWithSessi
允许Servlet Connector更高效地处理客户端的请求。
sessi
大多数情况下,120秒应该足够了。
aclFileName=< ACL 文件的全目录>/aimsacl.xml
一般地,你可以将ACL文件放在与Esrimap_prop文件相同的目录下。表示目录的斜杠必须是"/"。
realm=ArcIMS Network
当提示用户输入用户名和密码时,realm名显示在对话框上。
第三步:创建保存访问控制列表的XML文件。
用文本编辑器创建XML文件。该文件表明哪个用户有权访问哪个MapServices。
需要牢记的是:
* 确认按照在Esrimap_prop文件的aclFileName属性中定义的文件和目录名命名并保存该文件。
* 用户名和密码是大小写敏感的。
* 在ACL文件中定义的MapService的名字必须与在Administrator中的完全一致。
* 只有在ACL文件中列出的MapServices才可用,即使你还有其他的MapServices在Administrator中运行。
下面的ACL文件包含一个限定的MapService和两个非限定的MapServices。
<?xml version="1.0"?>
<AIMSACL>
<USER name="*" services="SanFrancisco, World" />
<USER name="private" password="gray.hair" services="SecretData" />
</AIMSACL>
下面的ACL文件表明了怎样限定特定的机器访问限定的MapService,还增加了一个可以访问所有MapServices的用户。
<?xml version="1.0"?>
<AIMSACL>
<USER name="*" services="SanFrancisco, World" />
<USER name="private" password="gray.hair"
services="SecretData" trustedclients="198.102.62.1,198.102.62.22"/>
<USER name="superuser" password="all.access" services="*" />
</AIMSACL>
关于所有属性的描述,请参见ArcIMS Servlet Connector属性文件。
第四步:如果你使用的是Microsoft Windows 2000和Internet Information Server 5.0 (IIS),你需要为权限验证配置IIS。
在任务栏,点击 开始 | 设置 | 控制面板 | 管理工具 | Internet服务管理器。在左面板,双击机器名,展开树状目录,双击默认的Web站点。如果你运行的servlet engine软件是ServletExec或Jrun,双击Scripts;如果是Tomcat,双击jakarta。在右边面板,右键点击 ServletExec_ISAPI.dll,jrun.dll或isapi_redirect.dll,打开属性窗口。
点击"文件安全性"。
在"匿名访问和验证控制"栏点击"编辑"按钮。
取消"集成Windows验证"。
第五步:停止,重启servlet engine。如果servlet engine嵌入web服务器,停止、重启web服务器。
重启servlet engine(或web服务器)使得你在Esrimap_prop文件中的设置生效--通过ACL文件进行权限验证的工作完成了。
基于JDBC的ACL的权限验证
下面表明了通过基于JDBC的ACL设置MapServices的权限验证的步骤。前提条件假定你已经运行了一个关系型数据库,并且你已经安装并配置了JDBC驱动:
第一步:创建地图配置文件,设计web站点。(同基于文件的ACL第一步)
第二步:编辑Esrimap_prop文件。
前部分同基于文件的ACL的第二步,接下来要做的是:
useJdbc=True
使用可通过JDBC访问的数据库存储权限
jdbcDriver=< JDBC驱动的名称>
例如:jdbcDriver=database.sql.jdbc.JDBCDriver。驱动器所在目录必须是servlet engine的classpath设置的一部分。
jdbcUrl=<到数据库的URL >
到数据库的URL存储了访问控制信息。格式为:jdbc:<数据库类型>:@<机器名>.<域>.<组织代码>
如:jdbcUrl=jdbc:oracle:oci8:@arcims_maps.esri.com
jdbcUser=<数据库用户名>
访问数据库的用户名
jdbcPassword=<数据库用户的密码>
特定数据库用户的密码
jdbcUserTable=<数据表名>
数据库中存储有效用户和密码的表名
jdbcPermTable=<数据表名>
数据库中包含MapService名和特定用户访问权限列表的数据表名。
jdbcUidColumn=<数据库表字段名>
在数据库用户表和权限表中都存在的用户代码字段名
第三步:停止,重启servlet engine。如果servlet engine嵌入web服务器,停止、重启web服务器。(同基于文件的ACL第五步)
第四步:在关系型数据库中创建用户表
用户表包含了你希望访问你的MapServices的用户的名称和密码。它还包含了一个唯一的用户代码,ArcIMS通过它将此表和权限表连接。该表名必须与Esrimap_prop文件中jdbcUserTable设置的名称相同。该表必须包含下列字段:
字段名 类型(宽度)
Userid Number(32)
Username Varchar(64)
Password Varchar(64)
为了增加灵活性,你可以将userid字段命名为任何你希望的名称,只要它与Esrimap_prop文件中jdbcUidColumn 设定的名称一致即可。其他两个字段必须为username 和 password。
所有字段的描述信息,可以在ACL属性参考中找到。
第五步:在关系型数据库中为用户表添加记录
为用户表添加用户名和密码。确保userid是唯一的。你可以用*表明该MapServices不需要用户输入用户名和密码就可以访问。
Userid Username Password
1 *
2 USER1 PASSWORD1
3 USER2 PASSWORD2
4 USER3 PASSWORD3
第六步:在关系型数据库中创建权限表。
权限表将每个MapService与一组或多组用户名和密码关联。该表名必须与Esrimap_prop文件中jdbcPermTable定义的名称一致。该表必须包含下列字段:
UserID字段名必须与用户表中定义的名字和Esrimap_prop文件中jdbcUidColumn设定的名称一致。其他五个字段必须命名为以上字段名称。
所有字段的描述信息,可以在ACL属性参考中找到。
第七步:在关系型数据库中为权限表添加记录
为权限表添加用户代码,MapServices名和激活状态。每个记录只包含一个MapServices名。用户代码将MapService与用户名和密码关联起来。你可以增加其他的具有相同用户代码的记录与多个MapServices关联。下表显示了一个基本的权限表的配置。
字段名 类型(宽度)
Userid Number(32)
Service Varchar (64)
Active Number (32)
Expiration Data (格式MM/DD/YYYY HH:MM:SS)
Tclients Varchar (1024)
Ftags Varchar (1024)
你可以有选择地填写其他字段为MapService增加额外的限定条件。如,你可以增加过期时间 (10/16/2001 11:24:30),一组用逗号分开的通过IP地址识别的信任用户列表 (198.102.62.1,198.102.62.22) 和一组用逗号分开的限定功能的标签列表 (GET_GEOCODE,GET_EXTRACT).
第八步:如果你使用的是Microsoft Windows 2000和Internet Information Server 5.0 (IIS),你需要为权限验证配置IIS。(同基于文件的ACL第四步)