Sun Java System Portal Server Secure Remote Access 7.2 管理指南

第 1 部分 Secure Remote Access 服务器组件

第 1 章 Portal Server Secure Remote Access 服务器简介

本章介绍 Sun JavaTM System Portal Server Secure Remote Access 以及 Sun Java System Portal Server 和 Sun Java System Portal Server Secure Remote Access 组件之间的关系。

本章包括以下主题:

Secure Remote Access 简介

Secure Remote Access 可让远程用户在 Internet 上安全地访问其组织的网络和服务。此外,还可为贵组织提供安全的 Internet 门户,从而使所有目标用户( 例如员工、业务合作伙伴以及普通公众)都能够访问其内容、应用程序和数据。

Secure Remote Access 软件可提供基于浏览器的安全远程访问,以从任意远程设备访问门户内容和服务。Secure Remote Access 是一种安全访问解决方案,用户无需客户机软件就可从任意装有启用了 Java™ 技术的浏览器的设备对其进行访问。与 Portal Server 的集成可确保用户对具有访问许可权的内容和服务进行安全加密式的访问。

Secure Remote Access 软件适用于部署高安全远程访问门户的企业。这些门户注重的是内联网资源的安全性、保护性以及保密性。Secure Remote Access 的体系结构正适合这些类型的门户。借助 Secure Remote Access 软件,用户可以通过 Internet 安全地访问内联网资源,而不会使这些资源公诸于 Internet。

Portal Server 能够以两种模式运行,即以下各节中所述的“开放模式”和“安全模式”。

开放模式

在开放模式下,安装 Portal Server 时不会安装 Secure Remote Access。尽管在此模式下 HTTPS 通信仍可进行,但无法实现安全远程访问。因此,用户不能访问安全的远程文件系统和应用程序。

开放门户和安全门户的主要区别在于,由开放门户提供的服务通常驻留在隔离区 (DMZ) 内,而不是驻留在安全的内联网中。DMZ 是公共 Internet 和私有内联网之间的一个小型受保护网络,通常在其两端以防火墙来划界。

如果门户不包含关于部署公共信息和允许访问免费应用程序的含敏感信息,则对大量用户所发出的访问请求的响应速度比使用安全模式更快。

在开放模式下,Portal Server 安装在防火墙后的单台服务器上。多台客户机穿过单台防火墙在 Internet 上访问 Portal Server。

图 1–1 开放模式下的 Portal Server(带有 Secure Remote Access)

开放模式下的 Portal Server。

安全模式

安全模式可使用户对所需的内联网文件系统和应用程序进行安全远程访问。

网关位于隔离区 (DMZ) 内。网关对所有内联网 URL 和应用程序提供了单个安全访问点,从而减少了防火墙中要打开的端口数。其他所有 Portal Server 服务(如“会话”、“验证”和标准“Portal 桌面”)均驻留在安全内联网中 DMZ 的后面。从客户机浏览器到网关的通信采用安全套接字层 (Secure Sockets Layer, SSL) 基础之上的 HTTP 进行加密。从网关到服务器和内联网资源的通信既可以是 HTTP,也可以是 HTTPS。

在安全模式下,SSL 用于加密客户机和网关之间的 Internet 连接。SSL 也可用于对网关与服务器之间的连接进行加密。存在于内联网与 Internet 之间的网关使客户机与 Portal Server 之间的安全路径得以延伸。

图 1–2 安全模式下的 Portal Server(带有 Secure Remote Access)

安全模式下的 Portal Server(带有 Secure Remote Access)

可另行添加服务器和网关来扩充站点。Secure Remote Access 软件可根据业务要求以各种方式进行配置。有关如何适应业务要求的详细信息,参见《Sun Java System Portal Server 7.2 Deployment Planning Guide》

Secure Remote Access 服务

Secure Remote Access 软件有五个主要组件:

配置 Secure Remote Access 属性

可在 Portal Server 管理控制台中使用以下服务配置 Secure Remote Access 属性:


注意 – 注意 –

网关不会收到有关在其运行期间对属性所作更改的通知。重新启动网关以使更新的配置文件属性(属于网关或任何其他服务)生效。有关详细信息,参见使用命令行选项配置网关属性


设置冲突解决方案

Procedure设置冲突解决方案级别

  1. 登录 Portal Server 管理控制台。

  2. 选择“Secure Remote Access”选项卡,然后单击所需的服务选项卡:Netlet、Netfile 或 Proxylet。

  3. 从“选择 DN”下拉式菜单中选择“组织”或“角色”。

  4. 从“COS 优先级”下拉列表框中选择所需的“冲突解决级别”。

  5. 单击“保存”以完成修改。

支持的应用程序

SRA 支持以下应用程序:

开始之前

Procedure为门户启用 SRA

  1. 通过使用 PortalServer_base/psadmin switch-sra-status -u amadmin -f <passwordfile> on 命令转换 SRA 状态。

  2. 通过使用 PortalServer_base/psadmin provision-sra -u amadmin -f <passwordfile> -p <portal-id> --gateway-profile <profile-name> --enable 命令置备 SRA 状态。

第 2 章 使用网关

章说明与网关有关的概念。有关管理网关的信息,参见第 16 章,管理网关。有关配置网关的信息,参见第 8 章,配置 Secure Remote Access 网关

本章包括以下主题:

网关简介

网关在源自 Internet 的远程用户会话与公司内联网之间提供了接口和安全屏障。网关可通过单个接口将来自内联网服务器和应用程序服务器的内容安全地呈现给远程用户。

对于每个网关实例,您必须完成以下任务:

其他与网关有关的主题包括:

创建网关配置文件

网关配置文件包含与网关配置相关的所有信息,包括网关监听时使用的端口、SSL 选项和代理选项。安装网关时,如果选择默认值,就会创建一个名为“default”的默认网关配置文件。与默认配置文件相对应的配置文件位于:/etc/opt/SUNWportal/platform.conf.default

其中 /etc/opt/SUNWportal 是所有 platform.conf.* 文件的默认位置。有关 platform.conf 文件的详细信息,参见了解 platform.conf 文件

当使用配置文件时,可执行以下任务:


注意 – 注意 –

不要将同一配置文件分配给在同一机器上运行的不同网关实例。由于端口号相同,此设置会造成冲突。

不要在为同一网关创建的不同配置文件中指定相同的端口号。以相同端口运行同一网关的多个实例会造成冲突。


创建网关的多个实例

要创建网关的多个实例,参见 《Sun Java System Portal Server 7.2 Installation and Configuration Guide》中的第 4  章 “Installing and Configuring a Gateway With Portal Server”

创建多宿主网关实例

宿主网关实例是一个 Portal Server 上的多个网关。要创建这些实例,请按照以下方式修改 platform.conf 文件:

gatewaybindipaddress = 0.0.0.0

使用同一 LDAP 创建网关实例

如果是创建使用同一 LDAP 的多个网关实例,请在创建第一个网关之后,在所有后续网关上执行以下操作:

/etc/opt/SUNWam/config/ 中,修改 AMConfig-instance-name .properties 中的以下区域,以便与第一个安装的网关实例一致。

参见使用同一 LDAP 创建网关实例

重新启动网关

通常,您无需重新启动网关。只有在发生以下任一事件时,才需要重新启动网关:

配置网关监视程序

可以配置监视程序监控网关状态的时间间隔。要启动或停止监视程序,请运行命令 ./psadmin sra-watchdog -u amadmin -f <password-file> -t <type> on|off。该时间间隔默认设置为 60 秒。要更改该值,请在 crontab 实用程序中编辑下面一行:


0-59 * * * * gateway-install-root/SUNWportal/bin/
/var/opt/SUNWportal/.gw. 5 > /dev/null 2>&1

参见 crontab 的手册页以便配置 crontab 条目。

指定虚拟主机

虚拟主机是指向同一机器 IP 和主机名的附加主机名。例如,如果某一主机名 abc 指向主机 IP 地址 192.155.205.133,则您可以添加指向同一 IP 地址的另一个主机名 cde

指定与 Access Manager 联络的代理

您可以指定一个代理主机,网关将使用它来联络在 Portal Server 之上部署的“SRA 核心”(RemoteConfigServlet)。网关使用此代理可访问到 Portal Server 和 Access Manager。参见指定代理

了解 platform.conf 文件

默认情况下,platform.conf 文件位于: /etc/opt/SUNWportal

platform.conf 文件包含网关所需要的详细信息。本节提供了一个范例 platform.conf 文件,并且说明了所有条目。

在配置文件中包含所有机器特定细节的优势在于:一个通用的配置文件可以被多个机器上运行的各个网关共享。

以下是 platform.conf 文件的样例。


Tue May 30 11:51:23 IST 2006
debug.com.sun.portal.rewriter.original.level=INFO
gateway.favicon=
gateway.bindipaddress=10.12.154.236
debug.com.sun.portal.sra.rproxy.toFromServer.handler.java.util.logging.FileHandler.pattern=
/var/opt/SUNWportal/logs/sra/default/Gateway.toFromServer.%u.%g.log
gateway.port=443
rewriterproxy.jvm.flags=-ms64m -mx128m
portal.server.instance=default
debug.com.sun.portal.handler.java.util.logging.FileHandler.filter=
gateway.jdk.dir=/usr/jdk/entsys-j2se
gateway.ignoreURIList=/MSOffice/cltreq.asp,/_vti_bin/owssvr.dll
debug.com.sun.portal.rewriter.rest.level=INFO
gateway.trust_all_server_certs=true
debug.com.sun.portal.handler.java.util.logging.FileHandler.append=true
gateway.cdm.cacheCleanupTime=300000
gateway.httpurl=
debug.com.sun.portal.handler.java.util.logging.FileHandler.count=1
gateway.jvm.classpath=
debug.com.sun.portal.setserverlogs=false
gateway.protocol=https
debug.com.sun.portal.sra.rproxy.toFromServer=java.util.logging.FileHandler
rewriterproxy.jvm.classpath=
gateway.enable.customurl=false
debug.com.sun.portal.sra.rproxy.toFromBrowser=java.util.logging.FileHandler
debug.com.sun.portal.handler.java.util.logging.FileHandler.formatter=com.sun.portal.
log.common.PortalLogFormatter
debug.com.sun.portal.sra.rproxy.toFromBrowser.handler.java.util.logging.FileHandler.pattern=
/var/opt/SUNWportal/logs/sra/default/Gateway.toFromBrowser.%u.%g.log
debug.com.sun.portal.level=INFO
debug.com.sun.portal.rewriter.unaffected.separatefile=true
gateway.enable.accelerator=false
debug.com.sun.portal.rewriter.original.separatefile=true
gateway.virtualhost=nicp236.india.sun.com 10.12.154.236
debug.com.sun.portal.stacktrace=true 
gateway.host=nicp236.india.sun.com
debug.com.sun.portal.handler.java.util.logging.FileHandler.pattern=
/var/opt/SUNWportal/logs/sra/default/%logger.%sraComponentType.%u.%g.log
gateway.certdir=/etc/opt/SUNWportal/cert/default
gateway.sockretries=3
gateway.allow.client.caching=true
debug.com.sun.portal.rewriter.unaffected.level=INFO
debug.com.sun.portal.rewriter.uriinfo.separatefile=true
log.config.check.period=2000
debug.com.sun.portal.rewriter.rewritten.level=INFO
gateway.userProfile.cacheSize=1024
debug.com.sun.portal.rewriter.rulesetinfo.level=INFO
netletproxy.jvm.classpath=
gateway.userProfile.cacheSleepTime=60000
debug.com.sun.portal.rewriter.uriinfo.level=INFO
debug.com.sun.portal.rewriter.rest.separatefile=true
gateway.notification.url=notification
debug.com.sun.portal.rewriter.rulesetinfo.separatefile=true
gateway.logdelimiter=&&
gateway.ignoreServerList=false
gateway.jvm.flags=-ms64m -mx128m
debug.com.sun.portal.handler.java.util.logging.FileHandler.limit=5000000
gateway.dsame.agent=http\://sunone216.india.sun.com\:8080/portal/RemoteConfigServlet
gateway.httpsurl=
gateway.retries=6
gateway.userProfile.cacheCleanupTime=300000
gateway.logging.password=X03MO1qnZdYdgyfeuILPmQ\=\= UX9x0jIua3hx1YOVRG/TLg\=\=
netletproxy.jvm.flags=-ms64m -mx128m
debug.com.sun.portal.rewriter.rewritten.separatefile=true
gateway.user=noaccess
gateway.external.ip=10.12.154.236
debug.com.sun.portal.handler=java.util.logging.FileHandler
gateway.cdm.cacheSleepTime=60000
rewriterproxy.accept.from.gateways=
rewriterproxy.checkacl=false

下表列出并介绍了 platform.conf 文件中的所有字段。

表 2–1 文件属性

表项 

默认值 

描述 

gateway.user

noaccess 

以该用户身份运行网关。 

必须以超级用户身份启动网关,在初始化之后将丧失超级用户权限而成为该用户。 

gateway.jdk.dir

 

这是网关使用的 JDK 目录的位置。 

gateway.dsame.agent

 

这是网关启动时为获取其配置文件所联络的 Access Manager 的 URL。 

portal.server.protocol

portal.server.host

portal.server.port

 

这是 Portal Server 默认安装正在使用的协议、主机和端口。 

gateway.protocolgateway. hostgateway.port

 

这是网关的协议、主机和端口。这些值与您在安装期间所指定的模式和端口相同。这些值用于构造通知用的 URL。 

gateway. trust_all_server_certs

true 

该项指示网关是否必须信任所有服务器证书,或者仅信任那些位于网关证书数据库中的证书。 

gateway. trust_all_server_cert_domains

false 

当网关与服务器之间进行 SSL 通信时,会将服务器证书提交给网关。默认情况下,网关检查服务器主机名是否与服务器证书 CN 相同。 

如果该属性值被设为 true,则网关将禁止对所接收的服务器证书进行域检查。 

gateway.virtualhost

 

如果网关机器具有多个已配置的主机名,则可以在此字段中指定一个不同的名称和身份认证提供者地址。 

gateway.virtualhost. defaultOrg=org

 

该项指定用户登录到的默认 Org。 

例如,假设虚拟主机字段条目如下所示: 

gateway.virtualhost=test.com employee.test.com

Managers.test.com

而默认 Org 条目为: 

test.com.defaultOrg = o=root,dc=test,dc=com

employee.test.com.defaultOrg = o=employee,dc=test,dc=com

Manager.test.com.defaultOrg = o=Manager,dc=test,dc=com

用户可以使用 https://manager.test.com,而不是 https://test.com/o=Manager,dc=test,dc=com 登录到管理人员的 Org。


注 –

virtualhost 和 defaultOrg 在 platform.conf 文件中区分大小写,但在 URL 中使用时却不区分。


gateway.notification.url

 

网关主机、协议和端口的组合用于构造通知用的 URL。它用于从 Access Manager 接收会话通知。 

请确保通知用的 URL 与任何组织名称都不相同。如果通知 URL 与某一组织名匹配,则尝试连接至该组织的用户得到的是空白页,而不是登录页。 

gateway.retries

 

这是启动时网关试图联络 Portal Server 的次数。 

gateway.debug

error

该项可设置网关的调试级别。调试日志文件位于 debug-directory/files。调试文件的位置在 gateway.debug.dir 条目中指定。

调试级别为: 

  • error - 只有严重的错误才会记录到调试文件中。当出现此类错误时,网关通常停止运行。

  • warning - 记录警告消息。

  • message - 记录所有调试消息。

  • on - 在控制台上显示所有调试信息。

调试文件为: 

srapGateway.gateway-profile-name - 包含网关调试消息。

Gateway_to_from_server.gateway-profile-name - 在消息模式下,该文件包含网关与内部服务器之间的所有请求和响应标题。

要生成该文件,请更改 /var/opt/SUNWportal/debug 目录的写权限。

Gateway_to_from_browser.gateway-profile-name - 在消息模式下,该文件包含网关和客户机浏览器间的所有请求和响应标题。

要生成该文件,请更改 /var/opt/SUNWportal/debug 目录的写权限。

gateway.debug.dir

 

这是生成所有调试文件的目录。 

此目录必须具有足有的权限以将 gateway.user 中所提及的用户写入文件。

gateway.logdelimiter

 

当前未使用。 

gateway.external.ip

 

对于多宿主网关机器(一部机器具有多个 IP 地址),需要在此指定外部 IP 地址。Netlet 使用该 IP 用于运行 FTP。 

gateway.certdir

 

该项指定证书数据库的位置。 

gateway.allow.client.caching

true 

允许或禁止客户机高速缓存。 

如果允许,则客户机浏览器就可以为实现更好的性能而高速缓存静态页和图像(通过已缩减的网络通信量)。 

如果不允许,则不会缓存任何内容且安全性更高,但性能会随着网络负载增高而下降。 

gateway.userProfile.cacheSize

 

这是在网关获取高速缓存的用户配置文件条目数。如果条目数超过了该值,则会出现频繁重试以便清除高速缓存。 

gateway.userProfile. cacheSleepTime

 

设置清除高速缓存的睡眠时间(以秒为单位)。 

gateway.userProfile. cacheCleanupTime

 

以秒为单位的最大时间,超过该时间后就可以删除一个配置文件条目。 

gateway.bindipaddress

 

在多宿主机器上,这是 IP 地址,网关将其 serversocket 绑定到该地址。要配置网关以侦听所有接口,请替换该 IP 地址以使 gateway.bindipaddress=0.0.0.0

gateway.sockretries

当前未使用。 

gateway.enable.accelerator

false 

如果设置为 true,则允许支持外部加速器。 

gateway.enable.customurl

false 

如果设置为 true,则允许管理员为网关指定一个自定义的 URL 以便将页重写至该 URL。 

gateway.httpurl

 

与网关将页面重写到的自定义 URL 相应的 HTTP 反向代理 URL。Proxylet 启用时使用此条目。 

gateway.httpsurl

 

与网关将页面重写到的自定义 URL 相应的 HTTPS 反向代理 URL。如果 Proxylet 已启用,则不使用此条目。 

gateway.favicon

 

网关将 favicon.icon 文件请求重定向到的 URL。

它用于 Internet Explore 和 Netscape 7.0 及更高版本中的“收藏图标”。 

如果留为空白,网关会向浏览器发回一条 404 未找到消息。 

gateway.logging.password

 

用户 amService-srapGateway 的 LDAP 密码,网关使用它创建其应用程序会话。

该字段既可以是加密文本,也可以是明文。 

http.proxyHost

 

此代理主机用于联络 Portal Server。 

http.proxyPort

 

这是主机用于联络 Portal Server 的端口。 

http.proxySet

 

如果需要代理主机,将此属性设置为 true。如果将该属性设置为 false,则忽略 http.proxyHosthttp.proxyPort

portal.server.instance

 

该属性的值是相应的 /etc/opt/SUNWam/config/AMConfig-instance-name.properties 文件。如果该值为默认值,则其指向 AMConfig.properties

gateway.cdm.cacheSleepTime

60000 

从 Access Manager 发送至网关的高速缓存“客户机检测模块”响应的超时值。 

gateway.cdm.cacheCleanupTime

300000 

从 Access Manager 发送至网关的高速缓存“客户机检测模块”响应的超时值。 

netletproxy.port

10555 

Netlet 代理守护进程在此端口侦听请求。 

rewriterproxy.port

10555 

“重写器代理”守护进程在此端口侦听请求。 

gateway.ignoreServerList

false 

如果设置为 true,则使用 AMConfig.properties 文件中指定的值来构造 Access Manager 服务器 URL。当 Access Manager 服务器躲在负载平衡器后面时,将此属性设置为 true。

rewriterproxy.accept.from.gateways

 

此属性是指 IP 地址列表,可使重写器代理接受来自该列表的请求 。它在 HTTP 和 HTTPS 模式下均可运行。它用于提高安全性,只接受来自该集合的请求,而不处理所有其他请求。IP 地址可使用逗号分隔。默认值为空,被视为传统模式,即接受所有送至重写器代理的请求。 

