Sun Java logo     上一页      目录      索引      下一页     

Sun logo
Sun Java System Portal Server 6 2004Q2 管理员指南 

第 9 章
管理重写器服务

本章介绍如何管理 Sun Java™ System Portal Server 的重写器服务。

本章包括以下部分:


重写器服务概述

Sun Java™ System Portal Server 重写器提供了一个引擎,用于在标记语言和 JavaScript™ 代码中执行 URL 转换。桌面和 Sun Java™ System Portal Server: Secure Remote Access 网关服务中的 URLScraperProviderXMLProvider 均使用重写器服务。

重写器会扫描网页的内容,并标识在这些网页上找到的 URL。它会使用在规则集中定义的规则集合来确定要重写的网页元素。重写器标识 URL 后,即可通过以下方式重写该 URL:

将相对 URL 扩展为绝对 URL

URLScraperProvider 是 Sun Java System Portal Server 核心产品的一部分。在无网关方案中,URLScraperProvider 可用于将相对 URL 扩展为绝对URL。例如,如果用户尝试访问以下站点:

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

重写器会将其转换为:

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

其中 http://www.yahoo.com/mail/ 为被凑集页的基 URL。

URLScraperProvider 限制

URLScraperProvider 的作用只是尝试在频道中显示指定的 URL,无法指定文档 URL(文档)的部分来进行显示。URLScraperProvider 与 HTTP 客户机的工作方式非常相似,因为它会请求获得指定 URL 的内容。正如在浏览器中那样,必须能够在网络上看见要凑集的目标 URL,或必须配置代理。

但所得 URL scraper 频道既不是小型浏览器,也不是框架。因此,如果内容中有链接,便会影响整个页,而不仅仅是频道。不应在 URL scraper 频道内浏览。如果在频道内选择了一个链接,浏览器会解析该链接,并用链接位置的内容替换当前显示的页(您的 portal server 桌面)。

凑集频道的外观受任何生成原始内容者的控制。URLScraperProvider 全然不会对内容进行修改,而只会显示通过 URL 获得的任何内容。由于频道实质上是 HTML 表中的一个单元格,因此它只会显示允许在表单元格中出现的 HTML 内容。也就是说,不能使用 URLScraperProvider 来凑集框架集,因为 <FRAMESET> 标记不能在 <BODY> 标记内出现。URLScraperProvider 也不会执行 <HEAD> 标记内的 JavaScript 代码。因此,以下凑集情况不适合 URLScraperProvider

源服务器发送 cookie 后,网络内容每次重新凑集后都会被转发回源服务器。因此在更新或重新加载门户桌面后,源服务器应在网络内容被首次凑集的同时获得其发送的 cookie。但当用户单击 url scraper 频道内的任何链接时,并不希望那些 cookie 被发回。

在现有 URL 前添加网关 URL

在使用网关的实现(如 Sun Java System Portal Server: Secure Remote Access)中,网关充当客户机的代理,它会访问内部网站点并向客户机返回响应。“重写器”会在现有 URL 前添加网关 URL 来转换已下载页中的 URL,使它们的返回目标指向网关,而非原站点。

例如,如果用户尝试通过以下 URL 来访问 mymachine 上的 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 的内容。

有关使用重写器在现有 URL 前添加网关 URL 的详细信息,参见Sun Java System Portal Server: Secure Remote Access 6 2004Q2 管理指南


支持的 URL

重写器支持对 RFC-1738 中列出的所有标准 URL 进行重写。对这些 URL 的支持不受协议是 HTTP 还是 HTTPS 的限制,与协议的大小写也无关。例如,hTtP、HTtp 和 httP 都有效。下方列出了一些标准 URL 的示例:

http://www.my.sesta.com
http://www.example.org:8000/imaginary/test
http://www.example.edu/org/admin/people#andy
http://info.example.org/AboutUs/Index/Phonebook?dobbins
http://www.example.org/RDB/EMP?*%20where%20name%%3Dobbins
http://info.example.org/AboutUs/Phonebook
http://user:password@example.com