rewriterproxy.checkacl=

false 

启用该属性,可使重写器代理如同网关一样检查 ACL 值。传统模式值为“false”。当设置为 true 时,重写器代理将在指定的 DN 上根据网关访问服务中指定的值来检查 URL,并将根据位于该处的列表集合允许/拒绝请求。该值在 HTTP 和 HTTPS 模式下均非常有用。 

使用 Web 代理

您可以使用第三方 Web 代理 配置网关以联系 HTTP 资源。Web 代理位于客户机和 Internet 之间。

Web 代理配置

不同的代理可能用于不同的域和子域。这些条目告诉网关使用哪个代理去联络特定域中的特定子域。在网关中指定的代理配置具有如下功能:


注 –

如果您正通过标准“Portal 桌面”的“书签”频道访问 URL,但未满足上述任一条件,则网关将向浏览器发送一条重定向指令。浏览器使用它自己的代理设置访问 URL。


语法


domainname [web_proxy1:port1]|subdomain1 [web_proxy2:port2]|

示例


sesta.com wp1:8080|red wp2:8080|yellow|* wp3:8080

* 通配符可匹配一切内容

其中:

sesta.com 是域名而 wp1 是在端口 8080 上用于联络的代理。

red 是子域而 wp2 是在端口 8080 上用于联络的代理。

yellow 是子域。由于没有指定代理,因此使用为域指定的代理,即端口 8080 上的 wp1

* 指示其他所有子域都需要在端口 8080 上使用 wp3


注 –

如果未指定端口,则默认使用 8080 端口。


处理网络代理信息

当客户机尝试访问特定 URL 时,URL 中的主机名会与“域和子域的代理”列表中的条目匹配。要考虑与所请求主机名的最长后缀相匹配的条目。例如,假设所请求的主机名为 host1.sesta.com。会按顺序进行以下搜索,直到找到匹配条目为止。

考虑以下“域和子域代理”列表中的条目:


com p1| host1 p2 | host2 | * p3
sesta.com p4 | host5 p5 | * p6
florizon.com | host6
abc.sesta.com p8 | host7 p7 | host8 p8 | * p9
host6.florizon.com p10
host9.sesta.com p11
siroe.com | host12 p12 | host13 p13 | host14 | * p14
siroe.com | host15 p15 | host16 | * p16
* p17

网关会按照以下的表格所示,将这些条目内部映射到表格。

表 2–2 域和子域代理列表中条目的映射

数量 

域和子域代理列表中的条目 

代理 

描述 

com 

p1 

如列表中指定。 

host1.com 

p2 

如列表中指定。 

host2.com 

p1 

由于没有为 host2 指定任何代理,因而使用域的代理。 

*.com 

p3 

如列表中指定。 

sesta.com 

p4 

如列表中指定。 

host5.sesta.com 

p5 

如列表中指定。 

*.sesta.com 

p6 

如列表中指定。 

florizon.com 

直接 

有关详细信息,参见条目 14 的说明。 

host6.florizon.com 

– 

有关详细信息,参见条目 14 的说明。 

10 

abc.sesta.com 

p8 

如列表中指定。 

11 

host7.abc.sesta.com 

p7 

如列表中指定。 

12 

host8.abc.sesta.com 

p8 

如列表中指定。 

13 

*.abc.sesta.com 

p9 

如列表中指定。在 abc.sesta.com 域下,所有主机(host7host8 除外)都会使用 p9 作为代理。

14 

host6.florizon.com 

p10 

此条目与条目 9 相同。条目 9 指示直接连接,但是此条目指示应当使用代理 p10。倘若有两个这样的条目,含有代理信息的条目被视为有效条目。另一个条目将被忽略。 

15 

host9.sesta.com 

p11 

如列表中指定。 

16 

siroe.com 

直接 

由于没有为 siroe.com 指定任何代理,所以尝试进行直接连接。

17 

host12.siroe.com 

p12 

如列表中指定。 

18 

host13.siroe.com 

p13 

如列表中指定。 

19 

host14.siroe.com 

直接 

由于没有为 host14 指定任何代理,所以尝试进行直接连接。

20 

*.siroe.com 

p14 

参见表项 23 的说明。 

21 

host15.siroe.com 

p15 

如列表中指定。 

22 

host16.siroe.com 

直接 

由于没有为 host16 或 siroe.com 指定任何代理,所以尝试进行直接连接。

23 

*.siroe.com 

p16 

类似于条目 20,但是所指定的代理却不同。在此情况下,无法知道网关的确切行为。可能使用两个代理中的任意一个。 

24 

p17 

如果没有其他条目与所请求的 URL 匹配,则使用 p17 作为代理。


提示 –

您可以将“域和子域代理”列表中的各个条目放在列表中单独的行上,而不是使用 | 符号分隔代理条目。例如,不使用一个条目:


sesta.com p1 | red p2 | * p3

您可以按以下方式指定此信息:


sesta.com p1
red.sesta.com p2
*.sesta.com p3

这种列表格式更容易跟踪重复的条目或任何其他多义的情况。


基于“域和子域代理”列表进行重写

重写器也使用“域和子域代理”列表中的条目。重写器重写所有 URL(它们的域与“域和子域代理”列表中列出的域相匹配)。


注意 – 注意 –

不会考虑重写“域和子域的代理”列表中的 * 条目。例如,不会考虑条目 24。


有关重写器的信息,参见第 4 章,使用重写器

默认域和子域

当 URL 中的目标主机不是全限定主机名时,默认的域和子域将用于到达全限定名。

假设管理控制台的“默认域”字段中的值是:


red.sesta.com

注 –

需要在“域和子域代理”列表中具有相应的条目。


在上面的示例中,sesta.com 是默认域而默认子域是 red

如果请求的 URL 是 host1,则使用默认的域和子域将此条目解析为 host1.red.sesta.com。然后,在“域和子域代理”列表中查找 host1.red.sesta.com

使用自动代理配置

要忽略“域和子域代理”列表中的信息,请启用“自动代理配置”功能。

当使用代理自动配置 (Proxy Auto Configuration, PAC) 文件时:

PAC 文件用法示例

以下示例显示在“域和子域代理”列表中列出的 URL 及相应的 PAC 文件。

返回 DIRECT 或 NULL 的示例

如果将这些代理用于域和子域:

*intranet1.com proxy.intranet.com:8080

intranet2.com proxy.intranet1.com:8080

相应的 PAC 文件是:


// Start of the PAC File
function FindProxyForURL(url, host) {
         if (dnsDomainIs(host, ".intranet1.com")) {
             return "DIRECT";
         }
          if (dnsDomainIs(host, ".intranet2.com")) {
              return "PROXY proxy.intranet1.com:8080";
          }
          return "NULL";
}
//End of the PAC File

返回 STARPROXY 的示例

如果将这些代理用于域和子域:

intranet1.com

intranet2.com.proxy.intranet1.com:8080

internetproxy.intranet1.com:80

相应的 PAC 文件是:


// Start of the PAC File
function FindProxyForURL(url, host) {
          if (dnsDomainIs(host, ".intranet1.com")) {
              return "DIRECT";
          }
          if (dnsDomainIs(host, ".intranet2.com")) {
              return "PROXY proxy.intranet1.com:8080;" +
                  "PROXY proxy1.intranet1.com:8080";
          }
          return "STARPROXY internetproxy.intranet1.com:80";
}
//End of the PAC File

在此情况下,如果请求 .intranet2.com 域中的主机,网关会联络 proxy.intranet1.com:8080。如果 proxy.intranet1.com:8080 停用,则请求失败。网关不进行故障转移而联络 proxy1.intranet1.com:8080

指定 PAC 文件的位置

指定 PAC 文件位置的格式取决于其所在的位置,如下所示:

在单独的会话中添加服务

当您在单独的会话中添加 Portal Server 服务时:

使用 Netlet 代理

Netlet 信息包在网关处解码并被发送至目标服务器。然而,网关需要通过隔离区 (DMZ) 和内联网之间的防火墙,才能访问所有的 Netlet 目标主机。此设置需要在防火墙中打开许多端口。Netlet 代理可于将防火墙中打开的端口数量降至最低。

Netlet 代理通过延展客户机至网关最终至内联网中的 Netlet 代理之间的安全隧道,从而增强了网关和内联网之间的安全性。通过使用代理,Netlet 信息包将被代理解码然后发送到目标服务器地。

使用 Netlet 代理的优点如下:

您可以执行以下任务:

显示在安装和未安装 Netlet 代理的情况下,网关和 Portal Server 的三个实现示例。组件包括一台客户机、两个防火墙、驻留在两个防火墙之间的网关、Portal Server 和 Netlet 目标服务器。

第一种方案显示网关和未安装 Netlet 代理的 Portal Server。数据加密仅从客户机扩展至网关。对于每个 Netlet 连接请求,都会在第二个防火墙中打开一个端口。

在第二种方案显示的网关和 Portal Server 中,Portal Server 上安装了 Netlet 代理。数据加密从客户机一直扩展到 Portal Server。由于所有 Netlet 连接都通过 Netlet 代理路由,因此在第二个防火墙中仅需为 Netlet 请求打开一个端口。

第三种方案显示网关以及在单独节点上安装 Netlet 代理的 Portal Server。在单独节点上安装 Netlet 代理将减少 Portal Server 节点上的负载。此外,仅需在第二个防火墙中打开两个端口。一个端口将请求送至 Portal Server,另一个端口将 Netlet 请求发送至 Netlet 代理服务器。

图 2–1 Netlet 代理的实现

Netlet 代理的实现

启用 Netlet 代理

通过使用 Portal Server 管理控制台中的网关服务可启用 Netlet 代理。

重新启动 Netlet 代理

可将 Netlet 代理配置为只要代理被意外终止就重新启动。可以计划监视程序进程时间表来监控 Netlet 代理,只要它停止运行就重新启动。

也可以手动重新启动 Netlet 代理。有关步骤,参见重新启动 Netlet 代理

配置 Netlet 代理监视器

可以配置监视程序监控 Netlet 代理状态的时间间隔。该时间间隔默认设置为 60 秒。要更改此间隔,请将以下一行添加至 crontab 文件:

0-59 * * * * netlet-install-dir/bin/checkgw /var/opt/SUNWportal/.gw 5 > /dev/null 2>&1


注 –

要启动或停止监视程序,请运行命令 ./psadmin sra-watchdog -u amadmin -f <password-file> -t <type> on|off


使用重写器代理

重写器代理安装于内联网中。网关不会直接尝试检索内容,而是将所有请求转发至重写器代理,由重写器代理获取内容并将其返回至网关。

使用重写器代理的优点如下:

如果未指定重写器代理,那么当用户尝试访问内联网计算机时,网关组件将会直接连接到内联网计算机。

如果您将重写器代理用作负载平衡器,请确保重写器的 platform.conf.instance_name 指向负载平衡器的 URL。此外,请在 Portal Server 列表中指定负载平衡器主机。

如果每个网关实例都有多个重写器代理实例(不必位于门户节点上),请在 platform.conf 文件中以 host-name:port 形式提供每个重写器代理的详细信息,不是重写器代理的单个端口条目。

创建重写器代理的实例

使用 rwpmultiinstance 脚本在 Portal Server 节点上创建新的重写器代理实例。创建网关配置文件后运行此脚本。

参见创建重写器代理实例

启用重写器代理

在 Access Manager 管理控制台中,通过“SRA 配置”下的网关服务启用重写器代理。

重新启动重写器代理

可以将重写器代理配置为只要代理被意外终止就重新启动。可以制定监视程序进程计划来进行监控,只要出现此种情况就重新启动。

也可以手动重新启动重写器代理。

参见重新启动重写器代理

配置重写器代理监视程序

可以配置监视程序监控重写器代理状态的时间间隔。该时间间隔默认设置为 60 秒。要更改时间间隔,请将以下一行添加至 crontab 文件中:

0-59 * * * * rewriter-proxy-install-root /bin/checkgw /var/opt/SUNWportal/.gw 5 > /dev/null 2>&1


注 –

要启动或停止监视程序,请运行命令 ./psadmin sra-watchdog -u amadmin -f <password-file> -t <type> on|off


与网关一起使用反向代理

代理服务器将 Internet 内容传送至内联网,而反向代理将内联网内容传送至 Internet。您可以配置反向代理的部署,以实现负载平衡和高速缓存。

如果部署中网关前面有第三方反向代理,必须用反向代理的 URL 重写响应内容,而不是网关的 URL。对此,需要进行下列配置。

参见启用反向代理

获取客户机信息

当网关将客户机请求转发至任何内部服务器时,它将 HTTP 标题添加到 HTTP 请求中。可以使用这些报头来获取额外的客户机信息并检测网关是否存在。

要查看 HTTP 请求报头,请将 platform.conf 文件中的条目设置为 gateway.error=message。然后,使用 servlet API 的 request.getHeader()。下表列出了 HTTP 报头中的信息。

表 2–3 HTTP 报头中的信息

报头 

语法 

描述 

PS-GW-PDC 

X-PS-GW- PDC: true/false

指示是否已在网关启用 PDC。 

PS-Netlet 

X-PS-Netlet:enabled=true/false

指示网关是否已启用或禁用 Netlet。 

如果 Netlet 已启用,则会填充加密选项,指示网关是以 HTTPS (encryption=ssl) 模式还是以 HTTP 模式 (encryption=plain) 运行。

例如: 

  • PS-Netlet: enabled=false

    Netlet 已禁用。

  • PS-Netlet: enabled=true; encryption=ssl

    Netlet 通过以 SSL 模式运行的网关启用。

    当未启用 Netlet 时,encryption=sslencryption=plain 不会被填充。

PS-GW-URL 

X-PS-GW-URL: http(s)://gatewayURL(:port)

指示客户机连接的 URL。 

如果端口为非标准端口,例如,如果网关是 HTTP/HTTPS 模式而端口并非 80/443,则也会填充 :port

PS-GW-Rewriting-URL 

X-PS-GW-URL: http(s)://gatewayURL(:port)/[SessionInfo]

指示网关将全部页重写至的 URL。 

  1. 当浏览器支持 cookie 时,此报头的值与 PS-GW-URL 报头相同。

  2. 当浏览器不支持 cookie 时:

    • 如果目标主机列于“用户会话 Cookie 被转发到的用户会话”字段中,该值为网关将页面重写到的实际 URL(包括已编码的 SessionID 信息)。

    • 如果目标主机未列于“用户会话 Cookie 被转发到的用户会话”字段中,则 SessionInfo 字符串为 $SessionID


      注 –

      作为响应的一部分,如果用户的 Access Manager sessionId 发生变化(就像来自验证页的响应那样),则使用该值(而不是先前在报头中指示的值)重写页面。


      例如:

    • 如果浏览器支持 cookie:

PS-GW-Rewriting-URL: https://siroe.india.sun.com:10443/ 

  • 如果浏览器不支持 cookie 且端服务器列于“用户会话 Cookie 被转发到的用户会话”字段中。

PS-GW-Rewriting-URL: https://siroe.india.sun.com:10443/SessIDValCustomEncodedValue/ 

  • 如果浏览器不支持 cookie 且端服务器未列于“用户会话 Cookie 被转发到的用户会话”字段中。

PS-GW-Rewriting-URL: https://siroe.india.sun.com:10443/$SessionID 

PS-GW-CLientIP 

X-PS-GW-CLientIP: IP

表示网关从 recievedSocket.getInetAddress().getHostAddress() 获取的 IP。

如果直接连接至网关,则该值可提供客户机的 IP。 

使用验证链

验证链提供了比常规验证机制更高级别的安全性。可用多个验证机制验证用户。

这里所描述的过程仅用于在网关同时启用验证链和个人数字证书 (Personal Digital Certificate, PDC) 验证。有关网关上无 PDC 验证的验证链信息,参见 Access Manager 管理指南

例如,如果将 PDC 和 Radius 验证模块链在一起,用户须得通过全部三个模块的验证才能访问标准“Portal 桌面”。

有关步骤,参见向现有 PDC 实例添加验证模块


注 –

启用后,PDC 总是第一个显示给用户的验证模块。


使用通配符证书

通配符证书接受具有主机的全限定 DNS 名中通配符的单个证书。

通过使用证书,可以保护同一域内的多个主机。例如,*.domain.com 的证书可用于 abc.domain.comabc1.domain.com。此证书对于 domain.com 域中的任何主机都有效。

禁用浏览器高速缓存

由于可通过网关组件仅使用 Web 浏览器从任何地方安全地访问后端公司数据,因此客户机不应在本地对信息进行高速缓存。

通过修改特定网关的 platform.conf 文件中的属性,可以禁止通过网关对重定向的页面进行高速缓存。

禁用该选项会影响网关性能。每当刷新标准“Portal 桌面”,网关就必须检索该页所引用的所有内容,例如先前可能已经被浏览器高速缓存的图像。然而,启用该功能意味着远程访问安全内容将不会在客户端站点留下高速缓存的痕迹。如果从不受公司 IT 控制的网吧或类似的远程位置访问公司网络,此因素可能比性能问题更重要。

参见禁用浏览器高速缓存

自定义网关服务用户界面

本节讨论可以编辑的各种网关属性文件。

修改 srapGateway.properties 文件

您可以编辑该文件用于以下目的:

修改 srapgwadminmsg.properties 文件

您可以出于以下目的编辑该文件:

共享 LDAP 目录

当 Portal Server 和 Access Manager 服务器的两个实例共享相同的 LDAP 目录时,Portal Server、Access Manager 和网关的所有后续实例均共享相同的 LDAP 目录。参见共享 LDAP 目录

第 3 章 使用 Proxylet

本章说明 Proxylet,它使用户能够通过网关访问内联网 Web 页而无需解析 Web 页。

使用 Proxylet

Proxylet 概述

Proxylet 是可以将自身设置为客户机上的代理服务器的 Java applet。Proxylet 读取并修改客户机上“代理自动配置”(Proxy Auto Config, PAC) 文件中的代理设置,以使代理设置指向本地代理服务器 (Proxylet)。

Proxylet 从网关继承传输模式。如果将网关配置为在 SSL 上运行,则 Proxylet 会在客户机和网关或目标服务器之间建立一个安全通道。对于加密,如果客户机 JVM 为 1.4 或更高版本,或者所需的 jar 文件位于客户机上,则 Proxylet 使用 JSSE API。否则使用 KSSL API。解密在客户机上进行。

在网关配置文件中指定定向到网关的 URL 的域和子域。如果 URL 不是网关处理的域的一部分,则请求将重定向到 Internet。如果一个特定 URL 域在网关配置文件中列出,则 Proxylet 会重置客户机代理设置以指向网关。

如果在网关处启用了“个人数字证书”(Personal Digital Certificate, PDC),则 Proxylet 支持客户端验证。要检查是否启用了 PDC,参见获取客户机信息

Proxylet 是从 Portal Server 管理控制台中启用的,也可以在管理控制台中指定客户机 IP 地址或代理主机名和端口。如果启用了 Proxylet,则它将检查客户机的以下信息:

如果满足所有要求,则会下载 applet 并在客户机上启动。如果客户机没有安装 JRE 1.4.2 或更高版本,将自动使用 Proxylet 下载 JRE(如果您拥有 Internet 连接和管理权限)。

使用 Proxylet 时,它会从“代理自动配置”(Proxy Auto Configuration, PAC) 文件或代理配置列表检索代理设置。


注 –

确保用户了解当使用 Proxylet applet 时,必须禁用浏览器弹出式窗口拦截器。


HTTPS 支持

Proxylet 支持 HTTPS,具有以下功能:

使用 Proxylet 的优点

与重写器不同,Proxylet 很少或根本不需要进行安装后更改。与第三方软件(如 Microsoft Exchange Server)的集成非常简单。另外,Proxylet 不触及 Web 内容,因而网关性能得到了提高。由于 Proxylet 不会修改内容或更改数据,因此用户可以下载任何类型的内容,如 targzip 文件。

配置 Proxylet