重写器支持对某些基本的非标准 URL 进行重写。用于将非标准 URL 转换为标准格式所需的信息取自出现 URL 的页的基 URL,可包括协议、主机名和路径。反斜杠 (\) 只在其为相对 URL 而非绝对 URL 的一部分时,才予支持。例如,http://sesta.com\index.html 会被重写,但 http:\\sesta.com 则不然。

此外,协议或方案后使用单斜杠 (/) 的 URL(如 http:/sesta.com)不会被重写。


定义重写器规则和规则集

重写器会修改网页上出现的各种元素的 URL 部分。重写器自带一组默认规则,用于确定要重写的网页元素。各种类别和子类别的规则集合存储在一个 .dtd 文件中,称为规则集。重写器规则集在 XML 中定义。

该 DTD 位于 /opt/SUNWps/web-src/WEB-INF/lib/rewriter.jar (resources/RuleSet.dtd)。规则集用于识别 URL。默认情况下,网络内容中以诸如“/”、../、“http”和“https”字符开头的字符串均会被视为 URL 而作为重写的候选对象。

要配置符合您的实现需要的重写器,须在管理控制台“Portal Server 配置”的“重写器”部分中创建规则集并定义规则。有关创建和修改规则集的详细信息,参见管理重写器服务。可以根据网页的内容类型定义多个规则。例如,重写 HTML 内容所需的规则会与重写 JavaScript 内容所需的规则不同。重写器规则分为以下宽泛类别:

规则集是一个 XML 文档,其中的 XML 的格式必须正确。定义规则集中的规则时,请记住以下指导方针:

HTML 内容规则

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

HTML 内容属性规则

属性规则会识别 HTML 页中的基本属性标记来进行重写。重写器会通过扩展或在现有 URL 前添加前缀来修改出现的各种已定义标记。默认规则集会重写以下属性标记:

属性规则的语法为:

<Attribute name="name" [tag="tag" valuePatterns="patterns"]

其中:name 指定属性;tag 指定属性所属的标记(设置为 * 以与所有标记匹配);patterns 指定与属性匹配的可能模式。tagvaluePatterns 参数为可选项。

HTML 内容的 JavaScript 标志规则

网页的 JavaScript 标记内可以包含纯 JavaScript 代码,也可包含 JavaScript 标志或函数。例如,网页中可包含 onClick() 函数,利用该函数可跳转到其他 URL。为使网页能够正常工作,必须转换和重写 onClick() 函数的值。在大多数情况下,默认规则集中提供的规则足以用来重写 JavaScript 标志中的 URL。默认规则集会重写以下 JavaScript 标志:

“JavaScript 标志”规则的语法为:

<JSToken>javascript_function_name</JSToken>

其中:javascript_function_name 为函数名(如 onLoadonClick)。

HTML 内容的表单规则

用户可浏览包含表单的 HTML页。表单元素(如input)可将URL作为值。默认规则集不会重写任何表单元素。表单规则语法为:

<Form source="/source.html" name="form1" field="field1"> [valuePatterns="pattern"] />

其中:/source.html 为包含表单的 HTML 页的 URL;form1 为表单名称;field1 为要重写的表单字段;pattern 指要重写的字段部分。与指定模式相符的所有内容均会被重写。

valuePatterns 参数为可选项。

HTML 内容的 Applet 规则

一个网页可包含许多 applet,而每个 applet 又可包含许多参数。Applet 中 URL 的重写器规则应包含以下项的模式匹配信息:

重写器会使用规则中指定的值与 applet 的内容进行匹配,然后按需要修改 URL。此替换在服务器处执行,用户浏览特定网页时并不会执行。规则中也可使用通配符 (*)。例如,参数名可以是 *,在这种情况下,重写器不会比较 applet 中的参数名。