有关启用和配置 Proxylet 的信息,参见第 13 章,配置 Proxylet


注 –

如果用户没有相应的 Java 虚拟机 (Java Virtual Machine, JVM) 来运行 Proxylet,浏览器会连接到 Sun Web 站点以下载“Java 运行时环境”。如果用户的浏览器设置未包含正确的值,或用户正在使用直接代理设置而未访问至 Internet,则无法下载 Proxylet。


第 4 章 使用重写器

Secure Remote Access 的重写器组件允许用户利用解析 Web 页面来通过网关访问内联网 Web 页面。

本章包括以下主题:

重写器简介

借助 Secure Remote Access 的重写器组件,最终用户可以浏览内联网,方法是修改 Web 页上引用的“统一资源标识符”(Uniform Resource Identifier, URI),以使其指向网关。URI 定义了一种在任何注册名称空间中封装名称的方法,并用名称空间对名称进行标记。最常用的 URI 类型为统一资源定位符 (Uniform Resource Locators, URL)。重写器仅支持 HTTP 或 HTTPS。此支持与协议的大小写无关。重写器仅支持出现在相对 URL 中的反斜线符号。


示例 4–1 重写 URL

http://abc.sesta.com\\index.html 会被重写。

而以下这些 URL 不会被重写:http:\\\\abc.sesta.com http:/abc.com


字符集编码

HTTP 标准要求 HTTP 报头或 HTML 元标记为网页指定一个字符集。但有时无法获得此信息。字符集必须已知,以便设置数据编码并按照创建者的意图显示数据。

要检测字符集,请从 Java Enterprise System Accessory CD 安装 SUNWjchdt 软件包。如果安装了此产品,重写器会检测到它,并在需要时使用。


注 –

使用此产品可能会影响性能,因此只有需要时才应安装。有关安装、配置以及使用的详细信息,参见 jcharset_readme.txt


重写器使用方案

当用户想通过网关访问内联网网页时,可使用重写器来获得网页。重写器由 URLScraper 和网关使用。

URLScraper

URL Scraper 提供者可从配置的 URI 获取内容。将这些 URI 发送到浏览器之前,它会将所有相对 URI 扩展为绝对 URI。

例如,如果用户尝试用以下方式访问站点:

<a href="../mypage.html">

重写器会将其转换为:

<a href="http://yahoo.com/mypage.html">

其中 http://yahoo.com/test/ 为页面的基 URL。

有关 URLScraper 提供者的详细信息,参见 Sun Java System Portal Server 管理指南

网关

网关从 Internet 门户获取内容。在将内容发送到浏览器之前,它将网关 URI 追加到现有 URI 之前,使来自浏览器的后续 URI 请求可到达网关。

例如,如果有某位用户尝试用以下方式访问某台 Internet 机器上的 HTML 页面:

<a href="http://mymachine.intranet.com/mypage.html>"

重写器会在该 URL 前加上一个指向网关的引用,如下所示:

<a href="https://gateway.company.com/http://mymachine.intranet.com/ mypage.html>"

当用户单击与该锚定点相关联的某个链接时,浏览器便会与网关联络。网关会从 mymachine.intranet.com 中获取 mypage.html 的内容。

网关使用若干规则来确定要重写已获取网页的哪些要素。

编写规则集

有关定义规则集的详细信息,参见 Portal Server 管理指南。创建新规则集后,需要定义所需的规则。

本节涵盖以下主题:

公共接口(规则集 DTD)

规则集 DTD:

<?xml version="1.0" encoding="UTF-8"?>
<!--
The following constraints are not represented in DTD, but taken care of programmatically
    1. In a Rule, All Mandatory attributes cannot be "*".
    2. Only one instance of the below elements is allowed, but in any order.
    1)HTMLRules
    2)JSRules
    3)XMLRules
    3. ID should always be in lower case.
-->
<!ENTITY % eURL ’URL’>
<!ENTITY % eEXPRESSION ’EXPRESSION’>
<!ENTITY % eDHTML ’DHTML’>
<!ENTITY % eDJS ’DJS’>
<!ENTITY % eSYSTEM ’SYSTEM’>

<!ENTITY % ruleSetElements ’(HTMLRules | JSRules | XMLRules)?’>
<!ENTITY % htmlElements ’(Form | Applet | Attribute)*’>
<!ENTITY % jsElements ’(Variable | Function)*’>
<!ENTITY % xmlElements ’(Attribute | TagText)*’>

<!ELEMENT RuleSet (%ruleSetElements;,%ruleSetElements;,%ruleSetElements;)>
<!ATTLIST RuleSet
    id ID #REQUIRED
    extends CDATA "none"
>

<!-- Rules for identifying rules in HTML content -->
<!ELEMENT HTMLRules (%htmlElements;)>
<!ELEMENT Form EMPTY>
<!ATTLIST Form
    name CDATA #REQUIRED
    field CDATA #REQUIRED
    valuePatterns CDATA ""
    source CDATA "*"
>

<!ELEMENT Applet EMPTY>
<!ATTLIST Applet
    code CDATA #REQUIRED
    param CDATA "*"
    valuePatterns CDATA ""
    source CDATA "*"
>

<!-- Rules for identifying rules in JS content -->
<!ELEMENT JSRules (%jsElements;)>
<!ELEMENT Variable EMPTY>
<!ATTLIST Variable
    name CDATA #REQUIRED
    type (%eURL; | %eEXPRESSION; | %eDHTML; | %eDJS; | %eSYSTEM;) "EXPRESSION"
    source CDATA "*"
>

<!ELEMENT Function EMPTY>
<!ATTLIST Function
    name CDATA #REQUIRED
    paramPatterns CDATA #REQUIRED
    type (%eURL; | %eEXPRESSION; | %eDHTML; | %eDJS;) "EXPRESSION"
    source CDATA "*"
>

<!-- Rules for identifying rules in XML content -->
<!ELEMENT XMLRules (%xmlElements;)>
<!ELEMENT TagText EMPTY>
<!ATTLIST TagText
    tag CDATA #REQUIRED
    attributePatterns CDATA ""
    source CDATA "*"
>

<!ELEMENT Attribute EMPTY>
<!ATTLIST Attribute
    name CDATA #REQUIRED
    tag CDATA "*"
    valuePatterns CDATA ""
    type (%eURL; | %eDHTML; | %eDJS; ) "URL"
    source CDATA "*"
>

注 –

除必需的属性值不能只为 * 以外,您可以使用 * 作为规则值的一部分。此类规则会被忽略,但会将消息记录在 RuleSetInfo 日志文件中。有关该日志文件的信息,参见调试文件名称


XML DTD 示例

本节包含一个示例规则集。第 140 页的“案例研究”用于举例说明重写器是如何解释这些规则的。

<?xml version="1.0" encoding="ISO-8859-1"?>
<!--
Rules for integrating a mail client with the gateway.
-->
<!DOCTYPE RuleSet SYSTEM "jar://rewriter.jar/resources/RuleSet.dtd">
<RuleSet type="GROUPED" id="owa">
<HTMLRules>
<Attribute name="action" />
<Attribute name="background" />
<Attribute name="codebase" />
<Attribute name="href" />
<Attribute name="src" />
<Attribute name="lowsrc" />
<Attribute name="imagePath" />
<Attribute name="viewClass" />
<Attribute name="emptyURL" />
<Attribute name="draftsURL" />
<Attribute name="folderURL" />
<Attribute name="prevMonthImage" />
<Attribute name="nextMonthImage" />
<Attribute name="style" />
<Attribute name="content" tag="meta" />
</HTMLRules>
<JSRules>
<!-- Rules for Rewriting JavaScript variables in URLs -->
<Variable name="URL"> _fr.location </Variable>
<Variable name="URL"> g_szUserBase </Variable>
<Variable name="URL"> g_szPublicFolderUrl </Variable>
<Variable name="URL"> g_szExWebDir </Variable>
<Variable name="URL"> g_szViewClassURL </Variable>
<Variable name="URL"> g_szVirtualRoot </Variable>
<Variable name="URL"> g_szBaseURL </Variable>
<Variable name="URL"> g_szURL </Variable>
<Function name="EXPRESSION" name="NavigateTo" paramPatterns="y"/>
</JSRules>
<XMLRules>
<Attribute name="xmlns"/>
<Attribute name="href" tag="a"/>
<TagText tag="baseroot" />
<TagText tag="prop2" />
<TagText tag="prop1" />
<TagText tag="img" />
<TagText tag="xsl:attribute"
attributePatterns="name=src" />
</XMLRules>
</RuleSet>

规则编写步骤

编写规则的一般程序为:

规则集指导原则

当创建规则集时,请谨记以下内容:

定义规则集根元素

规则集根元素有两个属性:

使用递归功能

重写器使用递归功能对同一模式进行搜索,直到匹配字符串模式的末尾。

例如,重写器解析以下字符串时:

<a href="src=abc.jpg,src=bcd.jpg,src=xyz.jpg>

规则

<Attribute name="href" valuePatterns="*src=**"/>

仅重写首先出现的模式,其形式如下:

<a href="src=http://jane.sun.com/abc.jpg>

如果使用递归选项

<Attribute name="href" valuePatterns="REC:*src=**"/>;

重写器会对同一模式进行搜索,直到匹配字符串模式的末尾,因此输出为:

<a href="src=http://jane.sun.com/abc.jpg,src=http://jane.sun.com/bcd.jpg,src=http://jane.sun.com/xyz.jpg>

定义基于语言的规则

规则建立在下列语言基础上:

HTML 内容规则

网页中的 HTML 内容可进一步分成属性、表单和 applet。相应地,HTML 内容规则分为以下几类:

HTML 内容属性规则

该规则用于确定标记都有哪些属性的值需要重写。属性值可以是简单 URL,也可以是 JavaScript 或 DHTML 内容。例如:

本节说明以下内容:

属性规则语法

<Attribute name="attributeName" [tag="*" valuePatterns="" source="*" type="URL|DHTML|DJS"]/>

其中:

attributeName 是属性的名称(强制项)

tag 是属性所属的标记(可选项,默认值是 *,指任何标记)

valuePatterns 参见在规则中使用模式匹配

source 指定在其中定义该属性的页的 URI(可选项,默认值是 *,指在任何页中)

type 指定值的类型(可选项)。它们可以是:

URL - 简单 URL(默认值)。

DHMTL - DHTML 内容。这种内容以标准 HTML 内容的形式显示,并且用于 Microsoft HTC 格式文件。

DJS - JavaScript 内容。所有 HTML 事件处理程序(如 onClick 和 onMouseover)都用此 HTML 属性嵌入 JavaScript。

属性规则示例

假定页的基 URL 为:

http://mymachine.intranet.com/mypage.html

页面内容:

<a href="http://mymachine.intranet.com/mypage.html">

规则

<Attribute name="href"/>
或
<Attribute name="href" tag="a"/>

输出

<a href=gateway-URL/http://mymachine.intranet.com/myhome.html>

描述

由于要重写的 URL 已是一个绝对 URL,所以只在此 URL 前加上了网关 URL。

DJS 属性示例

假定页的基 URL 为:

http://abc.sesta.com/focus.html

页面内容:

<Form>

<input TYPE=TEXT SIZE=20 value=focus onClick="Check(\q/focus.html\q,\qfocus\q);return;">

</Form>

规则

<Attribute name="onClick" type="DJS"/>
<Function type="URL" name="Check" paramPatterns="y,"/>

输出

<Form>

<INPUT TYPE=TEXT SIZE=20 value=focus onClick="Check(\q
gateway-URL
/http://abc.sesta.com/focus.html\q,\qfocus\q);return;">

</Form>

描述

需要两项规则来重写指定的页内容。第一项规则确定 onClick JavaScript 标志。第二项规则确定 check 函数需要重写的参数。在本例中,只会重写第一个参数,因为 paramPatterns 用值 y 代替了第一个参数。

会在所需参数前加上网关 URL 以及这些 JavaScript 标志所在页的基 URL。

HTML 内容的表单规则

用户浏览的 HTML 页可能会包含表单。一些表单元素可能会以 URL 作为值。

本节分为下列各小部分:

表单规则语法

<Form name="form1" field="visit" [valuePatterns="" source="*"]/>

其中

name 是表单的名称(强制项)

field 是表单中的字段,其中含有需要重写的值(强制项)

valuePatterns 参见在规则中使用模式匹配

source 是该表单定义所在 html 页的 URL(可选项,默认值是 *,指在任何页中)

表单规则示例

假定页的基 URL 为:

http://test.siroe.com/testcases/html/form.html

页内容

假定页 URI 是 form.html,并且它位于服务器的根目录下。

<form name=form1  method=POST action=
"http://test.siroe.com/testcases/html/form.html">
<input type=hidden name=abc1 value="0|1234|/test.html">
</form>

要重写 form1 中名为 abc1 的隐藏字段值中出现的 /text.html,需要下列规则。

规则

<Form source="*/form.html" name="form1" 
field="abc1" valuePatterns="0|1234|"/>
<Attribute name="action"/>

输出

<FORM name="form1" 
method="POST" action="gateway-URL/
http://test.siroe.com/testcases/html/form.html">
<input type=hidden name=abc1 
value="0|1234|gateway-URL/
http://test.siroe.com/test.html">
</FORM>

描述

action 标记是用某些已定义的 HTML 属性规则进行重写的。

输入标记属性值的 value 的重写方式如输出中所示。将会查找指定的 valuePatterns,并通过在前面加上网关 URL 以及页的基 URL 来重写紧随在匹配的 valuePatterns 之后的所有内容。参见在规则中使用模式匹配

HTML 内容的 Applet 规则

单个网页可以包含许多 applet,而且每个 applet 可以包含许多参数。重写器将用规则中指定的值与 applet 的 HTML 定义进行匹配,并修改 applet 参数定义中出现的 URL 值。此替换在服务器处执行,用户浏览特定网页时并不会执行。此项规则会确定并重写 applet 以及 HTML 内容对象标记中的参数。

本节分为下列各小部分:

Applet 规则语法

<Applet code="ApplicationClassName/ObjectID
" param="parametername" [valuePatterns="" source="*"] />

其中

code 是 applet 或对象类的名称(强制项)

param 是值需要重写的参数的名称(强制项)

valuePatterns 参见在规则中使用模式匹配

source 是包含 applet 定义的页的 URL(可选项,默认值是 *,指在任何页中)

Applet 规则示例

假定页的基 URL 为:

http://abc.siroe.com/casestudy/test/HTML/applet/rule1.html

页面内容:

<applet codebase="appletcode" code="RewriteURLinApplet.class" archive="/test.jar">
<param name=Test1 value="/index.html">
</applet>

规则

<Applet source="*/rule1.html" code=
"RewriteURLin*.class" param="Test*"/>

输出

<APPLET codebase="gateway-URL
/http://abc.siroe.com/casestudy/test/HTML/
applet/appletcode" code="RewriteURLinApplet.class"
archive="/test.jar"><param name="Test1" value="
gateway-URL/http:
//abc.siroe.com/index.html">
</APPLET>

描述

由于 <Attribute name="codebase"/>default_gateway_ruleset 中的一项已定义规则,因此会重写 codebase 属性

名称以 Test 开头的所有参数均会被重写。并且,会在 param 标记的 value 属性前加上 applet 代码所在页的基 URL 以及网关 URL。

在规则中使用模式匹配

您可以使用 valuePatterns 字段实现模式匹配并指定语句中需要重写的特定部分。

如果指定 valuePatterns 作为规则的一部分,将会重写紧随在匹配模式之后的所有内容。

请考虑下面的表单规则示例。

<Form source="*/source.html
" name="form1" field="visit
" [valuePatterns="0|1234|"]/>

其中

source 是显示表单的 html 页的 URL。

name 是表单的名称。

field 是表单中的字段,需要重写它的值。

valuePatterns 指示需要重写字符串中的哪个部分。将会重写 valuePatterns 后出现的所有内容(可选项,默认值是 "",指需要重写整个值)

在 valuePatterns 中指定专用字符

可以通过使用反斜杠对专用字符进行转义来指定这些字符。例如:

<Form source="*/source.html " name="form1" field=" visit" [valuePatterns="0|1234| \\;original text|changed text"]/>

在 valuePatterns 中使用通配符

您可以使用通配符星号 (*) 字符来实现重写的模式匹配。

不能在 valuePatterns 字段中仅指定一个 *。因为 * 表示与所有文本匹配,所以 valuePattern 后面没有文本。这样,重写器就没有要重写的文本。您必须将 * 与另一字符串连起来使用,例如 *abc。此时,会重写紧随在 *abc 之后的所有内容。


注 –

可在规则的任何字段中使用星号 (*) 作为通配符。不过,规则中的所有字段不能全都包含 *。如果所有字段都包含 *,则会忽略该规则。不会显示错误消息。


可以与原始语句中出现的分隔符(分号或逗号)联合使用 * 或 ** 来分隔多个字段。一个星号 (*) 匹配任何不进行重写的字段,而两个星号 (**) 匹配任何需要重写的字段。

在 valuePatterns 中使用通配符列出了 * 通配符的一些用法示例。

表 4–1 * 通配符用法示例

URL 

valuePatterns 

描述 

url1, url2, url3, url4

valuePatterns = "**, *, **, *"

由于 ** 指示了要重写的部分,因此会重写 url1url3

XYZABChttp://host1.sesta.com/dir1.html

valuePatterns = "*ABC"

仅重写 http://host1.sesta.com/dir1.html 部分。需要重写 *ABC 后的所有内容。

"0|dir1|dir2|dir3|dir4|test|url1

valuePatterns = "*|*|**|*|**|*|"

重写 dir2dir4url1。最后一个需要重写的字段不必用 ** 指出。

JavaScript 内容规则

JavaScript 可以在各种不同位置包含 URL。重写器不能直接解析 JavaScript 并确定出 URL 部分。需要编写一组特殊的规则来帮助 JavaScript 处理器确定和转换 URL。

具有 URL 类型的 JavaScript 元素分类如下:

变量

变量的通用语法为:

<Variable name="variableName" [type="URL|EXPRESSION|DHTML|DJS|SYSTEM" source="*"]>

根据 JavaScript 变量所含值的类型,可将它们细分为以下 5 类:

URL 变量

变量值为可作为 URL 对待的简单字符串。

本节分为下列各小部分:

URL 变量语法

<Variable name="variableName" type="URL" [source="*"]>

其中

variableName 是变量的名称。variableName 的值会被重写(强制项)

type 是 URL 变量(强制项,其值必须是 URL)

source 是该 JavaScript 变量所在页的 URI(可选项,默认值是 *,指在任何页中)

URL 变量示例

假定基 URL 为:

http://abc.siroe.com/tmp/page.html

页内容

<script LANGUAGE="Javascript">
<!--
//URL Variables
var imgsrc1="/tmp/tmp.jpg";
var imgsrc2="http://srap.sesta.com/tmp/tmp.jpg";
var imgsrc3=imgsrc2;
//-->
</SCRIPT>

规则

<Variable name="imgsrc*" type="URL"/>

输出

<script LANGUAGE="Javascript">
<!--
//URL Variables
var imgsrc="gateway-URL/http://abc.siroe.com/tmp/tmp.jpg";
var imgsrc="gateway-URL/http://srap.sesta.com/tmp/tmp.jpg";
var imgsrc3=imgsrc2;
//-->
</SCRIPT>

描述

会重写 URL 类型并且名称以 imgsrc 开头的所有变量。对于输出中的第一行,在其前面加上了网关 URL 以及变量所在页的基 URL。第二行已包含绝对路径,因此只在其前面加上了网关 URL。由于第三个 var imagsrc2 的值不是字符串,而是其他 JavaScript 值,所以不会对其进行重写。

EXPRESSION 变量

表达式变量的右侧是一个表达式。该表达式的结果是一个 URL。由于重写器无法对服务器上的此类表达式求值,所以它会向 HTML 页追加一个 JavaScript 函数 (psSRAPRewriter_convert_expression)。该函数将此表达式视为一个参数,并在客户机浏览器中对其进行求值以得出所需的 URL。