默认规则集不会重写任何 applet 参数。

Applet 规则的语法为:

<Applet source="sourcehtml.jsp" code="class" param="parameter_name" [valuePatterns="pattern"]

其中:/sourcehtml.jsp 为包含 applet 的 URL;class 为 applet 类的名称;parameter_name 为需要重写值的参数;pattern 指要重写的字段部分。与指定模式相符的所有内容均会被重写。valuePatterns 参数为可选项。

JavaScript 内容规则

URL 可以出现在 JavaScript 代码的各个部分中。重写器无法直接分析 JavaScript 代码并确定 URL 部分。需要编写一组特殊的规则来帮助 JavaScript 处理器对 URL 进行转换。

包含 URL 的 JavaScript 元素分类如下:

JavaScript 变量

JavaScript 变量又分为五个类别:

JavaScript URL 变量

URL 变量在右侧有一个 URL 字符串。默认规则集会重写以下 JavaScript URL 变量:

JavaScript 内容规则中的 URL 变量的语法为:

<Variable type="URL">variable_name</Variable>

其中 variable_name 为要重写的变量的名称。

JavaScript 表达式变量

表达式变量在右侧有一个表达式。此表达式的结果是一个 URL。由于“重写器”无法对此类表达式求值,因此会追加一个 JavaScript 函数,用于将表达式转换为 HTML 页。此函数将表达式视为一个参数,并在客户机浏览器中对其求值。

默认规则集会重写 location JavaScript 表达式变量。

JavaScript 内容规则中的表达式变量的语法为:

<Variable type="EXPRESSION">variable_exp</Variable>

其中 variable_exp 为表达式变量。

JavaScript DHTML 变量

DHTML 变量是包含 HTML 内容的 JavaScript 变量。默认规则集会重写以下 JavaScript DHTML 变量:

JavaScript 内容中的 DHTML 变量的语法为:

<Variable type="DHTML">variable</Variable>

其中 variable 为 DHTML 变量。

JavaScript DJS(动态 JavaScript)变量

DJS(动态 JavaScript)变量是包含 JavaScript 内容的 JavaScript 变量。

JavaScript 内容中的 DJS 变量的语法为:

<Variable type="DJS">variable</Variable>

其中 variable 为 DJS 变量。

包含在变量中的 JavaScript 代码需使用另一规则进行转换。

JavaScript 系统变量

系统变量指不是由用户声明、但作为 JavaScript 标准的一部分提供的变量。

默认规则集会重写 window.location.pathname JavaScript 系统变量。

JavaScript 内容中的系统变量的语法为:

<Variable type="SYSTEM">variable</Variable>

其中 variable 为系统变量。

JavaScript 函数参数

函数参数分为以下四类:

JavaScript URL 参数

URL 参数指直接包含 URL 的字符串参数。

默认规则集会重写以下 JavaScript URL 参数:

URL 参数的语法为:

<Function type = "URL" name = "function" [paramPatterns="y,y,"] />

其中:function 为要求值的函数的名称;y 指需要重写的参数的位置。参数位置以逗号分隔。例如,语法行中的第一、第二个参数需要重写,但第三个参数不需要重写。

JavaScript 表达式参数

“表达式”参数是函数中求值结果为 URL 的变量。“表达式”参数的语法为:

<Function type = "EXPRESSION" name = "function" [paramPatterns="y,y,"] />

其中:function 为要求值的函数的名称;y 指需要重写的参数的位置。参数位置以逗号分隔。例如,语法行中的第一、第二个参数需要重写,但第三个参数不需要重写。

JavaScript DHTML 参数

DHTML 参数是动态生成 HTML 页的本机 JavaScript 方法。例如,document.write() 方法便归属此类别。

默认规则集会重写以下 JavaScript DHTML 参数:

DHTML 参数的语法为:

<Function type = "DHTML" name = "function" [paramPatterns="y,y,"] />

其中:function 为要求值的函数的名称;y 指需要重写的参数的位置。参数位置以逗号分隔。例如,语法行中的第一、第二个参数需要重写,但第三个参数不需要重写。

JavaScript DJS 参数

“动态 JavaScript”(DJS) 参数(如 HTML 中的“层叠样式表”(CSS))也会被转换。由于 URL 只出现在 CSS 的 url() 函数中,因此没有为此类转换定义的规则。DJS 参数的语法为:

<Function type = "DJS" name = "function" [paramPatterns="y,y,"] />

其中:function 为要求值的函数的名称;y 指需要重写的参数的位置。参数位置以逗号分隔。例如,语法行中的第一、第二个参数需要重写,但第三个参数不需要重写。

XML 内容规则

网页可包含 XML 内容,而 XML 内容又可包含 URL,重写器可重写 XML 内容中的 URL。

包含 URL 的 XML 内容分类如下:

XML 中的标记文本

重写器会根据标记名称转换 XML 内容。

默认规则集会重写 XML 中的以下标记:

标记文本的语法为:

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

其中:attribute 为标记的名称;src 为属性的名称。

XML 中的属性

XML 中的属性规则与 HTML 中的属性规则类似。有关详细信息,参见 HTML 内容属性规则。重写器会根据属性和标记名来转换属性值。

默认规则集会重写 XML 中的以下属性:

HTML 中的属性的语法为:

<Attributes>
 <Attribute name="attribute" [valuePatterns="name=src"/>
</Attributes>

其中:attribute 为标记的名称;src 为属性的名称。


管理重写器服务

在 Sun Java System Portal Server 6 2004Q2 中,“重写器”服务使用 Sun Java™ System Identity Server 属性为重写器规则集提供持久存储。重写器规则集定义网页内容应该如何由重写器重写。作为Sun Java System Identity Server服务属性值,可以通过Sun Java System Identity Server管理控制台定义并存储多个重写器规则集。

也可使用命令行来管理重写器。有关 rwadmin 命令的详细信息,参见第 21 章,“命令行实用程序”

因为 Sun Java System Identity Server 管理控制台无法识别任何重写器规则集,所以 Sun Java System Portal Server 会使用定制服务管理插件模块来管理它们。所有重写器规则集对于Sun Java System Identity Server中的组织都是全局性的。没有规定允许在任何特定组织级别创建规则集。


注  

URLScraperProvider 只能凑集在 HTML 表单元格内有效的内容。如果要凑集的 HTML 标记包含无法在表单元格内呈现的标记(如 <body><base>)及某些无法在表单元格内呈现的 JavaScript 过程,便可能会破坏“桌面”页的显示。定义要凑集的内容时,请设法确认该内容为有效的 HTML。有关进一步信息,参见 URLScraperProvider 限制


为 SSL 配置重写器 URLScraperProvider

可使用重写器的 URLScraperProvider 来凑集 SSL 页,并重写 URL 以通过安全会话进行访问。

  1. 按以下步骤为安装了 Sun Java System Portal Server 的服务器初始化 Web 服务器管理控制台中的委托数据库:
    1. 在浏览器中输入以下 URL 来访问 Web Server 管理员页:
    2. http://servername:8088

    3. 以“管理员”身份登录,然后单击“安全”选项卡。
    4. 输入“数据库”口令两次,然后选择“确定”。
  2. 按以下步骤创建口令文件:
    1. 更改到 /BaseDir/SUNWam/config 目录。
    2. 创建一个隐藏的文本文件 .wtpass
    3. 键入初始化委托数据库时提供的口令。
  3. 如果未为通过 URLScraperProvider 访问的 Web 服务器所使用的证书安装根 CA,请将以下行添加到 /BaseDir/SUNWam/lib/AMConfig-instance_nickname.properties 文件中。
  4. com.sun.am.jssproxy.trustAllServerCerts=true

    此选项告知 JSS 可以信任证书。

  5. 重新启动 Sun Java System Portal Server。
  6. /etc/init.d/amserver start

从默认模板创建新规则集

  1. 以管理员身份登录到 Sun Java System Identity Server 管理控制台。
  2. 从位置窗格中选择“服务配置”。
  3. 在导航窗格中单击“重写器”旁的特性箭头。
  4. 数据窗格中会出现当前已定义的规则集列表。

  5. 单击“新建”。
  6. 将显示一个可对其进行修改的规则集模板。

  7. 编辑 <RuleSet id="ruleset_template"> 行,使用新规则集的名称替换 default_ruleset
  8. 如有必要,在规则集模板内添加或修改规则以重写 URL。
  9. 单击“保存”以创建新规则集。
  10. 成功操作之后,将可以看到初始页和所有当前已定义的规则集列表,表中应包括刚创建的规则集。

编辑现有规则集

  1. 以管理员身份登录到 Sun Java System Identity Server 管理控制台。
  2. 从位置窗格中选择“服务配置”。
  3. 在导航窗格中单击“重写器”旁的特性箭头。
  4. 数据窗格中会出现当前已定义的规则集列表。

  5. 单击要编辑的规则集的“编辑”链接。
  6. 将显示要编辑规则集的 XML。

  7. 如有必要,在规则集模板内添加或修改规则以重写 URL。
  8. 如果要更改规则集名称,请编辑<RuleSet id="ruleset_template">行,用规则集名称替换名称。
  9. 单击“保存”。

下载规则集

可以下载规则集并保存到文件。

  1. 以管理员身份登录到 Sun Java System Identity Server 管理控制台。
  2. 从位置窗格中选择“服务配置”。
  3. 在导航窗格中单击“重写器”旁的特性箭头。
  4. 数据窗格中会出现当前已定义的规则集列表。

  5. 单击规则集的“下载”链接将其保存到文件。
  6. 指定文件名称并保存。

要上载规则集

可将规则集文件上载到系统中。

  1. 以管理员身份登录到 Sun Java System Identity Server 管理控制台。
  2. 从位置窗格中选择“服务配置”。
  3. 在导航窗格中单击“重写器”旁的特性箭头。
  4. 数据窗格中会出现当前已定义的规则集列表。

  5. 单击列表中任何规则集旁的“上载”链接。
  6. 浏览到或键入要上载的规则集的名称。
  7. 单击“上载”。
  8. 如果文件中 <RuleSet id="ruleset_template"> 行定义的名称与系统上规则集名称匹配,规则集文件将被该文件的内容替换。如果 <RuleSet id="ruleset_template"> 行定义的名称是唯一的,将使用该名称创建新规则集并添加到列表中。

删除现有规则集

  1. 以管理员身份登录到 Sun Java System Identity Server 管理控制台。
  2. 从位置窗格中选择“服务配置”。
  3. 在导航窗格中单击“重写器”旁的特性箭头。
  4. 数据窗格中会出现当前已定义的规则集列表。

  5. 单击要删除规则集旁的复选框。
  6. 可以选择多个规则集。

  7. 单击“删除”。
  8. 显示一条确认消息。

  9. 单击“是”以删除选定的规则集。

恢复默认规则集

如果误删除了默认规则集,可使用以下代码进行恢复:

rwadmin store --runasdn "uid=amadmin, ou=people, o=sesta.com, o=isp" --password "testing123" /resources/DefaultRuleSet.xml

其中 "/resources/DefaultRuleSet.xml" 是规则集在 rewriter.jar 文件中存储的位置。


此时系统便会恢复安装时打包的默认规则集。如果对默认规则集进行了定制,所做更改不会被恢复。




上一页      目录      索引      下一页     


版权所有 2004 Sun Microsystems, Inc. 保留所有权利。