如果不确定语句中包含的是简单 URL 还是 EXPRESSION URL,则使用 EXPRESSION 规则,因为它可以处理这两种情形。

本节分为下列各小部分:

EXPRESSION 变量语法

<Variable name="variableName" [type="EXPRESSION" source="*"]/>

其中

variableName 是值为表达式的 JavaScript 变量的名称(强制项)

type 是 JavaScript 变量的类型(可选项,默认值是 EXPRESSION)

source 是页的 URI(可选项,默认值是 *,指任何源)

EXPRESSION 变量示例

假定页的基 URL 为:

http://abc.siroe.com/dir1/dir2/page.html

页内容

<script LANGUAGE="Javascript">
<!--
//Expression variables
var expvar= getURIPreFix() + "../../images/graphics"+".gif";
document.write("<A HREF="+expvar+">Link to XYZ content</A><P>")
var expvar="../../images/graphics"+".gif";
//-->
</SCRIPT>

规则

<Variable name="expvar" type="EXPRESSION"/>
或
<Variable name="expvar"/>

输出

var expvar=psSRAPRewriter_convert_expression(getURIPreFix()
 + "../../images/graphics"+".gif");document.write("<a href="+expvar+">>
Link to XYZ content</A><P>")var expvar="gateway-URL/http://abc.siroe.com/images/graphics"+".gif";

描述

会在第一行的表达式变量 expvar 右侧的前面加上函数 psSRAPRewriter_convert_expression。该函数会在运行时处理此表达式并重写相应内容。在第三行中,值被重写为一个简单的 URL。

DHTML(动态 HTML)变量

这些变量是包含 HTML 内容的 JavaScript 变量。

本节分为下列各小部分:

DHTML 语法

<Variable name="variableName" type="DHTML" [source="*"]/>

其中

variableName 是具有 DHTML 内容的 JavaScript 变量的名称(强制项)

type 是变量的类型(强制项,其值必须是 DHTML)

source 是页的 URL(可选项,默认值是 *,指在任何页中)

DHTML 示例

假定页的基 URL 为:

http://abc.sesta.com/graphics/set1/
graphics/jsscript/JSVAR/page.html

页内容

<script LANGUAGE="Javascript">
<!--
//DHTML Var
var dhtmlVar="<a href=../../images/test.html>"
var dhtmlVar="<a href=/images/test.html>"
var dhtmlVar="<a href=images/test.html>"
//-->
</SCRIPT>

规则

<Variable name="dhtmlVar" type="DHTML"/>
<Attribute name="href"/>
或
<Attribute name="href" tag="a"/>

输出

<script LANGUAGE="Javascript">
<!--
//DHTML Var
var dhtmlVar="<a href=gateway-URL
/http://abc.sesta.com/graphics/
set1/graphics/images/test.html>"
var dhtmlVar="<a href=gateway-URL/
http
://abc.sesta.com/images/test.html>"
var dhtmlVar="<a href=gateway-URL/
http://abc.sesta.com/graphics/set1/
graphics/jscript/JSVAR/images/test.html>"
//--></SCRIPT>

描述

JavaScript 解析器会将 dhtmlVar 的值作为 HTML 内容读取,并通过 HTML 解析器发送此内容。HTML 解析器会应用其中有 href 属性规则匹配的 HTML 规则,因此 URL 会被重写。

DJS(动态 JavaScript)变量

这些变量是包含 JavaScript 内容的 JavaScript 变量。

本节分为下列各小部分:

DJS 语法

<Variable name="variableName" type="DJS" [source="*"]/>

其中

variable 是值为 javascript 的 JavaScript 变量。

DJS 示例

假定页的基 URL 为:

http://abc.sesta.com/dir1/dir2/dir3/jscript/dir4/page.html

页内容

//DJS Var
var dJSVar="var dJSimgsrc=\q/tmp/tmp.jpg\q;"
var dJSVar="var dJSimgsrc=\q../tmp/tmp.jpg\q;"
var dJSVar="var dJSimgsrc=
\qhttp://abc.sesta.com/tmp/tmp.jpg\q;"

规则

<Variable name="DJS">dJSVar/>
<Variable name="URL">dJSimgsrc/>

输出

//DJS Var - need 2 rules
var dJSVar="var dJSimgsrc=\qgateway-URL
/http://abc.sesta.com/tmp/tmp.jpg\q;"var dJSVar="var dJSimgsrc=\q
gateway-URL/http
://abc.sesta.com/dir1/dir2/dir3/jscript/tmp/tmp.jpg\q;"
var dJSVar="var dJSimgsrc=\qgateway-URL/
http://abc.sesta.com/tmp/tmp.jpg\q;"

描述

这里需要两项规则。第一项规则用于查找动态 JavaScript 变量 dJSVar。该变量的值同样是 URL 类型的 JavaScript。第二项规则用于重写该 JavaScript 变量的值。

SYSTEM 变量

这些变量是指不是由用户声明且只得到有限支持的变量。它们可用作 JavaScript 标准的一部分。例如,window.location.pathname

本节分为下列各小部分:

SYSTEM 变量语法

<Variable name="variableName" type="SYSTEM" [source="*"]/>

其中

variableName 是 JavaScript 系统变量(强制项,其值可以是与以下模式匹配的任何值:document.URL、document.domain、location、doument.location、location.pathname、location.href、location.protocol、location.hostname、location.host 和 location.port。上述所有模式都存在于 generic_ruleset 中。不要修改这些系统变量规则。)

type 指定系统类型值(强制项,且值为 DJS)

source 是此页的 URI(可选项,默认值是 *,指在任何页中)

SYSTEM 变量示例

假定页的基 URL 为:

http://abc.siroe.com/dir1/page.html

页内容

<script LANGUAGE="Javascript">
<!--
//SYSTEM Var
alert(window.location.pathname);
//-->
</SCRIPT>

规则

<Variable name="window.location.pathname" type="SYSTEM"/>

输出

</SCRIPT>
<SCRIPT LANGUAGE="Javascript">
<!--
//SYSTEM Var
alert(psSRAPRewriter_convert_pathname(window.location.pathname));
//-->
</SCRIPT>

描述

重写器会查找与规则匹配的系统变量,然后在其前面加上 psSRAPRewriter_convert_system 函数。该函数会在运行时处理此系统变量并相应地重写最终得到的 URL。

函数参数

值需重写的函数参数分为以下 4 类:

一般语法

<Function name="functionName " paramPatterns="y,y," [type="URL|EXPRESSION|DHTML|DJS" source="*"]/>

其中

name 是 JavaScript 函数的名称(强制项)

paramPatterns 指定需要重写的参数(强制项)

y y 的位置指示需要重写的参数。例如,在语法中,第一个参数需要重写,但不能重写第二个参数

type 指定该参数所需值的类型(可选项,默认值是 EXPRESSION 类型)

source 是页的源 URI(可选项,默认值是 *,指在任何页中)

URL 参数

函数将该参数视为一个字符串并且该字符串可以作为 URL 对待。

本节分为下列各小部分:

URL 参数语法

<Function name="functionName" paramPatterns="y,," type="URL" [source="*"]/>

其中

name 是具有 URL 类型参数的函数的名称(强制项)

paramPatterns 指定需要重写的参数(强制项)

y y 的位置指示需要重写的参数。例如,在语法中,第一个参数需要重写,但不能重写第二个参数

type 是函数的类型(强制项,其值必须是 URL)

source 是具有该函数调用的页的 URL(可选项,默认值是 *,指在任何 URL 中)

URL 参数示例

假定页的基 URL 为:

http://abc.sesta.com/test/rewriter/test1/jscript/test2/page.html

页内容

<script language="JavaScript">
<!--
function test(one,two,three){
alert(one + "##" + two + "##" +three);
}
test("/test.html","../test.html","123");
window.open("/index.html","gen",width=500,height=500);
//-->
</SCRIPT>

规则

<Function name="URL" name="test" paramPatterns="y,y,"/>
<Function name="URL" name="window.open" paramPatterns="y,,,"/>

输出

<SCRIPT language="JavaScript">
<!--
function test(one,two,three) {
alert(one + "##" + two + "##" +three);
}
test("gateway-URL/http://abc.sesta.com/test.html","
gateway-URL/http://abc.sesta.com/test/rewriter/
test1/jscript/test.html","123");window.open("gateway-URL/
http://abc.sesta.com/index.html","gen",width=500,height=500);
//-->
</SCRIPT>

描述

第一项规则指定需要重写名为 test 的函数中的前两个参数。因此会重写 test 函数的前两个参数。第二项规则指定需要重写 window.open 函数的第一个参数。会在 window.open 函数中的 URL 前面加上网关 URL 以及包含函数参数的页的基 URL。

EXPRESSION 参数

这些参数接受表达式值,表达式计算结果为 URL。

本节分为下列各小部分:

EXPRESSION 参数语法

<Function name="functionName" paramPatterns="y" [type="EXPRESSION" source="*"]/>

其中

name 是函数的名称(强制项)

paramPatterns 指定需要重写的参数(强制项)

y y 的位置指示需要重写的函数参数。在上述语法中,只会重写第一个参数

type 指定 EXPRESSION 值(可选项)

source 是其中调用了该函数的页的 URI

EXPRESSION 参数示例

假定页的基 URL 为:

http://abc.sesta.com/dir1/dir2/page.html

页内容

<script language="JavaScript">
<!--
function jstest2(){
return ".html";
}
function jstest1(one){
return one;
}
var dir="/images/test"
var test1=jstest1(dir+"/test"+jstest2());
document.write("<a HREF="+test1+">TEST</a>");
alert(test1);
//-->
</SCRIPT>

规则

<Function type="EXPRESSION" name="jstest1" paramPatterns="y"/>
或
<Function name="jstest1" paramPatterns="y"/>

输出

<script language="JavaScript">
<!--
function jstest2(){
return ".html";
}
function jstest1(one){
return one;
}
var dir="/images/test"
var test1=jstest1(psSRAPRewriter_convert_expression(dir+"/test"+jstest2()));
document.write("<a HREF="+test1+">TEST</a>");
alert(test1);
//-->
</SCRIPT>

描述

此规则将 jstest1 函数的第一个参数视为 EXPRESSION 函数参数,以此来指定需要重写该参数。在示例页内容中,第一个参数是一个表达式,只会在运行时对其进行求值。重写器会在该表达式前加上 psSRAPRewriter_convert_expression 函数。此表达式要进行求值,并且 psSRAPRewriter_convert_expression 函数会在运行时重写输出结果。


注 –

在上述示例中,不需要在 JavaScript 变量规则中包含 test1jstest1 的函数规则会负责执行重写工作。


DHTML 参数

值为 HTML 的函数参数

本机 JavaScript 方法(如可动态生成 HTML 页的 document.write())归属于这一类别。

本节分为下列各小部分:

DHTML 参数语法

<Function name="functionName" paramPatterns="y" type="DHTML" [source="*"]/>

其中

name 是函数的名称

paramPatterns 指定需要重写的参数(强制项)

y y 的位置指示需要重写的函数参数。在上述语法中,只会重写第一个参数

DHTML 参数示例

假定页的基 URL 为:

http://xyz.siroe.com/test/rewriter/test1/jscript/JSFUNC/page.html

页内容

<script>
<!--
document.write(\q<a href="/index.html">write</a><BR>\q)
document.writeln(\q<a href="index.html">writeln</a><BR>\q)
document.write("http://abc.sesta.com/index.html<BR>")
document.writeln("http://abc.sesta.com/index.html<BR>")
//-->
</SCRIPT>

规则

<Function name="DHTML" name="document.write" paramPatterns="y"/>
<Function name="DHTML" name="document.writeln" paramPatterns="y"/>
<Attribute name="href"/>

输出

<SCRIPT>
<!--
document.write(\q<a href="gateway-URL/
http://xyz.siroe.com/index.html">write</a><BR>\q)
document.writeln(\q<a href="gateway-URL/
http://xyz.siroe.com/test/rewriter/test1/
jscript/JSFUNC/index.html">writeln</a><BR>\q)
document.write("http://abc.sesta.com/index.html<BR>")
document.writeln("http://abc.sesta.com/index.html<BR>")
//-->
</SCRIPT>

描述

第一项规则指定需要重写函数 document.write 中的第一个参数。第二项规则指定需要重写函数 document.writeln 中的第一个参数。第三项规则是一项简单的 HTML 规则,它指定需要重写名为 href 的所有属性。在示例中,DHTML 参数规则将会确定函数中需要重写的参数。然后会应用 HTML 属性规则来实际重写已确定的参数。

DJS 参数

值为 JavaScript 的函数参数。

本节分为下列各小部分:

DJS 参数语法

<Function name="functionName" paramPatterns="y" type="DJS" [source="*"]/>

其中

name 是含有一个参数 DJS 的函数的名称(强制项)

paramPatterns 指定上述函数中的哪个参数是 DJS(强制项)

y y 的位置指示需要重写的函数参数。在上述语法中,只会重写第一个参数

type 为 DJS(强制项)

source 是页的 URI(可选项,默认值为 *,指任何 URI)

DJS 参数示例

假定页的基 URL 为:

http://abc.sesta.com/page.html

页内容

<script>
menu.addItem(new NavBarMenuItem("All Available Information","JavaScript:top.location=\qhttp://abc.sesta.com\q"));
</script>

规则

<Function name="DJS" name="NavBarMenuItem" paramPatterns=",y"/>
<Variable name="URL">top.location</Variable>

输出

<script>
menu.addItem(new NavBarMenuItem("All Available Information",
"JavaScript:top.location=\qgateway-URL/
http://abc.sesta.com\q"));
</script>

描述

第一项规则指定需要重写函数 NavBarMenuItem 中的第二个包含 JavaScript 的参数。在 JavaScript 中,变量 top.location 也需要重写。该变量是使用第二项规则来重写的。

XML 内容规则

网页可以包含 XML 内容,而后者又可以包含 URL。需要重写的 XML 内容分为以下两类:

标记文本

本规则用于重写标记元素的 PCDATA 或 CDATA。

本节分为下列各小部分:

标记文本语法

<TagText tag="tagName" 
[attributePatterns="attribute_patterns_for_ this_tag" source="*"]/>

其中

tagName 是标记的名称

attributePatterns 是与该标记相应的属性及其值模式(可选项,指该标记根本无任何属性)

source 是该 xml 文件的 URI(可选项,默认值是 *,指任何 xml 页)

标记文本示例

假定页的基 URL 为:

http://abc.sesta.com/test/rewriter/test1/xml/page.html

页内容

<xml>
<Attribute name="src">test.html</attribute>
<attribute>abc.html</attribute>
</xml>

规则

<TagText tag="attribute" attributePatterns="name=src"/>

输出

<xml>
<Attribute name="src">gateway-URL/
http://abc.sesta.com/test/rewriter/test1/
xml/test.html</attribute><attribute>abc.html</attribute>
</xml>

描述

页内容的第一行包含属性示例。页内容中的第二行不包含具有属性呼叫名称且属性名称值为 src 的属性,因此不会进行任何重写。要重写该属性,也需要有 <TagText tag="attribute"/>

属性

XML 属性规则与 HTML 的属性规则类似。二者的区别在于,XML 的属性规则区分大小写,而 HTML 属性规则不区分大小写。这同样是因为 XML 中内置了对大小写的敏感性而 HTML 中则没有。

重写器会基于属性名称来转换属性值。

本节分为下列各小部分:

属性语法

<Attribute name="attributeName " [tag="*" type="URL" valuePatterns="*" source="*"]/>

其中

attributeName 是属性的名称(强制项)

tag 是该属性所在标记的名称(可选项,默认值是 *,指任何标记)

valuePatterns 参见在规则中使用模式匹配

source 是该 XML 页的 URI(可选项,默认值是 *,指在任何 XML 页中)

属性示例

假定页的基 URL 为:

http://abc.sesta.com/test/rewriter/test1/xml/page.html

页内容

<xml>
<baseroot href="/root.html"/>
<img href="image.html"/>
<string href="1234|substring.html"/>
<check href="1234|string.html"/>
</xml>

规则

<Attribute name="href"tag="check" valuePatterns="1234|"/>

输出

<xml>
<baseroot href="/root.html"/><img href="image.html"/>
<string href="1234|substring.html"/><check href="1234|
gateway-URL
/http://abc.sesta.com/test/rewriter/test1/xml/string.html"/></xml>

描述

在上述示例中,只会重写第四行,因为它满足规则中指定的所有条件。参见在规则中使用模式匹配

层叠样式表规则

HTML 页中的“层叠样式表”(包括 CCS2)会进行转换。由于 URL 只在 CSS 的 url() 函数和导入语法中出现,因此没有为这种转换定义任何规则。

WML 规则

WML 与 HTML 类似,因此 HTML 规则适用于 WML 内容。使用 WML 内容的一般规则集。参见 HTML 内容规则

使用递归功能

重写器使用递归功能对同一模式进行搜索,直到匹配字符串模式的末尾。

例如,重写器解析以下字符串时:

<a href="src=abc.jpg,src=bcd.jpg,src=xyz.jpg>

规则

<Attribute name="href" valuePatterns="*src=**"/>

仅重写首先出现的模式,形式如下:

<a href="src=http://jane.sun.com/abc.jpg>

但是,如果您如下使用递归选项

<Attribute name="href" valuePatterns="REC:*src=**"/>;

重写器会对同一模式进行搜索,直到匹配字符串模式的末尾,因此输出为:

<a href="src=http://jane.sun.com/abc.jpg,src= http://jane.sun.com/bcd.jpg,src=http://jane.sun.com/xyz.jpg>

使用调试日志排除故障

要排除重写器故障,需要启用调试日志。

“调试消息”分为以下几类。

设置重写器调试级别

Procedure设置重写器调试级别

  1. 以根用户身份登录到网关机器并编辑以下文件:


    gateway-install-root/SUNWam/config/AMConfig-instance-name.properties
  2. 设置调试级别:


    com.iplanet.services.debug.level=

    调试级别为:

    error - 只将严重错误记录到调试文件中。出现此类错误时,重写器通常会停止工作。

    warning - 记录警告消息。

    message - 记录所有调试消息。

    off - 不记录任何调试消息。

  3. AMConfig-instance-name .properties 文件的以下属性中,为调试文件指定目录:


    com.iplanet.services.debug.directory=/var/opt/SUNWam/debug

    其中 /var/opt/SUNWam/debug 是默认调试目录。

  4. 从终端窗口中重新启动网关:


    ./psadmin start-sra-instance –u amadmin – f  <password file> –N <profile name>– t  <gateway>
    

调试文件名称

当调试级别设置为 message 时,调试会生成一组文件。调试文件名称列出了重写器文件及其中包含的信息。

表 4–2 重写器调试文件

文件名 

信息 

RuleSetInfo 

包含重写时已使用的所有规则集。 

Original Pages 

包含页面 URI、resolveURI(若不同于页面 URI)、内容 MIME、已应用于该页的规则集、解析器 MIME,以及原始内容。 

与解析有关的特定错误/警告/消息也出现在本文件中。 

在消息模式下,会记录全部内容。在警告和错误模式下,只记录重写期间出现的异常。 

Rewritten Pages 

包含页面 URI、resolveURI(若不同于页 URI)、内容 MIME、已应用于该页的规则集、解析器 MIME,以及重写后的内容。 

当将调试模式设置为消息时,将会填写本文件。 

Unaffected Pages 

包含未经修改的页列表。 

URIInfo Pages 

包含已找到并经过转换的 URL。该文件会记录内容仍与原始数据相同的所有页的详细信息。 

所记录的详细信息有:页 URI、MIME 及编码数据、重写时所用的规则集 ID,以及解析器 MIME。 

除了上述文件以外,重写器还会为调试消息生成一个文件,该文件未收入上述文件中。此文件名由两部分组成:第一部分是 pwRewriter psSRARewriter;第二部分是使用 portalgateway-profile-name 的扩展名。

调试文件在门户或网关中显示。这些文件在 AMConfig-instance-name.properties 文件指定的目录中。

重写器组件会生成下面的一组文件来帮助进行调试:

prefix_RuleSetInfo.extension

prefix_OrginalPages.extension

prefix_RewrittenPages.extension

prefix_UnaffectedPages.extension

prefix_URIInfo.extension

其中

prefix 对于 URLScraper 使用日志为 psRewriter,对于网关使用日志为 psSRAPRewriter

extension 对于 URLScraper 使用为 portal,对于网关使用为 gateway-profile-name

例如,如果使用网关上的重写器来转换页并且使用了默认网关配置文件,则调试时会创建下列文件:

psSRAPRewriter_RuleSetInfo.default

psSRAPRewriter_OriginalPages.default

psSRAPRewriter_RewrittenPages.default

psSRAPRewriter_UnaffectedPages.default

psSRAPRewriter_URIInfo.default

psSRAPRewriter.default

工作示例

本节包括:

这些示例页在 portal-server-URL /rewriter 目录下获得。在应用规则之前可以先浏览页面,然后再通过网关查看含有已重写输出的文件,以了解规则的工作方式。在一些示例中,规则已包含在 default_gateway_ruleset 中。在一些示例中,您可能需要将规则加入到 default_gateway_ruleset 中。这一点会在适当的地方提及。


注 –

某些语句以粗体形式出现,表示已对它们进行了重写。


提供了下列示例:

HTML

JavaScript

函数

XML

HTML 内容示例

HTML 属性示例

Procedure使用 HTML 属性示例

  1. 可从以下位置访问本示例:

    portal-server-URL /rewriter/HTML/attrib/attribute.html

  2. 确保在网关服务的“域和子域的代理”列表中定义了 abc.sesta.comhost1.siroe.com

    如果没有定义该项,则假定采用直接连接,不会在其前面加网关 URL。

    不需要将本范例中指定的规则添加到 default_gateway_ruleset 中,因为该规则已定义。

重写前的 HTML

<html>
Rewriting starts
<head>
<title>TEST PAGE () </title>
</head>
ID-htmlattr.1
<br><br>
1.a href <a href="http://abc.sesta.com/images/logo.gif">http://..</a>
<br><br>
2. href <a href="https://host1.siroe.com">https://..</a>
<br><br>
3. href <a href="../images/logo.gif">../images/</a>
<br><br>
4. href <a href="images/logo.gif">images/..</a> <br><br>
5. href <a href="../../images/logo.gif">../../images/</a> <br><br>
Rewriting ends
</html>

规则

<Attribute name="href"/>

重写后的 HTML

<html>
Rewriting starts
<head>
<title>TEST PAGE () </title>
</head>
ID-htmlattr.1
<br><br>
1. a href <a href="gateway-URL/http://abc.sesta.com/images/logo.gif">http://..</a> <br>

// 由于已在 default_gateway_ruleset 中定义了 <Attrib name="href"/> 规则,所以会重写这个 URL。由于此 URL 已是绝对的,因此只在其前面加上了网关 URL。确保在网关服务的“域和子域的代理”列表中定义了 abc.sesta.com。否则,不会在其前面加网关 URL,因为此时将假定采用直接连接。

2. href <a href="gateway-URL/https://host1.siroe.com">https://..</a>

// 同样,需要在网关服务的“域和子域的代理”列表中定义 host1.siroe.com。否则,不会在其前面加网关 URL,因为此时将假定采用直接连接。

<br><br>
3. href <a href="gateway-URL/portal-server-URL/rewriter/HTML/images/logo.gif">../images/</a>

// 由于指定了相对路径,因此会随所需子目录一同在其前面加上网关 URL 和 portal-server-URL。此链接不会起作用,因为在所提供的示例结构中,HTML 目录下没有指定名为 images 的目录。

<br><br>
4 href <a href="gateway-URL/portal-server-URL/rewriter/HTML/attrib/images/
logo.gif">images/..</a> <br><br>

// 由于指定了相对路径,因此会随所需子目录一同在其前面加上网关 URL 和 Portal Server URL。

5. href <a href="gateway-URL/portal-server-URL/rewriter/images/logo.gif">
../../images/</a> <br><br>

// 由于指定了相对路径,因此会随所需子目录一同在其前面加上网关 URL 和 Portal Server URL。此链接不会起作用,因为在所提供的示例结构中,Rewriter 目录下没有指定名为 images 的目录。

Rewriting ends</html>

HTML 动态 JavaScript 标志示例

本节讨论使用 HTML JavaScript 标志示例

Procedure使用 HTML JavaScript 标志示例:

  1. 可从以下位置访问本示例:

    portal-server-URL /rewriter/HTML/jstokens/JStokens.html

  2. 将本示例中指定的规则添加到“JavaScript 源重写规则”一节的 default_gateway_ruleset 中。

  3. 在 Portal Server 管理控制台中,编辑 Portal Server 配置下的重写器服务中的 default_gateway_ruleset

  4. 从终端窗口中重新启动网关:


    ./psadmin start-sra-instance –u amadmin – f  <password file> –N <profile name>– t  <gateway>
    

重写前的 HTML

<html>
<head>
Rewriting starts
<script language="javascript">
function Check(test,ind){
if (ind == \qblur\q)
{alert("testing onBlur")}
if (ind == \qfocus\q)
{alert("testing onFocus")}
}
</SCRIPT>
</head>
<body>
<form>
<input TYPE=TEXT SIZE=20 value=blur onAbort="Check
(\q/indexblur.html\q,\qblur\q);return;">
<input TYPE=TEXT SIZE=20 value=blur onBlur="Check
(\q/indexblur.html\q,\qblur\q);return;">
<input TYPE=TEXT SIZE=20 value=focus onFocus="Check
(\q/focus.html\q,\qfocus\q);return;">
<input TYPE=TEXT SIZE=20 value=focus onChange="Check
(\q/focus.html\q,\qfocus\q);return;">
<input TYPE=TEXT SIZE=20 value=focus onClick="Check
(\q/focus.html\q,\qblur\q);return;">
<br><br>
</form>
</body>
Rewriting ends
</html>

规则

<Attribute name="onClick" type="DJS"/>
<Function type="URL" name="Check" paramPatterns="y"/>

注 –

<Function name="URL" name="Check" paramPatterns="y"/> 是 JavaScript 函数规则,在 JavaScript 函数示例中对其进行了详细解释。


重写后的 HTML

<html>
<head>
Rewriting starts
<script language="javascript">
function Check(test,ind){
if (ind == \qblur\q)
{alert("testing onBlur")}
if (ind == \qfocus\q)
{alert("testing onFocus")}
}
</SCRIPT>
</head>
<body>
<form>
<input TYPE=TEXT SIZE=20 value=blur onAbort="Check
(\qgateway URL/portal-server-URL/indexblur.html\q,\qblur\q);return;">
<input TYPE=TEXT SIZE=20 value=blur onBlur="Check
(\qgateway URL/portal-server-URL/indexblur.html\q,\qblur\q);return;">
<input TYPE=TEXT SIZE=20 value=focus onFocus="Check
(\qgateway URL/portal-server-URL/focus.html\q,\qfocus\q);return;">
<input TYPE=TEXT SIZE=20 value=focus onChange="Check
(\qgateway URL/portal-server-URL/focus.html\q,\qfocus\q);return;">
<input TYPE=TEXT SIZE=20 value=focus onClick="Check
(\qgateway URL/portal-server-URL/focus.html\q,\qblur\q);return;">

// 在本示例中所有语句均会被重写,并且在每种情况下都会在前面加上网关 URL 和 Portal Server URL。这是因为在 default_gateway_ruleset 文件中定义了 onAbortonBluronFocusonChangeonClick 的相应规则。重写器会检测 JavaScript 标志,并将其传递给 JavaScript 函数规则以便做进一步处理。示例中所列的第二项规则会通知重写器要重写哪个参数。

</body>
<br>

Rewriting ends

</html>

HTML 表单示例

Procedure使用表单示例

  1. 从以下位置访问此示例:

    portal-server-URL/rewriter/HTML/forms/formrule.html

  2. 确保在网关服务的“域和子域的代理”列表中定义了 abc.sesta.com

    如果没有定义该项,则假定采用直接连接,不会在其前面加网关 URL。

  3. 将本示例中指定的规则添加到“HTML 属性重写规则”一节的 default_gateway_ruleset 中。

  4. 在 Portal Server 管理控制台中,编辑 Portal Server 配置下的重写器服务中的 default_gateway_ruleset

  5. 从终端窗口中重新启动网关:


    ./psadmin start-sra-instance –u amadmin – f  <password file> –N <profile name>– t  <gateway>
    

重写前的 HTML 页

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
RW_START
<p>
<form name="form1" method="Post" action=
"http://abc.sesta.com/casestudy/html/form.html">
<input type="hidden" name="name1" value="0|1234|/test.html">
<input type="hidden" name="name3" value="../../html/test.html">
<form name="form2" method="Post" action="
http://abc.sesta.com/testcases/html/form.html"><br>
<input type="hidden" name="name1" value="0|1234|
../../html/test.html"></form>
RW_END </p>
</body>
</html>

规则

<Form source="*" name="form1" field="name1" valuePatterns="0|1234|"/>

重写后的 HTML 页

<HTML>
<HEAD>
RW_START
</HEAD>
<BODY>
<P>
<FORM name=form1  method=POST action="gateway-URL/http://abc.sesta.com/casestudy/html/form.html">

// 由于在 default_gateway_ruleset 中将 <Attribute name="action"/> 定义为 HTML 规则的一部分,所以会重写这个 URL。由于此 URL 已是绝对的,因此只需在其前面加上网关 URL。确保在网关服务的“域和子域的代理”列表中定义了 abc.sesta.com。否则,不会在其前面加网关 URL,因为此时将假定采用直接连接。

<input type=hidden name=name1 value=
"0|1234|gateway URL/portal-server-URL/test.html">

// 这里,表单名是 form1,字段名是 name1。这与规则中指定的表单名和字段名相匹配。规则将 valuePatterns 规定为 0|1234| ,该值与本语句中的 value 相匹配。因此,会重写 valuePattern 后出现的 URL。在其前面加上 Portal Server URL 和网关 URL。有关 valuePatterns 的详细信息,参见在规则中使用模式匹配

<input type=hidden name=name3 value="../../html/test.html">

// 由于 name 不匹配规则中指定的 field 名称,所以不会重写这个 URL。

</FORM>
<FORM name=form2 method=POST action=
"gateway-URL/http://abc.sesta.com/casestudy/html/form.html"><BR>

// 由于在默认规则集中将 <Attribute name="action"/> 定义为 HTML 规则的一部分,所以会重写这个 URL。由于此 URL 已是绝对的,因此只需在其前面加上网关 URL。

<input type=hidden name=name1 value="0|1234|../../html/test.html">

// 由于表单名不匹配规则中指定的名称,所以不会重写这个 URL。

</FORM>
</BODY>
RW_END
</HTML>

HTML Applet 示例

Procedure使用 Applet 示例

  1. 获得 applet 类文件。RewriteURLinApplet.class 文件位于以下位置:

    portal-server-URL/rewriter/HTML/applet/appletcode

    applet 代码所在页的基 URL 是:

    portal-server-URL/rewriter/HTML/applet/rule1.html

  2. 将本示例中指定的规则添加到“HTML 属性重写规则”一节的 default_gateway_ruleset 中。

  3. 在 Portal Server 管理控制台中,编辑 Portal Server 配置下的重写器服务中的 default_gateway_ruleset

  4. 重新启动网关:


    ./psadmin start-sra-instance –u amadmin – f  <password file> –N <profile name>– t  <gateway>
    

重写前的 HTML

<html>
Rewriting starts
<br>
<applet codebase=appletcode code=RewriteURLinApplet.class archive=/test>
<param name=Test1 value="/index.html">
<param name=Test2 value="../index.html">
<param name=Test3 value="../../index.html">
</applet>
Rewriting ends
</html>

规则

<Applet source="*/rule1.html" code="RewriteURLinApplet.class" param="Test*" />

重写后的 HTML

<HTML>
Rewriting starts
<BR>
<APPLET codebase=gateway-URL/portal-server-URL
/rewriter/HTML/applet/appletcode=RewriteURLinApplet.class archive=/test>

// 由于规则 <Attribute name="codebase"/> 已呈现为 default_gateway_ruleset 文件的一部分,所以会重写这个 URL。网关和 Portal Server URL 会连同到 appletcode 目录的路径一起被加在其前面。

<param name=Test1 value=
"gateway-URL/portal-server-URL/index.html">

// 由于页的基 URL 是 rule1.html,并且参数名与规则中指定的参数 Test* 相匹配,所以会重写此 URL。由于 index.html 被指定位于根层级,因此会直接在其前面加上网关 URL 和 Portal Server URL。

<param name=Test2 value="gateway-URL
/portal-server-URL/rewriter/HTML/index.html">

// 由于页的基 URL 是 rule1.html,并且参数名与规则中指定的参数 Test* 相匹配,所以会重写此 URL。会根据需要在其前面加上相应的路径。

<param name=Test3 value="gateway-URL
/portal-server-URL/rewriter/index.html">

// 由于页的基 URL 是 rule1.html,并且参数名与规则中指定的参数 Test* 相匹配,所以会重写此 URL。会根据需要在其前面加上相应的路径。

</APPLET>
Rewriting ends
</HTML>

JavaScript 内容示例

JavaScript URL 变量示例

Procedure使用 JavaScript URL 变量示例

  1. 可从以下位置访问本示例:

    portal-server-URL /rewriter/JavaScript/variables/url/js_urls.html

  2. 确保在网关服务的“域和子域的代理”列表中定义了 abc.sesta.com

    如果没有定义该项,则假定采用直接连接,不会在其前面加网关 URL。

  3. 将本示例中指定的规则添加到“JavaScript 源重写规则”一节的 default_gateway_ruleset 中。

  4. 在 Portal Server 管理控制台中,编辑 Portal Server 配置下的重写器服务中的 default_gateway_ruleset

  5. 如果添加了此规则,请重新启动网关:


    ./psadmin start-sra-instance –u amadmin – f  <password file> –N <profile name>– t  <gateway>
    

重写前的 HTML 页

<html>
Rewriting starts
<head>
<title>JavaScript Variable test page</title>
</head>
<body>
<script LANGUAGE="Javascript">
<!--
//URL Variables
var imgsrc="/tmp/tmp.jpg";
var imgsrc="./tmp/tmp.jpg";
var imgsrc="../tmp/tmp.jpg";
var imgsrc="../../tmp/tmp.jpg";
var imgsrc="http://abc.sesta.com/tmp/tmp.jpg";
var imgsrc="../../../tmp/tmp.jpg";
var imgsrc="tmp/tmp.jpg";
//-->
</SCRIPT>
<br>
Testing JavaScript variables!
<br>
<img src="images/logo.gif">
<br>
Image
</body>
<br>
Rewriting ends
</html>

规则

<Variable name="imgsrc" type="URL"/>

重写后的 HTML 页

<html>
Rewriting starts
<head>
<title>JavaScript Variable test page</title>
</head>
<body>
<script LANGUAGE="Javascript">
<!--
//URL Variables
var imgsrc="gateway-URL/portal-server-URL/tmp/tmp.jpg";
var imgsrc="gateway-URL/portal-server-URL
/rewriter/JavaScript/variables/url/tmp/tmp.jpg";
var imgsrc="gateway-URL/portal-server-URL
/rewriter/JavaScript/variables/tmp/tmp.jpg";
var imgsrc="gateway-URL/portal-server-URL
/rewriter/JavaScript/tmp/tmp.jpg";
var imgsrc="gateway-URL/http://abc.sesta.com/tmp/tmp.jpg";
var imgsrc="gateway-URL/portal-server-URL/rewriter/tmp/tmp.jpg";
var imgsrc="gateway-URL/portal-server-URL
/rewriter/JavaScript/variables/url/tmp/tmp.jpg";

// 如规则中指定的那样,所有上述 URL 都是 URL 类型且名称为 imgsrc 的 JavaScript 变量。因此会在它们前面加上网关 URL 和 Portal Server URL。根据需要,会在其前面加上跟在 Portal Server URL 后面的路径。

//-->
</SCRIPT>
<br>
Testing JavaScript variables!
<br>
<img src="gateway URL/portal-server-URL/rewriter
/JavaScript/variables/url/images/logo.gif">

// 由于在 default_gateway_ruleset 中定义了规则 <Attribute name="src"/>,所以会重写该行

<br>
Image
</body>
<br>
Rewriting ends
</html>

JavaScript EXPRESSION 变量示例

Procedure使用 JavaScript 表达式变量示例

  1. 可从以下位置访问本示例:

    portal-server-URL /rewriter/JavaScript/variables/expr/expr.html

  2. 将本示例中指定的规则(如果尚不存在)添加到“JavaScript 源重写规则”一节的 default_gateway_ruleset 中。

  3. 在 Portal Server 管理控制台中,编辑 Portal Server 配置下的重写器服务中的 default_gateway_ruleset

  4. 如果添加了此规则,请重新启动网关:


    ./psadmin start-sra-instance –u amadmin – f  <password file> –N <profile name>– t  <gateway>
    

重写前的 HTML 页

<html>
<head>
<title>JavaScript EXPRESSION Variables Test Page</title>
</head>
<body>
<script LANGUAGE="Javascript">
<!--
//Expression variables
var expvar1="images";
var expvar2="/logo.gif";
var expvar = expvar1 + expvar2;
document.write("<A HREF="+expvar+">EXPRESSION</A><P>")
var expvar="/images/logo"+".gif";
document.write("<A HREF="+expvar+">EXPRESSION</A><P>")
//-->
</SCRIPT>
Testing JavaScript EXPRESSION variables
</body>
</html>

规则

<Variable type="EXPRESSION" name="expvar"/>

重写后的 HTML 页

<html>
<head>
<title>JavaScript EXPRESSION Variables Test Page</title>
</head>
<body>
<SCRIPT>
// Rewriter appends the wrapper function 
psSRAPRewriter_convert_expression here
</SCRIPT>
<script LANGUAGE="Javascript">
<!--
//Expression variables
var expvar1="images";
var expvar2="/logo.gif";
var expvar =psSRAPRewriter_convert_expression( expvar1 + expvar2);

// 重写器会将该语句的右侧部分识别为 JavaScript EXPRESSION 变量。重写器不能在服务器端求解该表达式的值。因此,会在此表达式前面加上函数 psSRAPRewriter_convert_expression。在客户机端对此表达式进行求值,并根据需要对其进行重写。

document.write("<A HREF="+expvar+">EXPRESSION</A><P>")

// 使用了上一语句中 expvar 重写后的值来得出该表达式的值。由于结果是一个有效的 URL(在示例中,该位置有图形存在),因此链接将会起作用。

var expvar="gateway URL/portal-server-URL/images/logo"+".gif";

// 重写器会将 expvar 的右侧部分识别为字符串表达式。该表达式可以在服务器一方求解,因而会直接对其进行重写。

document.write("<A HREF="+expvar+">EXPRESSION</A><P>")

// 使用了上一语句中 expvar 重写后的值来得出该表达式的值。由于结果不是一个有效的 URL(在最终得出的位置不存在图形),因此链接将不起作用。

//-->
</SCRIPT>
Testing JavaScript EXPRESSION variables
</body>
</html>

JavaScript DHTML 变量示例

Procedure使用 JavaScript DHTML 变量示例

  1. 可从以下位置访问本示例:

    portal-server-URL /rewriter/JavaScript/variables/dhtml/dhtml.html

  2. 确保在网关服务的“域和子域的代理”列表中定义了 abc.sesta.com。如果没有定义该项,则假定采用直接连接,不会在其前面加网关 URL。

  3. 将本示例中指定的规则(如果尚不存在)添加到“JavaScript 源重写规则”一节的 default_gateway_ruleset 中。在 Portal Server 管理控制台中,编辑 Portal Server 配置下的重写器服务中的 default_gateway_ruleset

  4. 如果添加了此规则,请重新启动网关:


    ./psadmin start-sra-instance –u amadmin – f  <password file> –N <profile name>– t  <gateway>
    

重写前的 HTML 页

<html>
<head>
<title>JavaScript DHTML Variable Test Page</title>
</head>
<body>
<script LANGUAGE="Javascript">
<!--
//DHTML Var
var dhtmlVar="<a href=../../images/test.html>"
var dhtmlVar="<a href=/../images/test.html>"
var dhtmlVar="<a href=/images/test.html>"
var dhtmlVar="<a href=images/test.html>"
var dhtmlVar="<a href=http://abc.sesta.com/images/test.html>"
var dhtmlVar="<img src=http://abc.sesta.com/images/test.html>"
//-->
</SCRIPT>
<br><br>
Testing DHTML Variables
<br><br>
<img src="images/logo.gif">IMAGE
</body>
</html>

规则

<Variable name="DHTML">dhtmlVar</Variable>

重写后的 HTML 页

<html>
<head>
<title>JavaScript DHTML Variable Test Page</title>
</head>
<body>
<script LANGUAGE="Javascript">
<!--
//DHTML Var
var dhtmlVar="<a href=gateway-URL/portal-server-URL
/rewriter/JavaScript/images/test.html>"

// JavaScript DHTML 规则将 dhtmlVar 的右侧部分确定为动态 HTML 内容。因而,会应用 default_gateway_ruleset 文件中的 HTML 规则。动态 HTML 包含 href 属性。default_gateway_ruleset 定义了规则 <Attribute name="href"/>。因此,会重写 href 属性的值。但此 URL 不是绝对的;因此,会用页的基 URL 以及所需子目录来替换这个相对的 URL。接着在其前面加上网关 URL 以得出最终重写后的输出。

var dhtmlVar="<a href=gateway-URL
/portal-server-URL/../images/test.html>"

// 虽然附加了页的基 URL,并且在前面加上了网关 URL,但最终得到的 URL 不会起作用。这是因为初始 URL /../images/test.html 是错误的。

var dhtmlVar="<a href=gateway-URL
/portal-server-URL/images/test.html>"

// 这里,JavaScript DHTML 规则同样将右侧部分确定为动态 HTML 内容,并将其传递给 HTML 规则。应用 default_gateway_ruleset 中的 HTML 规则 <Attribute name="href"/>,并按所示方式重写该语句。在其前面加上网关 URL 和 Portal Server URL。

var dhtmlVar="<a href=gateway URL/portal-server-URL/
rewriter/JavaScript/variables/dhtml/images/test.html>"
var dhtmlVar="<a href=gateway URL/http://abc.sesta.com/images/test.html>"
var dhtmlVar="<img src=gateway-URL/
http://abc.sesta.com/images/test.html>"

// JavaScript DHTML 规则会确定出右侧的动态 HTML 内容,并将此语句传递给 HTML 规则。此时会应用 default_gateway_ruleset 中的 <Attribute name="src"/> 规则。由于此 URL 是绝对的,因此只需在其前面加上网关 URL。为重写该 URL,请确保在“域和子域的代理”列表中定义了 abc.sesta.com

//-->
</SCRIPT>
<br><br>
Testing DHTML Variables
<br><br>
<img src="gateway-URL/portal-server-URL/
rewriter/JavaScript/variables/dhtml/images/logo.gif">

// 由于在 default_gateway_ruleset 中定义了规则 <Attribute name="src"/>,所以会重写该行。

<br><br>
Image
</body>
</html>

JavaScript DJS 变量示例

Procedure使用 JavaScript DJS 变量示例

  1. 可从以下位置访问本示例:

    portal-server-URL /rewriter/JavaScript/variables/djs/djs.html

  2. 确保在网关服务的“域和子域的代理”列表中定义了 abc.sesta.com。如果没有定义该项,则假定采用直接连接,不会在其前面加网关 URL。

  3. 将本示例中指定的两项规则(如果尚不存在)添加到“JavaScript 源重写规则”一节的 default_gateway_ruleset 中。在 Portal Server 管理控制台中,编辑 Portal Server 配置下的重写器服务中的 default_gateway_ruleset

  4. 重新启动网关:


    ./psadmin start-sra-instance –u amadmin – f  <password file> –N <profile name>– t  <gateway>
    

重写前的 HTML 页

<html>
<head>
<title>Dynamic JavaScript Variable Test Page</title>
</head>
<body>
<script LANGUAGE="Javascript">
<!--
var dJSVar="var dJSimgsrc=\q/tmp/tmp/jpg\q;"
var dJSVar="var dJSimgsrc=\q../../../tmp/tmp/jpg\q;"
var dJSVar="var dJSimgsrc=\qhttp://abc.sesta.com/tmp/tmp/jpg\q;"
//-->
</SCRIPT>
<br>
Testing Dynamic JavaScript Variables
<br>
<img src="images/logo.gif">
<br>
Image
</body>
</html>

规则

<Variable name="dJSVar" type="DJS"/>
<Variable name="dJSimgsrc" type="URL"/>

重写后的 HTML 页

<html>
<head>
<title>Dynamic JavaScript Variable Test Page</title>
</head>
<body>
<script LANGUAGE="Javascript">
<!--
var dJSVar="var dJSimgsrc=\qgateway-URL
/portal-server-URL/tmp/tmp/jpg\q;"
var dJSVar="var dJSimgsrc=\qgateway-URL
/portal-server-URL/rewriter/tmp/tmp/jpg\q;"
var dJSVar="var dJSimgsrc=\qgateway-URL
/http://abc.sesta.com/tmp/tmp/jpg\q;"

// 会用网关 URL 和 Portal Server URL 重写上面的所有语句。还会适当地在前面加上所需的路径。第一项规则将 dJSVar 的右侧部分确定为一个动态 JavaScript 变量。然后将其传递给第二项规则,后者将 dJSimgsrc 的右侧部分确定为 URL 类型的 JavaScript 变量。并且会相应地对其进行重写。

//-->
</SCRIPT>
<br>
Testing Dynamic JavaScript Variables
<br>
<img src="gateway-URL/portal-server-URL
/rewriter/JavaScript/variables/djs/images/logo.gif">

// 由于在 default_gateway_ruleset 中定义了规则 <Attribute name="src"/>,所以会重写该行。

<br>
Image
</body>
</html>

JavaScript SYSTEM 变量示例

Procedure使用 JavaScript 系统变量示例

  1. 可从以下位置访问本示例:

    portal-server-URL /rewriter/JavaScript/variables/system/system.html

  2. 将本示例中指定的规则(如果尚不存在)添加到“JavaScript 源重写规则”一节的 default_gateway_ruleset 中。

  3. 在 Portal Server 管理控制台中,编辑 Portal Server 配置下的重写器服务中的 default_gateway_ruleset

  4. 重新启动网关:


    ./psadmin start-sra-instance –u amadmin – f  <password file> –N <profile name>– t  <gateway>
    

重写前的 HTML 页

<html>
<head>
<title>JavaScript SYSTEM Variables Test Page</title>
</head>
<body>
<script LANGUAGE="Javascript">
<!--
//SYSTEM Var
alert(window.location.pathname);
//document.write
("<A HREF="+window.location.pathname+">SYSTEM</A><P>")
//-->
</SCRIPT>
Testing JavaScript SYSTEM Variables
<br>
This page displays the path where 
the current page is located when loaded.
</body>
</html>

规则

<Variable name="window.location.pathname" type="SYSTEM"/>

重写后的 HTML

<html>
<head>
<title>JavaScript SYSTEM Variables Test Page</title>
</head>
<body>
<SCRIPT>
convertsystem function definition...
</SCRIPT>
<script LANGUAGE="Javascript">
<!--
//SYSTEM Var
alert(psSRAPRewriter_convert_system
(window.location, window.location.pathname, "window.location"));

// 重写器将 window.location.pathname 确定为 JavaScript SYSTEM 变量。无法在服务器端确定该变量的值。因此,重写器会在此变量前加上 psSRAPRewriter_convert_pathname 函数。这个包裹函数将在客户机端确定变量的值,并根据需要进行重写。

//-->
</SCRIPT>
Testing JavaScript SYSTEM Variables
<br>
This page displays the path where
the current page is located when loaded.
</body>
</html>

JavaScript URL 函数示例

Procedure使用 JavaScript URL 函数示例

  1. 可从以下位置访问本示例:

    portal-server-URL /rewriter/JavaScript/functions/url/url.html

  2. 将本示例中指定的规则(如果尚不存在)添加到“JavaScript 源重写规则”一节的 default_gateway_ruleset 中。在 Portal Server 管理控制台中,编辑 Portal Server 配置下的重写器服务中的 default_gateway_ruleset

  3. 重新启动网关:


    ./psadmin start-sra-instance –u amadmin – f  <password file> –N <profile name>– t  <gateway>
    

重写前的 HTML 页

<html>
<body>
JavaScript URL Function Test Page
<br>
<script language="JavaScript">
<!--
function test(one,two,three)
{
alert(one + "##" + two + "##" +three);
}
test("/test.html","../test.html","123");
window.open("/index.html","gen",width=500,height=500);
//-->
</SCRIPT>
</body>
</html>

规则

<Function type="URL" name="test" paramPatterns="y,y"/>
<Function type="URL" name="window.open" paramPatterns="y"/>

重写后的 HTML 页

<html>
<body>
JavaScript URL Function Test Page
<br>
<script language="JavaScript">
<!--
function test(one,two,three)
{
alert(one + "##" + two + "##" +three);
}
test("/test.html","../test.html","123");
window.open("gateway-URL/portal-server-URL
/index.html","gen",width=500,height=500);
//-->
</SCRIPT>
</body>
</html>

JavaScript EXPRESSION 函数示例

Procedure使用 JavaScript 表达式函数示例

  1. 可从以下位置访问本示例:

    <portal-install-location>/SUNWportal/samples/rewriter

  2. 将本示例中指定的规则(如果尚不存在)添加到“JavaScript 源重写规则”一节的 default_gateway_ruleset 中。

  3. 使用 Portal Server 管理控制台编辑重写器服务中的 default_gateway_ruleset

  4. 重新启动网关:


    ./psadmin start-sra-instance –u amadmin – f  <password file> –N <profile name>– t  <gateway>
    

重写前的 HTML 页

<html>
<body>
JavaScript EXPRESSION Function Test Page
<br><br><br>
<script language="JavaScript">
<!--
function jstest2()
{
return ".html";
}
function jstest1(one)
{
return one;
}
var dir="/images/test"
var test1=jstest1(dir+"/test"+jstest2());
document.write("<a HREF="+test1+">Test</a>");
alert(test1);
//-->
</SCRIPT>
</body>
</html>

规则

<Function type="EXPRESSION" name="jstest1" paramPatterns="y"/>

重写后的 HTML 页

<html>
<body>
JavaScript EXPRESSION Function Test Page
<br><br><br>
<script>
<!--
// various functions including psSRAPRewriter_
convert_expression appear here.//-->
</SCRIPT>
<script language="JavaScript">
<!--
function jstest2()
{
return ".html";
}
function jstest1(one)
{
return one;
}
var dir="/images/test"
var test1=jstest1(psSRAPRewriter_convert_
expression(dir+"/test"+jstest2()));

// 此规则规定需要重写函数 jstest1 中类型为 EXPRESSION 的第一个参数。该表达式的值是 /test/images/test.html。会在该值前面加上 Portal Server URL 和“网关 URL”。

document.write("<a HREF="+test1+">Test</a>");
alert(test1);
//-->
</SCRIPT>
</body>
</html>

JavaScript DHTML 函数示例

Procedure使用 JavaScript DHTML 函数示例

  1. 可从以下位置访问本示例:

    portal-server-URL /rewriter/JavaScript/functions/dhtml/dhtml.html

  2. 将本示例中指定的规则(如果尚不存在)添加到“JavaScript 源重写规则”一节的 default_gateway_ruleset 中。

  3. 在 Portal Server 管理控制台中,编辑 Portal Server 配置下的重写器服务中的 default_gateway_ruleset

  4. 重新启动网关:


    ./psadmin start-sra-instance –u amadmin – f  <password file> –N <profile name>– t  <gateway>
    

重写前的 HTML 页

<html>
<head>
Testing JavaScript DHTML Functions
<br>
<br>
<script>
<!--
document.write(\q<a href="/index.html">write</a><BR>\q)
document.writeln(\q<a href="index.html">writeln</a><BR>\q)
document.write("http://abc.sesta.com/index.html<BR>")
document.writeln("http://abc.sesta.com/index.html<BR>")
//-->
</SCRIPT>
</head>
<body BGCOLOR=white>
<br><br>
Testing document.write and document.writeln
</body>
</html>

规则

<Function type="DHTML" name=" document.write" paramPatterns="y"/>
<Function type="DHTML" name=" document.writeln" paramPatterns="y"/>

重写后的 HTML 页

<html>
<head>
Testing JavaScript DHTML Functions
<br>
<br>
<script>
<!--
document.write(\q<a href="gateway-URL
/portal-server-URL/index.html">write</a><BR>\q)

// 第一项规则指定需要重写 DHTML JavaScript 函数 document.write 的第一个参数。重写器将第一个参数确定为一个简单 HTML 语句。default_gateway_ruleset 中的 HTML 规则部分具有规则 <Attribute name="href" />,该规则指示需要重写该语句。

document.writeln(\q<a href="gateway-URL
/portal-server-URL/rewriter/JavaScript/functions/dhtml/index.html">writeln</a><BR>\q)

// 第二项规则指定需要重写 DHTML JavaScript 函数 document.writeln 的第一个参数。重写器将第一个参数确定为一个简单 HTML 语句。default_gateway_ruleset 中的 HTML 规则部分具有规则 <Attribute name="href" />,该规则指示需要重写该语句。

document.write("http://abc.sesta.com/index.html<BR>")
document.writeln("http://abc.sesta.com/index.html<BR>")

// 虽然此 DHTML 规则确定出了 document.writedocument.writeln 函数,但是不会重写上述语句。这是因为本例中的第一个参数不是简单 HTML。它可以是任意的字符串,因而重写器不知道该如何重写这个参数。

//-->
</SCRIPT>
</head>
<body BGCOLOR=white>
<br><br>
Testing document.write and document.writeln
</body>
</html>

JavaScript DJS 函数示例

Procedure使用 JavaScript DJS 函数示例

  1. 可从以下位置访问本示例:

    portal-server-URL /rewriter/JavaScript/functions/djs/djs.html

  2. 确保在网关服务的“域和子域的代理”列表中定义了 abc.sesta.com

    如果没有定义该项,则假定采用直接连接,不会在其前面加网关 URL。

  3. 将本示例中指定的规则(如果尚不存在)添加到“JavaScript 源重写规则”一节的 default_gateway_ruleset 中。在 Portal Server 管理控制台中,编辑 Portal Server 配置下的重写器服务中的 default_gateway_ruleset

  4. 重新启动网关:


    ./psadmin start-sra-instance –u amadmin – f  <password file> –N <profile name>– t  <gateway>
    

重写前的 HTML 页

<html>
Test for JavaScript DJS Functions
<br>
<script>
menu.addItem(new NavBarMenuItem("All Available
Information","JavaScript:top.location=\qhttp://abc.sesta.com\q"));
//menu.addItem(new NavBarMenuItem("All Available Information","http://abc.sesta.com"));
</script>
</html>

规则

<Function type="DJS" name="NavBarMenuItem" paramPatterns=",y"/>
<Variable type="URL" name="top.location"/>

重写后的 HTML 页

<html>
Testing JavaScript DJS Functions
<br>
<script>
menu.addItem(new NavBarMenuItem
("All Available Information","javaScript:top.location=
\qgateway-URL/http://abc.sesta.com\q"));

// abc.sesta.com 是网关服务的“域和子域的代理”列表中的一项。因此重写器需要重写这个 URL。但由于是一个绝对 URL,所以不需要在其前面加 Portal Server URL。此 DJS 规则规定需要重写 DJS 函数 NavBarMenuItem 的第二个参数。但第二个参数还是一个 JavaScript 变量。此时还需要第二项规则来重写该变量的值。第二项规则指定需要重写 JavaScript 变量 top.location 的值。由于满足上述所有条件,所以会重写此 URL。

//menu.addItem(new NavBarMenuItem("All Available Information","http://abc.sesta.com"));

// 虽然此 DJS 规则指定需要重写函数 NavBarMenuItem 的第二个参数,但在本语句中不会发生这种情况。这是因为重写器不会将第二个参数识别为简单 HTML。

</script>
</html>

XML 属性示例

Procedure使用 XML 属性示例

  1. 可从以下位置访问本示例:

    portal-server-URL /rewriter/XML/attrib.html

  2. 将本示例中指定的规则(如果尚不存在)添加到“XML 源重写规则”一节的 default_gateway_ruleset 中。

  3. 在 Portal Server 管理控制台中,编辑 Portal Server 配置下的重写器服务中的 default_gateway_ruleset

  4. 重新启动网关:


    ./psadmin start-sra-instance –u amadmin – f  <password file> –N <profile name>– t  <gateway>
    

重写前的 XML

<html>
RW_START
<body>
<xml>
<baseroot href="/root.html"/>
</xml>
<xml>
<img href="image.html"/>
</xml>
<xml>
<string href="1234|substring.html"/>
</xml>
<xml>
<check href="1234|string.html"/>
</xml>
</body>
RW_END
</html>

规则

<Attribute name="href" tag="check" valuePatterns="1234|"/>

重写后的 HTML

<html>
Rewriting starts
<br>
<br>
<body>
<xml><baseroot href="/root.html"/></xml>
<xml><img href="image.html"/></xml>
<xml><string href="1234|substring.html"/></xml>
<xml><check href="1234|gateway-URL/portal-server-URL
/rewriter/XML/string.html"/></xml>

// 由于本语句符合规则中指定的条件,所以会重写它。Attribute namehreftagcheckvaluePatterns1234。将会重写 valuePatterns 后的字符串。有关 valuePatterns 的详细信息,参见在规则中使用模式匹配

</body>
Rewriting ends
</html>

实例研究

本节包括一个邮件客户机示例的源 HTML 页。本实例研究并未涵盖所有可能的方案和规则。它只是一个规则集示例,目的是为了帮助您将自己内联网页的相应规则合在一起。

假设

本实例研究作了如下假设:

示例页 1

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0053)http://abc.siroe.com/mailclient/destin/?Cmd=navbar -->
<HTML XMLNS:WM><HEAD>
<META http-equiv=Content-Type content="text/html; CHARSET=utf-8">
<META http-equiv=Pragma content=no-cache>
<META http-equiv=Expires content=0><!--Copyright (c) 2000 Microsoft Corporation.
All rights reserved.--><!--CURRENT FILE== "IE5" "WIN32" navbar -->
<STYLE>WM\\:DROPMENU {
BEHAVIOR: url(http://abc.siroe.com/mailweb/controls/dropmenu.htc)
}
</STYLE>
<LINK href="destin_files/navbar.css" type=text/css rel=stylesheet>
<SCRIPT language=javascript>
var g_szUserBase= "http://abc.siroe.com/mailclient/destin"+"/";
var g_szFolder= ".";
var g_szVirtualRoot= "http://abc.siroe.com/mailweb";
var g_szImagePath= g_szVirtualRoot + "/img/";
</SCRIPT>
<SCRIPT src="/destin_files/navbar.js"></SCRIPT>
<META content="MSHTML 6.00.2600.0" name=GENERATOR></HEAD>
<BODY oncontextmenu=return(event.ctrlKey); onselectstart=return(false);
id=outbar_mainbody style="BACKGROUND-COLOR: appworkspace" leftMargin=0
topMargin=0 scroll=no>
<TABLE class=nbTableMain id=nbTableMain style="HEIGHT: 100%" cellSpacing=0
cols=1 cellPadding=0 rows="2">
<TBODY>
<TR>
<TD class=treeBrand>
<DIV class=treeOFLOW><IMG
style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; PADDING-TOP: 0px"
src="/destin_files/logo-ie5.gif" border=0></DIV></TD></TR>
<TR height="100%">
<TD>
<TABLE class=nbTable cellSpacing=0 cols=1 cellPadding=0 rows="4">
<TBODY>
<TR>
<TD class=nbFlybar id=show_navbar onkeydown=flybar_keydown()
onclick=ToggleTab(this.id) tabIndex=0 noWrap>
<DIV class=treeOFLOW>Shortcuts</DIV></TD></TR>
<TR style="HEIGHT: 100%">
<TD id=idOutbarpane style="TEXT-ALIGN: center" vAlign=top><A
id=inbox
href="http://abc.siroe.com/mailclient/destin/Inbox/?Cmd=contents&amp;Page=1"
target=viewer alt="Go to inbox"><IMG class=nbImage alt="Go to inbox"
src="destin_files/navbar-inbox.gif"></A>
<DIV class=nbLabel>Inbox</DIV><BR><A id=calendar
href="http://abc.siroe.com/mailclient/destin/Calendar/?Cmd=contents"
target=viewer alt="Go to calendar"><IMG class=nbImage
alt="Go to calendar" src="destin_files/navbar-calendar.gif"></A>
<DIV class=nbLabel>Calendar</DIV><BR><A id=contacts
            href="http://abc.siroe.com/mailclient/destin/Contacts/?Cmd=contents"
target=viewer alt="Go to contacts"><IMG class=nbImage
alt="Go to contacts" src="destin_files/navbar-contacts.gif"></A>
<DIV class=nbLabel>Contacts</DIV><BR><A id=options
href="http://abc.siroe.com/mailclient/destin/?Cmd=options"
target=viewer alt="Go to options"><IMG class=nbImage
alt="Go to options" src="destin_files/navbar-options.gif"></A>
<DIV class=nbLabel>Options</DIV></TD></TR>
<TR style="HEIGHT: 1.5em">
<TD class=nbFlybar id=show_folders onkeydown=flybar_keydown()
onclick=ToggleTab(this.id) tabIndex=0 noWrap>
<DIV class=treeOFLOW>Folders</DIV></TD></TR>
<TR>
<TD class=nbTreeProgress id=treeProgress style="DISPLAY: none"
vAlign=top noWrap><SPAN id=idLoading
style="OVERFLOW: hidden">Loading...</SPAN>
</TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
</BODY></HTML>

描述

描述 展示了示例规则集与实例研究之间的映射。

表 4–3 示例规则集与实例研究之间的映射

页内容 

应用的规则 

重写器输出 

描述 

var g_szVirtualRoot=
"http://abc.siroe.com/mailweb";

<Variable name="URL"> g_szVirtualRoot </Variable> 

var g_szVirtualRoot= 
"http://gateway.sesta.com
/http://abc.siroe.com/mailweb";

g_szVirtualRoot 是一个值为简单 URL 的变量。

该规则通知重写器搜索 URL 类型的变量 g_szVirtualRoot。如果网页中存在这样的变量,重写器会将其转换成绝对 URL,并在其前加上网关 URL。

src="/destin_files/
logo-ie5.gif"

<Attribute name="src" /> 

src="http://gateway.sesta.com/
http://abc.siroe.com/
destin_files/logo-ie5.gif

src 是属性的名称,它没有附带任何标记或 valuePattern。 

该规则通知重写器搜索所有具有名称 src 的属性,并重写该属性的值。

href="http://abc.siroe.com

/mailclient/destin/Inbox/
?Cmd=contents&amp;Page=1"

<Attribute name="href"/>

href="http://gateway.sesta.com/
http://abc.siroe.com
/mailclient/destin/
Inbox/?Cmd=contents&amp;Page=1"

href 是属性的名称,它没有附带任何标记或 valuePattern。 

该规则通知重写器搜索所有具有名称 href 的属性,并重写该属性的值。


注 –

规则集应用优先顺序为 hostname-subdomain-domain

例如,假定在基于域的规则集列表中有下列条目:

sesta.com|ruleset1
eng.sesta.com|ruleset2
host1.eng.sesta.com|ruleset3

ruleset3 将应用于 host1 上的所有页。

除了从 host1 中检索到的页之外,ruleset2 将应用于 eng 子域中的所有页。

除了从 eng 子域和 host1 中检索到的页之外,ruleset1 将应用于 sesta.com 域中的所有页。


  1. 单击“保存”以完成修改。

  2. 从终端窗口中重新启动网关:


    ./psadmin start-sra-instance –u amadmin – f  <password file> –N <profile name>– t  <gateway>
    

Outlook Web Access 规则集

Secure Remote Access 服务器支持 Sun Java System Web Server 及 IBM 应用服务器上 Outlook Web Access (OWA) 的 MS Exchange 2000 SP3 安装和 MS Exchange 2003 安装。

Procedure配置 OWA 规则集

  1. 以管理员身份登录到 Portal Server 管理控制台。

  2. 选择“Secure Remote Access”选项卡,然后选择想要为其设置属性的网关配置文件。

  3. 在“将 URI 映射至规则集”字段中,输入安装了 Exchange 2000 的服务器名称,紧接着为 Exchange 2000 Service Pack 4 OWA 规则集。

    例如:


    exchange.domain.com|exchange_2000sp3_owa_ruleset。

使用公共文件夹

在 Exchange 端,“公共文件夹”被配置为使用 NTLM 验证。在此,需要将其更改为使用 HTTP 基本验证。

要执行此操作,转到 Exchange 服务器并选择“控制面板”-->“管理工具”,然后打开“Internet 信息服务”。

在“默认 Web 站点”下,有一个名为“公共”的选项卡,用于设置公共文件夹。单击鼠标右键并选择“属性”。单击“目录安全”选项卡。在“匿名访问和验证”控制面板中选择“编辑..”。取消选中除“基本验证”之外的所有其他选项。

6.x 与 3.0 的规则集映射

下表列出了 Secure Remote Access 服务器重写器规则与 Portal Server 产品先前版本的映射。

表 4–4 与 SP3 的规则映射

Rewriter 6.0 DTD 元素 

Rewriter 3.0 列表框名称 

HTML 内容规则

 

属性 - URL 

重写 HTML 属性 

属性 - DJS 

重写包含 JavaScript 的 HTML 属性 

表单 

重写表输入标记列表 

Applet 

重写 Applet/Object 参数值列表 

JavaScript 内容规则

 

变量 - URL 

重写 URL 中的 JavaScript 变量 

变量 - EXPRESSION 

重写 JavaScript 变量函数 

变量 - DHTML 

重写 HTML 中的 JavaScript 变量 

变量 - DJS 

重写 JavaScript 中的 JavaScript 变量 

变量 - SYSTEM 

重写 JavaScript 系统变量 

函数 - URL 

重写 JavaScript 函数参数 

函数 - EXPRESSION 

重写 JavaScript 函数参数功能 

函数 - DHTML 

重写 HTML 中的 JavaScript 函数参数 

函数 - DJS 

重写 JavaScript 中的 JavaScript 函数参数 

XML 内容规则

 

属性 - URL 

重写 XML 文档的属性值 

TagText 

重写XMl 文档的文本数据 

CSS 内容规则

 

无需任何规则。默认情况下,会转换所有 URL 

 

WML 内容规则

 

未定义任何规则。WML 以 HTML 方式处理,并应用 HTML 规则。 

 

WMLScript 内容规则

 
   

不支持 WML 脚本 

 

第 5 章 使用 NetFile

本章说明 NetFile 及其操作。若要配置 NetFile,参见第 14 章,配置 NetFile

NetFile 简介

NetFile 是一个文件管理器应用程序,它允许用户对远程文件系统和目录进行访问和操作。

Secure Remote Access 的 NetFile 组件以 Java2 applet 形式提供。Java2 applet 具有更加理想的界面,同时使访问更轻松。

NetFile 提供了以下关键功能:

支持的文件访问协议

NetFile 允许您使用 FTP、NFS 和 jCIFS (Microsoft Windows) 协议访问远程系统。它包括以下文件访问协议功能:


注 –

如果服务器正在非标准端口上运行,则连接会失败。


表 5–1 文件系统和支持的协议

文件系统/协议 

平台 

FTP 

运行于 Novell Netware 上的 Novell FTP 5.1 Server 

运行于 Win NT 4.0 上的 MS FTP Server 4.0 

运行于 Win NT 2000 上的 MS FTP Server 5.0 

Solaris FTP Server 

WU_FTP 2.6.1 

ProFTPD 1.2.8 

vsFTPd 1.2.0 

NFS 

Solaris 2.6 及更高版本 

jCIFS 

Windows 95/98/NT/2000/ME/XP 


注 –

要使用 NetFile 将文件上载到 ProFTPD 服务器,需要在运行 ProFTPD 服务器的主机中将 proftpd.conf 文件中的“AllowStoreRestart”设置为“on”。

只有通过 FTP 服务器才支持 Novell Netware,不能通过本机访问支持。

要访问 Microsoft Windows (SMB/CIFS) 文件系统,必须在 Portal Server 上安装 jCIFS。jCIFS 是实现 CIFS/SMB 联网协议的“开放源代码”客户机库。


Procedure创建 NetFile 策略

  1. 以管理员身份登录到 Portal 管理控制台。

  2. 选择“Secure Remote Access”选项卡,然后选择“NetFile”选项卡。

  3. 从“选择 DN”下拉框选择“组织”/“角色”/“用户”。

  4. 将权限设置为访问/拒绝主机和服务。

  5. 单击“保存”。

  6. 重新启动网关。

第 6 章 使用 Netlet

本章说明如何使用 Netlet 在用户远程桌面与内联网中运行应用程序的服务器之间安全地运行应用程序。若要配置 Netlet,参见第 11 章,配置 Netlet

本章包含以下各节:

Netlet 简介

Sun Java System Portal Server 软件用户可能希望在其远程桌面上以安全方式运行一些流行的或公司专用的应用程序。通过在您的平台上设置 Netlet,可提供对这些应用程序的安全访问。

Netlet 使得用户可以在不安全的网络(如 Internet)上安全地运行常用 TCP/IP 服务。您可以运行 TCP/IP 应用程序(如 Telnet 和 SMTP)、HTTP 应用程序和任何使用固定端口的应用程序。

如果应用程序基于 TCP/IP 或使用固定端口,则可以在 Netlet 上运行该应用程序。


注 –

仅当使用 FTP 时才支持动态端口。要使用 Microsoft Exchange,请使用 OWA (Outlook Web Access)。

请确保通知您的用户在使用 Netlet 时,必须禁用其浏览器中的弹出窗口阻止程序选项。


Netlet 组件

Netlet 使用的各种组件如 Netlet 组件中所示。

图 6–1 Netlet 组件

Netlet 组件

localhost 上的侦听端口

这是 Netlet applet 在其上进行侦听的客户机中的端口。客户机为 localhost。

Netlet Applet

Netlet applet 负责在远程客户机与内联网应用程序(如 Telnet、Graphon 或 Citrix)之间设置加密 TCP/IP 隧道。applet 将信息包加密,并将其发送至网关,然后解密来自网关的响应信息包,并将其发送至本地应用程序。

对于静态规则,当用户登录到门户时,将自动下载 Netlet applet。对于动态规则,当用户单击对应于动态规则的链接时,会下载 applet。有关静态和动态规则的详细信息,参见规则类型

要在 Sun Ray 环境下运行 Netlet,参见在 Sun Ray 环境中运行 Netlet

Netlet 规则

Netlet 规则会将需要在客户机上运行的应用程序映射到相应的目标主机中。这意味着 Netlet 仅适用于发送至在 Netlet 规则中所定义端口中的信息包。这将确保更高的安全性。

作为管理员,您需要为 Netlet 的运行配置特定规则。这些规则指定各种细节,如要使用的密码、要调用的 URL、要下载的 applet、目标端口以及目标主机。当客户机上的用户通过 Netlet 提出请求时,这些规则有助于确定建立连接必须采用的方式。有关详细信息,参见定义 Netlet 规则

Netlet 提供者

这是 Netlet 的 UI 组件。提供者允许用户从 Portal Server 桌面配置所需的应用程序。提供者中创建了一个链接,用户单击此链接可运行所需的应用程序。用户也可在 Netlet 提供者的桌面上指定动态规则的目标主机。参见定义 Netlet 规则

Netlet 代理(可选)

网关可确保远程客户机与网关之间的隧道安全。Netlet 代理是可选的,在安装期间可以选择不安装此代理。有关 Netlet 代理的信息,参见使用 Netlet 代理

Netlet 使用方案

Netlet 的使用涉及下列一系列事件:

  1. 远程用户登录至 Portal Server 桌面。

  2. 如果已为用户、角色或组织定义了静态 Netlet 规则,则自动将 Netlet applet 下载到远程客户机中。

    如果已为用户、角色或组织定义了动态规则,则用户需要在 Netlet 提供者中配置所需的应用程序。当用户单击 Netlet 提供者中的应用程序链接时,将下载 Netlet applet。有关静态和动态规则的详细信息,参见定义 Netlet 规则

  3. Netlet 将侦听在 Netlet 规则中定义的本地端口。

  4. Netlet 将在远程客户机与主机之间通过 Netlet 规则中指定的端口而设置一个频道。

使用 Netlet

为了使 Netlet 能够根据不同组织中各个用户的需要进行工作,您需要完成以下操作:

  1. 根据用户要求,确定需要创建静态规则还是动态规则。参见规则类型

  2. 从 Portal Server 管理控制台配置 Netlet 服务的选项。有关配置 Netlet 的信息,参见第 11 章,配置 Netlet

  3. 确定规则应基于组织、角色还是用户,并按要求在每一级别进行修改。有关组织、角色和用户的详细信息,参见《Portal Server 管理指南》。


    注 –

    请勿本地化 srapNetletServlet.properties 文件中框架集参数的值。


从远程主机下载 Applet

有时,URL 会返回一个页面,该页面包含需要从远程机器获取的嵌入式 applet。但是,Java 安全性只允许 applet 与从自己中下载的主机进行通信。要允许 applet 通过本地网络端口与网关进行通信,您需要检查 Access Manager 管理控制台上的“下载 Applet”字段,并指定以下语法:

local-port:server-host:server-port

其中

local-port 是 Netlet 侦听来自 applet 的通信量的本地端口

server-host 是下载 applet 之处

server-port 是用于下载 applet 的端口

定义 Netlet 规则

Netlet 配置由 Netlet 规则定义,这些规则使用“Secure Remote Access”配置选项卡下的 Portal Server 管理控制台进行配置。可以为组织、角色或用户配置 Netlet 规则。如果为角色或用户配置 Netlet 规则,请在选择组织后选择所需的角色或用户。


注意 – 注意 –

Netlet 规则不支持多字节条目。请勿为 Netlet 规则中的任何字段指定多字节字符。

Netlet 规则不可包含任何高于 64000 的端口号。


定义 Netlet 规则列出了 Netlet 规则中的字段。

表 6–1 Netlet 规则中的字段

参数 

描述 

值 

规则名称 

指定 Netlet 规则的名称。需要为每一规则指定一个唯一的名称。这在定义用户对指定规则的访问权限时是很有用的。 

 

加密密码 

定义加密密码,或指定用户可从中进行选择的密码列表。 

您所选择的密码会以列表形式出现在 Netlet 提供者中。用户可从选定列表中选择所需的密码。 

默认值 - 使用在 Netlet 管理控制台中指定的“默认 VM 本地密码”和“默认 Java 插件密码”。 

远程应用程序 URL 

指定当用户在 Netlet 提供者中单击相关链接时浏览器所打开的 URL。浏览器打开应用程序的窗口,并连接到本地端口号(稍后在规则中指定)处的 localhost

您需要指定相关的 URL。 

由 Netlet 规则所调用的应用程序的 URL。例如,telnet://localhost:30000

如果应用程序使用 applet 调用应用程序,请指定一个 URL。 

null– 如果应用程序不是由 URL 启动或由桌面控制,请设定此值。对于不基于网络的应用程序而言该项通常为 true。

启用下载 Applet 

指示是否有必要为本规则下载 applet。 

  • Client Port 表示客户机上的目标端口。该端口必须要不同于默认回环端口。为每一规则指定一个唯一的本地端口

  • Server Host 是从中下载 applet 的服务器名称。

  • Server Port 代表服务器上用于下载 applet 的端口。

    如果要下载 applet,且未指定服务器,则从 Portal Server 主机下载 applet。

启用扩展会话 

当 Netlet 处于活动状态时,它控制 Portal Server 会话的空闲超时。 

仅当 Netlet 处于活动状态而其余门户应用程序空闲时,才选中此复选框以保持门户会话处于活动状态。默认情况下,不会选择此选项。 

将本地端口映射至目标服务器端口 

本地端口 

Netlet 进行侦听的客户机上的端口。 

local-port 的值必须是唯一的。不能在一个以上的规则中指定特定端口号。

如果要为多个连接指定多台主机,需指定多个本地端口。有关语法,参见具有多个主机连接的静态规则

对于 FTP 规则,本地端口值必须是 30021。 

目标主机 

Netlet 进行侦听的客户机上的端口。 

Netlet 连接的收件人。 

host - 接收 Netlet 连接的主机名。它用于静态规则中。使用简单主机名(如 siroe)或全限定 DNS 样式的主机名(如 siroe.mycompany.com)。由于以下原因,指定多个主机:

local-port 的值必须是唯一的。不能在一个以上的规则中指定特定端口号。

如果要为多个连接指定多台主机,需指定多个本地端口。有关语法,参见具有多个主机连接的静态规则

对于 FTP 规则,本地端口值必须是 30021。 

与指定的每一台主机建立连接。需要为指定的每一台主机指定相应的客户机与目标端口。有关语法,参见具有多个主机连接的静态规则

尝试连接到指定主机列表中的任何一台可用主机。有关语法,参见具有多主机选择的静态规则

TARGET - 在语法中指定 TARGET 的规则为动态规则。TARGET 表示最终用户可在桌面 Netlet 提供者中指定一台或多台所需的目标主机。

单个规则中不能同时具有静态主机和 TARGET。 

目标端口 

目标主机上的端口 

除主机与目标主机外,还必须要指定一个目标端口。 

在有多台目标主机的情况下,可以指定多个目标端口。以 port1+port2+port3-port4+port5 格式指定多个端口。

端口号之间的加号 (+) 表示某单一目标主机的备选端口。 

端口号之间的减号 (-) 是不同目标主机端口号之间的分隔符。 

在此,Netlet 按顺序依次使用 port1port2port3,以尝试连接到指定的第一台目标主机。如果失败,Netlet 使用 port4port5(按此顺序)以尝试连接到第二台主机。

只可为静态规则配置多个端口。 

对于要从 Portal Server 获得会话通知的网关,将以下内容:

com.iplanet.am.jassproxy.trustAllServerCerts=true

添加到 Portal Server 上的以下属性文件中:

Portal Server 上的 /etc/opt/SUNWam/config/AMConfig.instance-name .properties

规则类型

根据规则中目标主机的指定方式,将 Netlet 规则分为两种类型。

静态规则

静态规则将目标主机指定为规则的一部分。如果创建静态规则,用户就无权指定所需的目标主机。在下面的示例中,sesta 是目标主机。

规则名称 

加密密码 

URL 

启用下载 Applet 

启用扩展会话 

将本地端口映射至目标服务器端口 

ftpstatic 

SSL_RSA_WITH_RC 4_128_MD5

null 

false 

true 

  • 本地端口:30021

  • 目标主机:sesta

  • 目标端口:21

可为静态规则配置多台目标主机和多个端口。有关示例,参见具有多个主机连接的静态规则

动态规则

在动态规则中,不会将目标主机指定为规则的一部分。用户可以在 Netlet 提供者中指定所需的目标主机。在下面的示例中,TARGET 是目标主机的占位符。

规则名称 

加密密码 

远程应用程序 URL 

启用下载 Applet 

启用扩展会话 

将本地端口映射至目标服务器端口 

ftpdynamic 

SSL_RSA_WIT H_RC4_128_MD5

null 

选中复选框 

选中复选框 

  • 本地端口:30021

  • 目标主机:TARGET

  • 目标端口:21

加密密码

根据加密密码,可将 Netlet 规则进一步分类如下:

规则名称 

加密密码 

远程应用程序 URL 

启用下载 Applet 

启用扩展会话 

将本地端口映射至目标服务器端口 

Telnet 

SSL_RSA_WITH_RC4 _128_SHA

null 

选中复选框 

选中复选框 

  • 本地端口:30000

  • 目标主机:TARGET

  • 目标端口:23

 

SSL_RSA_WITH_RC4 _128_MD5

       


注 –

尽管 Portal Server 主机可能启用了多个不同的密码,但用户可以只从作为 Netlet 规则一部分而配置的密码列表中进行选择。


有关 Netlet 所支持的密码列表,参见支持的密码

规则名称 

加密密码 

远程应用程序 URL 

启用下载 Applet 

启用扩展会话 

将本地端口映射至目标服务器端口 

Telnet 

SSL_RSA_WITH_RC4_128_MD5

null 

选中复选框 

选中复选框 

  • 本地端口:30000

  • 目标主机:TARGET

  • 目标端口:23

有关 Netlet 所支持的密码列表,参见支持的密码

支持的密码

支持的密码列出了 Netlet 支持的密码。

表 6–2 支持密码的列表

密码 

本机 VM 密码

KSSL_SSL3_RSA_WITH_3DES_EDE_CBC_SHA 

KSSL_SSL3_RSA_WITH_RC4_128_MD5 

KSSL_SSL3_RSA_WITH_RC4_128_SHA 

KSSL_SSL3_RSA_EXPORT_WITH_RC4_40_MD5 

KSSL_SSL3_RSA_WITH_DES_CBC_SHA 

Java 插件密码

SSL_RSA_WITH_3DES_EDE_CBC_SHA 

SSL_RSA_WITH_RC4_128_MD5 

SSL_RSA_WITH_RC4_128_SHA 

SSL_RSA_EXPORT_WITH_RC4_40_MD5 

SSL_RSA_WITH_DES_CBC_SHA 

SSL_RSA_WITH_NULL_MD5 

TLS_RSA_WITH_AES_128_CBC_SHA 

TLS_RSA_WITH_AES_256_CBC_SHA 

向后兼容性

Portal Server 的早期版本不支持将密码作为 Netlet 规则的一部分。考虑到不带密码的现有规则的向后兼容性,这些规则将使用默认密码。不带密码的现有规则,如:

规则名称 

加密密码 

远程应用程序 URL 

启用下载 Applet 

启用扩展会话 

将本地端口映射至目标服务器端口 

Telnet 

 

telnet://localhost:30000

请勿选中复选框 

选中复选框 

  • 本地端口:30000

  • 目标主机:TARGET

  • 目标端口:23

会被解释为:

规则名称 

加密密码 

远程应用程序 URL 

启用下载 Applet 

启用扩展会话 

将本地端口映射至目标服务器端口 

Telnet 

默认密码 

telnet://localhost:30000

请勿选中复选框 

选中复选框 

  • 本地端口:30000

  • 目标主机:TARGET

  • 目标端口:23

这与将“加密密码”字段选为“默认值”的“管理员配置规则”相似。


注 –

Netlet 规则无法包含任何大于 64000 的端口号。


Netlet 规则示例

本部分包含 Netlet 规则的几个示例以说明 Netlet 语法的作用机理。

基本静态规则

该规则支持客户机与 sesta 机器之间的 Telnet 连接。

规则名称 

加密密码 

远程应用程序 URL 

下载 Applet 

扩展会话 

将本地端口映射至目标服务器端口 

myrule 

SSL_RSA_WITH_RC4_128_MD5

null 

请勿选中复选框 

true 

  • 本地端口:1111

  • 目标主机:sesta

  • 目标端口:23

其中

myrule 是规则名称。

SSL_RSA_WITH_RC4_128_MD5 表示要使用的密码。

null 表示该应用程序并非由 URL 调用或通过桌面运行。

false 表示客户机并不会下载 applet 以运行该应用程序。

true 表示当 Netlet 连接处于活动状态时 Portal Server 不应超时。

1111 是客户机上的端口,Netlet 在此侦听来自目标主机的连接请求。

sesta 是 Telnet 连接中的收件人主机名称。

23 是目标主机上用于连接的端口号,在本例中为众所周知的 Telnet 端口。

桌面 Netlet 提供者不显示链接,但 Netlet 会自动启动,并侦听指定端口 (1111)。指示用户启动客户机软件 - 此情况下为连接至端口 1111 上的 localhost 的 Telnet 会话。

例如,要启动 Telnet 会话,客户需要在终端的 UNIX 命令行中键入以下内容:


telnet localhost 1111

具有多个主机连接的静态规则

该规则支持从客户机到两台机器 sestasiroe 的 Telnet 连接。

规则名称 

加密密码 

远程应用程序 URL 

启用下载 Applet 

启用扩展会话 

将本地端口映射至目标服务器端口 

myrule 

SSL_RSA_WITH_RC4_128_MD5

null 

请选中复选框 

选中复选框 

  • 本地端口:1111–1234

  • 目标主机:sesta-siroe

  • 目标端口:23

其中

23 是目标主机上用于连接的端口号 – Telnet 的专用端口。

1111 是客户机上的端口,Netlet 在此侦听来自第一台目标主机 sesta 的连接请求。

1234 是客户机上的端口,Netlet 在此侦听来自第二台目标主机 siroe 的连接请求。

该规则中的前六个字段与基本静态规则中相同。区别在于标识第二台目标主机的另外三个字段。

在向规则中添加附加目标时,必须为每一台新目标主机添加三个字段,即本地端口目标主机目标端口


注 –

您可以用多组三字段来描述与每一目标主机的连接。如果远程客户机是基于 UNIX 的,切不可使用小于 2048 的侦听端口号,因为编号较低的端口将受限制,而且您必须是根用户才能启动侦听器。


该规则与前一规则作用相同。Netlet 提供者不显示任何链接,但 Netlet 会自动启动,并侦听指定的两个端口(1111 和 1234)。用户需要启动客户机软件(在本例中为 Telnet 会话,它连接至端口 1111 上的 localhost 或端口 1234 上的 localhost)以连接到第二个示例中的主机。

具有多主机选择的静态规则

使用该规则可指定多台备选主机。如果与规则中第一台主机的连接失败,Netlet 会尝试连接指定的第二台主机,依此类推。

规则名称 

加密密码 

远程应用程序 URL 

启用下载 Applet 

启用扩展会话 

将本地端口映射至目标服务器端口 

gojoe 

SSL_RSA_WITH_RC4_128_MD5

/gojoe.html 

  • 客户机端口:8000

  • 服务器主机:gojoeserver

  • 服务器端口:8080

选中复选框 

  • 本地端口:10491

  • 目标主机:siroe+sesta

  • 目标端口:35+26+491-35+491

其中

10491 是客户机上的端口,Netlet 在此侦听来自目标主机的连接请求。

依据可用的端口,Netlet 将首先尝试与端口 35、端口 26 和端口 491 上的 siroe 建立连接(均按相同顺序)。

如果无法连接到 siroe,则 Netlet 会尝试连接到端口 35491 上的 sesta(按相同顺序)。

主机之间的加号 (+) 表示备选主机。

端口号之间的加号 (+) 表示某单一目标主机的备选端口。

端口号之间的减号 (-) 是不同目标主机端口号之间的分隔符。


注 –

会尝试顺次连接到链条中提供的主机。例如,如果规则为 siroe+ sesta,则会首先尝试连接到 siroe。如果连接失败,则会尝试连接到 sesta。如果规则中首先列出的主机无法在活动的网络中实际使用,则连接到下一个可用主机所需花费的时间将会随着规则中不可用主机数的增加而增加。


调用 URL 的动态规则

该规则允许用户配置所需的目标主机,从而使用户可通过 Netlet 远程登录到各个主机上。

规则名称 

加密密码 

远程应用程序 URL 

启用下载 Applet 

启用扩展会话 

将本地端口映射至目标服务器端口 

myrule 

SSL_RSA_WITH_RC4_128_MD5

telnet://localhost:30000 

请勿选中复选框 

选中复选框 

  • 本地端口:30000

  • 目标主机:TARGET

  • 目标端口:23

其中

myrule 是规则名称。

SSL_RSA_WITH_RC4_128_MD5 表示要使用的密码。

telnet://localhost:30000 是由规则所调用的 URL。

false 表示将不会下载任何 applet。

Extend Session (true) 表示当 Netlet 连接处于活动状态时 Portal Server 不应超时。

30000 是客户机上的端口,Netlet 在此侦听针对此规则的连接请求。

TARGET 表示使用 Netlet 提供者的用户需要配置的目标主机。

23 是由 Netlet 打开的目标主机上的端口,在本例中为众所周知的 Telnet 端口。

Procedure在添加规则之后运行 Netlet

添加该规则之后,用户必须要完成一些步骤才能使 Netlet 按照预期方式运行。用户需要在客户机端执行以下操作:

  1. 在标准 Portal Server 桌面的 Netlet 提供者部分单击“编辑”。

    在“添加新目标”部分的“规则名称”下面会列出新的 Netlet 规则。

  2. 选择规则名称,并键入目标主机的名称。

  3. 保存更改。

    用户返回桌面,同时在 Netlet 提供者部分会看到新的链接。

  4. 单击新链接。

    将会启动一个新的浏览器,转至 Netlet 规则中给出的 URL。


    注 –

    通过重复以上步骤可以为同一规则添加多台目标主机。只有选定的最后一个链接是活动的。


下载 Applet 的动态规则

此规则定义了从客户机到动态分配主机的连接。它会从 applet 所处的服务器上将 GO-Joe applet 下载到客户机中。

规则名称 

加密密码 

远程应用程序 URL 

启用下载 Applet 

扩展会话 

将本地端口映射至目标服务器端口 

gojoe 

SSL_RSA_WITH_RC4_128_MD5

/gojoe.html 

  • 客户机端口:8000

  • 服务器主机:gojoeserver

  • 服务器端口:8080

选中复选框 

  • 本地端口:3399

  • 目标主机:TARGET

  • 目标端口:58

其中

gojoe 是规则名称。

SSL_RSA_WITH_RC4_128_MD5 表示要使用的密码。

例如,/gojoe.html 是包含 applet 的 HTML 页的路径,该路径应相对于部署门户的 Web 容器文档根目录。

8000:server:8080 指明端口 8000 是客户机上用于接收 applet 的目标端口,gojoeserve 是提供 applet 的服务器的名称,8080 则是自其下载 applet 的服务器上的端口。

Extended Session (true) 表示当 Netlet 连接处于活动状态时 Portal Server 不应超时。

3399 是客户机上的端口,Netlet 在此侦听此类型的连接请求。

TARGET 表示使用 Netlet 提供者的用户需要配置的目标主机。

58 是由 Netlet 打开的目标主机上的端口,在本例中为 GoJoe 的端口。端口 58 是目标主机侦听其自身通信量的端口。Netlet 将信息从新 applet 传递至该端口。

Netlet 规则示例

Netlet 规则示例列出了一些常见应用程序的 Netlet 规则示例。

该表由 7 列组成,分别对应于 Netlet 规则中的以下字段:规则名称、URL、下载 Applet、本地端口、目标主机、目标端口。最后一列中包括对规则的描述。


注 –

Netlet 规则示例未列出 Netlet 规则的“密码”和“扩展会话”字段。对于所提供的示例,假定这两个字段分别为 "SSL_RSA_WITH_RC4_128_MD5" 和 "true"。


表 6–3 Netlet 规则示例

规则名称 

远程应用程序 URL 

启用下载 Applet 

将本地端口映射至目标服务器端口 

描述 

IMAP

null 

请勿选中复选框 

  • 本地端口:10143

  • 目标主机:imapserver

  • 目标端口:143

客户机端的 Netlet 本地端口不必与服务器端的目标端口相同。如果您使用的不是标准的 IMAP 和 SMTP 端口,请确保配置客户机以将其连接在不同于标准端口的端口上。

Solaris 客户机用户不能连接到小于 1024 的端口号,除非他们以超级用户身份运行。 

SMTP

null 

请勿选中复选框 

  • 本地端口:10025

  • 目标主机:smtpserver

  • 目标端口:25

 

Lotus Web 客户机

null 

请勿选中复选框 

  • 本地端口:80

  • 目标主机:lotus-server

  • 目标端口:80

该规则将指示 Netlet 侦听端口 80 上的客户机,并连接到端口 80 上的 lotus-server 服务器。“Lotus Web 客户机”的一项要求就是客户机侦听端口必须与服务器端口匹配。 

Lotus Notes 非 Web 客户机

null 

请勿选中复选框 

  • 本地端口:1352

  • 目标主机:lotus-domino

  • 目标端口:1352

利用此项规则,Lotus Notes 客户机可以通过 Netlet 连接到 Lotus Domino 服务器。需确保在客户机尝试连接到服务器时,它切不可指向 localhost 作为服务器名称。它必须指向 Lotus Domino 服务器的实际服务器名称。服务器名称必须与服务器的系统名称相同。当使用 Netlet 时,客户机必须将该名称解析为 127.0.0.1。实现此目的的两种方式为:

  • 设置客户机名称以使其指向客户机主机表中的 127.0.0.1

  • 导出指向 127.0.0.1 的服务器名称的 DNS 条目。

    服务器名称必须是安装期间用于配置 Domino 服务器的同一服务器名称。

Microsoft Outlook 和 Exchange Server

它不适用于 Windows NT、2000 和 XP。对于 Windows NT、2000 和 XP,请借助于重写器使用 Outlook Web Access

null 

请勿选中复选框 

  • 本地端口:135

  • 目标主机:exchange

  • 目标端口:135

该规则指示 Netlet 侦听客户机上的端口 135,并连接到端口 135 上的服务器 exchange。Outlook 客户机使用此端口进行首次尝试以联络 Exchange 服务器,并确定和该服务器通话时要使用的后续端口。

在客户机上: 

  • 用户必须将 Outlook 客户机中所配置的 Exchange 服务器的主机名更改为 localhost。该选项的位置随 Outlook 版本的不同而不同。

  • 用户必须使用主机文件将 Exchange 服务器的主机名(单一且全限定)映射到 IP 地址 127.0.0.1

  • 在 Windows 95 或 98 中,该文件位于 \\Windows\\Hosts

  • 在 Windows NT4 中,该文件位于 \\WinNT\\System32\\drivers\\etc\\Hosts 下。

    该项形式如下:

    127.0.0.1 exchange exchange.company.com

    Exchange 服务器将其本身的名称发送回 Outlook 客户机。该映射可确保 Outlook 客户机使用 Netlet 客户机连接回服务器。

FTP

null 

请勿选中复选框 

  • 本地端口:30021

  • 目标主机:your-ftp_server.your-domain

  • 目标端口:21

您可以利用所控制的最终用户帐户为“FTP 服务器”提供 FTP 服务。这可确保在最终用户系统和单一位置之间进行安全的远程 FTP 传输。若无用户名,则将 FTP URL 解释为一个匿名的 FTP 连接。 

必须将端口 30021 定义为 Netlet FTP 规则的本地端口。

使用 Netlet 连接支持动态 FTP。 

Netscape 4.7 邮件客户端

null 

请勿选中复选框 

  • 本地端口:30143、30025。

  • 目标主机:TARGET

  • 目标端口:10143

在 Netscape 客户机中,用户需要指定: 

用于 IMAP 或接收邮件的 localhost:30143

用于 SMTP 或发送邮件的 localhost:30025

Graphon 

third_party/xsession_start.html 

选中复选框 

  • 本地端口:10491

  • 目标主机:TARGET

  • 目标端口:491

这是用于通过 Netlet 访问 Graphon 的规则。xsession_start.html 与 Graphon 捆绑在一起。

Citrix 

third_party/citrix_start.html 

选中复选框 

  • 本地端口:1494

  • 目标主机:TARGET

  • 目标端口:1494

这是用于通过 Netlet 访问 Citrix 的规则。citrix_start.html 与 Citrix 捆绑在一起。

RemoteControl 

third_party/pca_start.html 

选中复选框 

  • 本地端口:5631

    5632

  • 目标主机:TARGET

    TARGET

  • 目标端口:5631

    5632

这是用于通过 Netlet 访问“远程控制”的规则。pca_start.html 与“远程控制”捆绑在一起。

Netlet 日志信息

netlet applet 或 jws 的客户端日志会在客户端的 java 控制台上显示。

netlet 的服务器端日志在 /var/opt/SUNWportal/portals/<portal_ID>/logs/<INSTANCE_ID> 目录下的 portal.0.0.log 文件中显示。

在 Sun Ray 环境中运行 Netlet

如果您要在 Sun Ray 环境中运行需要将 applet 下载到客户机上的应用程序,就需要更改 HTML 文件。这里是一个示例文件,向您显示需要完成的必要修改。

新 HTML 文件

<!-- @(#)citrix_start.html 2.1
98/08/17 Copyright (c) 1998 i-Planet, Inc., All rights reserved.-->
<html>
<script language="JavaScript">
var KEY_VALUES;  // KEY_VALUES[\qkey\q] = \qvalue\q;
function retrieveKeyValues() {
      KEY_VALUES = new Object();
      var queryString  = \q\q + this.location;
      queryString = unescape(queryString);
      queryString = queryString.substring((queryString.indexOf(\q?\q)) + 1);
      if (queryString.length < 1) {
          return false; }
      var keypairs = new Object();
      var numKP = 0;
      while (queryString.indexOf(\q&\q) > -1) {
        keypairs[numKP] = queryString.substring(0,queryString.indexOf(\q&\q));
        queryString = queryString.substring((queryString.indexOf(\q&\q)) + 1);
        numKP++;
      }
      // Store what\qs left in the query string as the final keypairs[] data.
      keypairs[numKP++] = queryString;
      var keyName;
      var keyValue;
      for (var i=0; i < numKP; ++i) {
        keyName = keypairs[i].substring(0,keypairs[i].indexOf(\q=\q));
        keyValue = keypairs[i].substring((keypairs[i].indexOf(\q=\q)) + 1);
        while (keyValue.indexOf(\q+\q) > -1) {
          keyValue = keyValue.substring(0,keyValue.indexOf(\q+\q)) + \q \q
           + keyValue.substring(keyValue.indexOf(\q+\q) + 1);

        }
        keyValue = unescape(keyValue);
          // Unescape non-alphanumerics
        KEY_VALUES[keyName] = keyValue;
      }
}
function getClientPort(serverPort) {
    var keyName = "clientPort[\q" + serverPort +"\q]";
    return KEY_VALUES[keyName];
}
function generateContent() {
    retrieveKeyValues();
    var newContent =
        "<html>\\n"
          + "<head></head>\\n"
          + "<body>\\n"
          + "<applet code=\\"com.citrix.JICA.class\\" archive=\\
               "JICAEngN.jar\\" width=800 height=600>\\n"
          + "<param name=\\"cabbase\\" value=\\"JICAEngM.cab\\">\\n"
          + "<param name=\\"address\\" value=\\"localhost\\">\\n"
          + "<param name=ICAPortNumber value="
          + getClientPort(\q1494\q)
          + ">\\n"
          + "</applet>\\n"
          + "</body>\\n"
          + "</html>\\n";
    document.write(newContent);
}
</script>
<body onLoad="generateContent();">
</body>
</html>

弃用的 HTML 文件

<html>
<body>
<applet code="com.citrix.JICA.class" archive=
   "JICAEngN.jar" width=800 height=600>
<param name="cabbase" value="JICAEngM.cab">
<param name="address" value="localhost">
<param name=ICAPortNumber value=1494>
</applet>
</body></html>