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

Sun ONE Portal Server, Secure Remote Access 6.2 管理员指南

第 3 章
重写器

本章介绍如何定义“重写器”规则以及如何在 Sun™ ONE Portal Server 管理控制台中对其进行配置。

内容涵盖下列主题:


重写器概述

Secure Remote Access 的“重写器”组件允许最终用户通过在网页上修改“统一资源标识符”(URI) 以使其指向“网关”来浏览内部网。URI 定义了一种方法,可将名称封装在任何已注册的名称空间中并用该名称空间来标示它。最常见的 URI 类型是“统一资源定位符”(URL)。URL 可以有各种不同的协议,如 http、ftp、邮件发送协议、文件协议以及新闻协议。

“重写器”可识别和重写在 RFC-1738 中与 HTTP 或 HTTPS 协议一同规定的所有标准 URL。这些协议不区分大小写。例如,hTtP、HTtp 和 httP 都有效。下面列出了一些 URL 示例:

http://www.my.work.com/

http://www.w3.org:8000/imaginary/test

http://www.myu.edu/org/admin/people#andy

http://info.my.org/AboutUs/Index/Phonebook?dobbins

http://www.w3.org/RDB/EMP?where%20name%3Ddobbins

http://info.my.org/AboutUs/Phonebook

http://user:password@abc.com

对于 Internet Explore 和 Netscape 所支持的一些基本非标准 URL,“重写器”也支持对其进行重写。将非标准 URL 转化成标准格式所需的信息取自该 URL 所在页的基 URL。该信息可能包括:

“重写器”仅支持出现在相对 URL 中的反斜线符号。

例如,

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

而以下这些 URL 不会被重写:

http:\\abc.sesta.com

http:/abc.com


重写器使用方案

当用户想通过“网关”访问内部网网页时,可使用“重写器”来获得网页。下列组件使用了“重写器”:

URLScraper

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

例如,如果用户想要访问具有如下内容的站点:

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

“重写器”会将其转换成:

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

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

有关 URLScraper 提供者的详细信息,请参阅 Sun ONE 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 配置”部分定义规则集。

有关定义规则集的详细信息,请参阅 Sun ONE Portal Server 管理员指南。在创建了新的规则集后,需要定义所需的规则。

本部分涵盖下列主题:

公共接口(规则集 DTD)

<?xml version="1.0" encoding="UTF-8"?>

<!--

The following constraints are not represented in DTD, but taken care programatically

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 alway 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 示例

本部分包含一个示例规则集。“实例研究”用于举例说明“重写器”是如何解释这些规则的。

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

规则编写步骤

下面列出了编写规则时可以遵循的一般步骤。

规则集指导原则

请记住以下几点:

定义规则集根元素

规则集根有两个属性:


定义基于语言的规则(定义规则)

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

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 为:

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('/focus.html','focus');return;">

</Form>

规则

<Attribute name="OnClick” type="DJS”/>

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

输出

<Form>

<INPUT TYPE=TEXT SIZE=20 value=focus onClick="Check('gateway-URL/http://abc.sesta.com/focus.html','focus');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 开头的所有参数均会被重写。并且,会在值 params 标记的 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 中使用通配符

可以使用 * 字符来实现重写时的模式匹配。

但不能在 valuePatterns 字段中仅仅指定一个 *。由于 * 指示与一切内容匹配,所以 valuePattern 后不会跟有任何内容,从而不会留下任何内容让“重写器”重写。可将 * 与另一字符串连起来使用,如 *abc。此时,会重写紧随在 *abc 之后的所有内容。


注意

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


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

表 3-1 列出了 * 通配符的一些用法示例。此表包含三列。第一列列出了要重写的示例语句。第二列列出了示例 valuePatterns 值。第三列对重写进行说明。

表 3-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 imgsrc2=imgsrc1;

//-->

</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 规则,因而它会被重写。

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='/tmp/tmp.jpg';"

var dJSVar="var dJSimgsrc='../tmp/tmp.jpg';"

var dJSVar="var dJSimgsrc='http://abc.sesta.com/tmp/tmp.jpg';"

规则

<Variable name="DJS">dJSVar/>

<Variable name="URL">dJSimgsrc/>

输出

//DJS Var - need 2 rules

var dJSVar="var dJSimgsrc='gateway-URL/http://abc.sesta.com/tmp/tmp.jpg';"

var dJSVar="var dJSimgsrc='gateway-URL/http://abc.sesta.com/dir1/dir2/dir3/jscript/tmp/tmp.jpg';"

var dJSVar="var dJSimgsrc='gateway-URL/http://abc.sesta.com/tmp/tmp.jpg';"

说明

这里需要两项规则。第一项规则用于查找动态 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 指定需要重写的参数(强制项)

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

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

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

URL 参数

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

本部分分为下列各小部分:

URL 参数语法

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

其中

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

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

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

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 指定需要重写的参数(强制项)

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

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 指定需要重写的参数(强制项)

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

DHTML 参数示例

假定页的基 URL 为:

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

页内容

<script>

<!--

document.write('<a href="/index.html">write</a><BR>')

document.writeln('<a href="index.html">writeln</a><BR>')

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('<a href="gateway-URL/http://xyz.siroe.com/index.html">write</a><BR>')

document.writeln('<a href="gateway-URL/http://xyz.siroe.com/test/rewriter/test1/jscript/JSFUNC/index.html">writeln</a><BR>')

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(强制项)

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

type 为 DJS(强制项)

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

DJS 参数示例

假定页的基 URL 为:

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

页内容

<script>

menu.addItem(new NavBarMenuItem("All Available Information","JavaScript:top.location='http://abc.sesta.com'"));

</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='gateway-URL/http://abc.sesta.com'"));

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

说明

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

属性

XML 属性规则与 HTML 的属性规则类似。请参阅第118 页的“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>

说明

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

层叠样式表规则

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

WML 规则

WML 与 HTML 类似,因此 HTML 规则适用于 WML 内容。可对 WML 内容使用一般规则集。请参阅“HTML 内容规则”


在网关服务中配置重写器

使用“重写器”标签下的“网关”服务,可以在两类(“基本”和“高级”)范围内执行下列任务:

基本任务

启用全部 URL 重写

如果您启用了“网关”服务中的“启用全部 URL 重写”选项,“重写器”会重写任何 URL,而不检查“域和子域代理”列表中的条目。“域和子域代理”列表中的条目将被忽略。

  允许网关重写所有 URL
  1. 以管理员身份登录到 Sun ONE Identity Server 管理控制台。
  2. 选择“服务配置”标签。
  3. 单击“SRA 配置”下“网关”旁边的箭头。
  4. 会显示“网关配置文件”页。

  5. 单击与想要为其设置属性的“网关”配置文件相应的“编辑...”。
  6. 会显示“编辑网关配置文件”页。

  7. 单击“重写器”标签。
  8. 选中“启用全部 URL 重写”复选框,以允许“网关”重写所有 URL。
  9. 单击页顶部或底部的“保存”,记录此项更改。
  10. 从终端窗口中重新启动“网关”:
  11. gateway-install-root/SUNWps/bin/gateway -n gateway-profile-name start

创建 URI 到规则集映射列表

规则集是在 Identity Server 管理控制台中,在“Portal Server 配置”下的“重写器”服务中创建的。有关详细信息,请参阅Sun ONE Portal Server 管理员指南

创建了规则集之后,可使用“URI 至 RuleSet 映射”列表将某个域与此规则集相关联。默认情况下,会将以下两个条目添加到“URI 至 RuleSet 映射”列表中:

此条目表示,对于域为 sun.com 的门户目录中的所有页,都会应用 default_gateway_ruleset。对于其它所有页,将会应用一般规则集。default_gateway_rulesetgeneric_ruleset 是预先打包好的规则集。


注意

对于门户桌面上出现的所有内容,不管内容取自何处,均会使用与 default_gateway_ruleset 相应的规则集。

例如,假定将门户桌面配置成凑集来自 URL yahoo.com 的内容。Portal Server 位于 sesta.com 中。此时会将与 sesta.com 相应的规则集应用于所取得的内容。



注意

为其指定规则集的域必须在“域和子域代理”列表中列出。


在语法中使用通配符

可以在规则集中使用星号来映射全限定 URI 或部分 URI。

例如,可以将 java_index_page_ruleset 应用于 index.html 页,如下所示:

也可以将 java 目录中的所有页应用于 java_directory_ruleset,如下所示:

www.sun.com/java/* /java_directory_ruleset

    将 URI 映射至规则集
  1. 以管理员身份登录到 Identity Server 管理控制台。
  2. 选择“服务配置”标签。
  3. 单击“SRA 配置”下“网关”旁边的箭头。
  4. 会显示“网关配置文件”页。

  5. 单击想要为其设置属性的“网关”配置文件。
  6. 会显示“网关 - gateway-profile-name”页。

  7. 单击“重写器”标签。
  8. 滚动到“URI 至 RuleSet 映射”字段。
  9. 在“URI 至 RuleSet 映射”字段中,键入所需的域或主机名,然后单击“添加”。
  10. 会将此条目添加到“URI 至 RuleSet 映射”列表中。

    指定域或主机名以及规则集时采用的格式如下:

    域名|规则集名

    例如:

    eng.sesta.com|default

创建 MIME 映射分析器列表

“重写器”有 4 个不同的分析器,可用来根据内容类型(HTML、JAVASCRIPT、CSS 和 XML)对网页进行分析。默认情况下,这些分析器与常见的 MIME 类型相关联。您可以在“网关”服务的“MIME 映射分析器”字段中,将新的 MIME 类型与这些分器相关联。这会将“重写器”功能扩展到其它 MIME 类型。

可用分号或逗号(“;”或“,”)分隔多个条目。

例如:

HTML=text/html;text/htm;text/x-component;text/wml; text/vnl/wap.wml

它表示会将含有上述 MIME 的任何内容发送到 HTML 重写器,并且会应用 HTML 规则来重写这些 URL。


提示

从 MIME 映射列表中删除不必要的分析器可以提高操作速度。例如,如果您确信来自某个内部网的内容不会含有任何 JavaScript,便可从 MIME 映射列表中删除 JAVASCRIPT 条目。


  指定 MIME 映射
  1. 以管理员身份登录到 Identity Server 管理控制台。
  2. 选择“服务配置”标签。
  3. 单击“SRA 配置”下“网关”旁边的箭头。
  4. 会显示“网关配置文件”页。

  5. 单击想要为其设置属性的“网关”配置文件。
  6. 会显示“网关 - gateway-profile-name”页。

  7. 单击“重写器”标签。
  8. 滚动到“MIME 映射分析器”字段,然后将所需 MIME 类型添加到编辑框中。可使用分号或逗号分隔多个条目。
  9. HTML=text/html;text/htm 格式指定该条目

  10. 单击“添加”,将所需条目添加到列表中。
  11. 单击页顶部或底部的“保存”,记录此项更改。
  12. 从终端窗口中重新启动“网关”:
  13. portal-server-install-root/SUNWps/bin/gateway -n gateway-profile-name start

指定默认的域和子域

当 URL 仅包含没有域和子域的主机名时,默认的域和子域会非常有用。在这种情况下,“网关”将假定主机名在默认的域和子域中,并进行相应处理。

例如,如果 URL 中的主机名为 host1,并且将默认的域和子域指定为 red.sesta.com,则主机名会被解析为 host1.red.sesta.com

  指定默认的域和子域
  1. 以管理员身份登录到 Identity Server 管理控制台。
  2. 单击“服务配置”标签。
  3. 单击“SRA 配置”下“网关”旁边的右箭头。
  4. 会显示“网关配置文件”页。

  5. 单击与想要为其设置属性的“网关”配置文件相应的“编辑...”。
  6. 会显示“编辑网关配置文件”页。

  7. 滚动到“默认域子域”字段,然后以 subdomain.domain name 格式键入所需默认值。
  8. 单击“编辑网关配置文件”页顶部或底部的“保存”,保存此项更改。
  9. 从终端窗口中重新启动“网关”:
  10. portal-server-install-root/SUNWps/bin/gateway -n gateway-profile-name start

高级任务

创建禁止重写的 URI 列表

  指定默认的域和子域
  1. 以管理员身份登录到 Identity Server 管理控制台。
  2. 选择“服务配置”标签。
  3. 单击“SRA 配置”下“网关”旁边的箭头。
  4. 会显示“网关配置文件”页。

  5. 单击想要为其设置属性的“网关”配置文件。
  6. 会显示“网关 - gateway-profile-name”页。

  7. 单击“重写器”标签、“高级”子部分。
  8. 滚动到“禁止重写 URI 列表”字段,然后在编辑框中添加 URI。
  9. 注意:即使此 href 规则包括在规则集中,在该列表中添加 #* 也会允许重写 URI。

  10. 单击页顶部或底部的“保存”,记录此项更改。
  11. 从终端窗口中重新启动“网关”:
  12. gateway-install-root/SUNWps/bin/gateway -n gateway-profile-name start

启用 MIME 推测

重写器会根据页的 MIME 类型来选择分析器。某些网络服务器(如 WebLogic 和 Oracle)不发送 MIME 类型。要回避这个问题,可通过在“URI 映射分析器”列表框中添加数据来启用 MIME 推测功能。

  启用 MIME 推测
  1. 以管理员身份登录到 Identity Server 管理控制台。
  2. 选择“服务配置”标签。
  3. 单击“SRA 配置”下“网关”旁边的箭头。
  4. 会显示“网关配置文件”页。

  5. 单击想要为其设置属性的“网关”配置文件。
  6. 会显示“网关 - gateway-profile-name”页。

  7. 单击“重写器”标签、“高级”子部分。
  8. 选中“启用 MIME 推测”复选框,以启用“MIME 推测”。
  9. 单击页顶部或底部的“保存”,记录此项更改。
  10. 从终端窗口中重新启动“网关”:
  11. gateway-install-root/SUNWps/bin/gateway -n gateway-profile-name start

创建 URI 映射分析器列表

如果启用了“MIME 推测”复选框,并且服务器尚未发送 MIME 类型,可使用该列表框将分析器映射到 URI。

多个 URI 以分号进行分隔。

例如,HTML=*.html; *.htm;*Servlet

它表示会使用“HTML 重写器”来重写具有 html、htm 或 Servlet 扩展名的任何页的内容。

  分析 URI 映射
  1. 以管理员身份登录到 Identity Server 管理控制台。
  2. 选择“服务配置”标签。
  3. 单击“SRA 配置”下“网关”旁边的箭头。
  4. 会显示“网关配置文件”页。

  5. 单击想要为其设置属性的“网关”配置文件。
  6. 会显示“网关 - gateway-profile-name”页。

  7. 单击“重写器”标签、“高级”子部分。
  8. 滚动到“MIME 映射分析器”字段,然后将相应数据添加到编辑框中。
  9. 单击页顶部或底部的“保存”,记录此项更改。
  10. 从终端窗口中重新启动“网关”:
  11. gateway-install-root/SUNWps/bin/gateway -n gateway-profile-name start

启用混淆

混淆功能允许“重写器”重写 URI 以便使人们看不到页的“内部网 URL”。

  启用混淆
  1. 以管理员身份登录到 Identity Server 管理控制台。
  2. 选择“服务配置”标签。
  3. 单击“SRA 配置”下“网关”旁边的箭头。
  4. 会显示“网关配置文件”页。

  5. 单击想要为其设置属性的“网关配置文件”。
  6. 会显示“网关 - gateway-profile-name”页。

  7. 单击“重写器”标签、“高级”子部分。
  8. 选中“启用混淆”复选框以启用混淆功能。
  9. 单击页顶部或底部的“保存”,记录此项更改。
  10. 从终端窗口中重新启动“网关”:
  11. gateway-install-root/SUNWps/bin/gateway -n gateway-profile-name start

指定混淆器种子字符串

种子字符串用于混淆 URI。它是由混淆算法生成的一个随机字符串。


注意

如果该种子字符串已更改或是重启了“网关”,则可能无法为混淆后的 URI 加书签。


    指定混淆种子字符串
  1. 以管理员身份登录到 Identity Server 管理控制台。
  2. 选择“服务配置”标签。
  3. 单击“SRA 配置”下“网关”旁边的箭头。
  4. 会显示“网关配置文件”页。

  5. 单击想要为其设置属性的“网关”配置文件。
  6. 会显示“网关 - gateway-profile-name”页。

  7. 单击“重写器”标签、“高级”子部分。
  8. 滚动到“Obfuscation Seed 字符串”字段,然后在编辑框中添加一个字符串。
  9. 单击页顶部或底部的“保存”,记录此项更改。
  10. 从终端窗口中重新启动“网关”:
  11. gateway-install-root/SUNWps/bin/gateway -n gateway-profile-name start

创建禁止模糊的 URI 列表

一些应用程序(如 applet)需要一个 Internet URI,而且不能对其进行模糊化。要指定这些应用程序,可将 URI 添加到列表框中。

例如,如果添加了

*/Applet/Param*

到列表框中,则当内容 URI http://abc.com/Applet/Param1.html 在规则集的规则中匹配时,将不会模糊化此 URI。

  指定禁止模糊 URI 列表
  1. 以管理员身份登录到 Identity Server 管理控制台。
  2. 选择“服务配置”标签。
  3. 单击“SRA 配置”下“网关”旁边的箭头。
  4. 会显示“网关配置文件”页。

  5. 单击想要为其设置属性的“网关”配置文件。
  6. 会显示“网关 - gateway-profile-name”页。

  7. 单击“重写器”标签、“高级”子部分。
  8. 滚动到“禁止模糊 URI 列表”字段,然后在编辑框中添加 URI。
  9. 单击页顶部或底部的“保存”,记录此项更改。
  10. 从终端窗口中重新启动“网关”:
  11. gateway-install-root/SUNWps/bin/gateway -n gateway-profile-name start

使网关协议与原始 URI 协议相同

当网关同时运行于 HTTP 和 HTTPS 模式下时,可以允许“重写器”使用一致的协议来访问 HTML 内容中引用的资源。

例如,如果原始 URL 是 http://intranet.com/Public.html,则添加 HTTP 网关。如果原始 URL 是 https://intranet.com/Public.html,则添加 HTTPS 网关。


注意

这样做只适用于静态 URI,不适用于 Javascript 中生成的动态 URI。


    使网关协议与原始 URI 协议相同
  1. 以管理员身份登录到 Identity Server 管理控制台。
  2. 选择“服务配置”标签。
  3. 单击“SRA 配置”下“网关”旁边的箭头。
  4. 会显示“网关配置文件”页。

  5. 单击想要为其设置属性的“网关”配置文件。
  6. 会显示“网关 - gateway-profile-name”页。

  7. 单击“重写器”标签、“高级”子部分。
  8. 选中“使网关协议与原始 URI 协议相同”复选框。
  9. 单击页顶部或底部的“保存”,记录此项更改。
  10. 从终端窗口中重新启动“网关”:
  11. gateway-install-root/SUNWps/bin/gateway -n gateway-profile-name start


使用调试日志排除故障

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

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

设置重写器调试级别

  设置重写器调试级别
  1. 以根用户身份登录到“网关”机器并编辑以下文件:
  2. gateway-install-root/SUNWam/lib/AMConfig.properties

  3. 设置调试级别:
  4. com.iplanet.services.debug.level=

    调试级别为:

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

    warning - 记录警告消息。

    message - 记录所有调试消息。

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

  5. AMConfig.properties 文件的以下属性中,为调试文件指定目录。
  6. com.iplanet.services.debug.directory=/var/opt/SUNWam/debug

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

  7. 从终端窗口中重新启动“网关”:
  8. gateway-install-root/SUNWps/bin/gateway -n gateway-profile-name start

调试文件名称

当将调试级别设置为消息时,调试时会生成一组文件。表 3-2 列出了“重写器”文件以及其中包含的信息。第一列为调试文件的名称,第二列描述文件包含的内容。

表 3-2 重写器调试文件

文件名

信息

RuleSetInfo

本文件记录重写时已使用的所有规则集。

Original Pages

包含页 URI、解析 URI(如果它与页 URI 不同)、内容 MIME、已应用于此页的规则集、分析器 MIME,以及原始内容。

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

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

Rewritten Pages

包含页 URI、解析 URI(如果它与页 URI 不同)、内容 MIME、已应用于此页的规则集、分析器 MIME,以及重写后的内容。

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

Unaffected Pages

包含未经修改的页列表。

URIInfo Pages

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

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

除了上述文件以外,“重写器”还会为调试消息生成一个文件,该文件未收入上述文件中。其文件名由两部分组成:第一部分是 pwRewriterpsSRARewriter;第二部分为扩展名,或者使用 portal 或者使用网关配置文件名

调试文件在门户或“网关”中显示。这些文件位于 AMConfig.properties 文件指示的目录中。

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

prefix_RuleSetInfo.extension

prefix_OrginalPages.extension

prefix_RewrittenPages.extension

prefix_UnaffectedPages.extension

prefix_URIInfo.extension

其中

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

extension 在使用 URLScaper 时为 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 内容示例

HTML 属性示例

  使用 HTML 属性示例
  1. 可从以下位置访问本示例:
  2. portal-server-URL/rewriter/HTML/attrib/attribrule.html

  3. 确保在“网关”服务的“域和子域代理”列表中定义了 abc.sesta.comhost1.siroe.com
  4. 如果没有定义该项,则假定采用直接连接,不会在其前面加“网关 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 标志示例:
  1. 可从以下位置访问本示例:
  2. portal-server-URL/rewriter/HTML/jstokens/JStokens.html

  3. 将本示例中指定的规则添加到“JavaScript 源重写规则”部分的 default_gateway_ruleset 中。
  4. 在 Identity Server 管理控制台中,编辑“Portal Server 配置”的“重写器”服务中的 default_gateway_ruleset
  5. 从终端窗口中重新启动“网关”:
  6. gateway-install-root/SUNWps/bin/gateway -n gateway-profile-name start

重写前的 HTML

<html>

<head>

Rewriting starts

<script language="javascript">

function Check(test,ind){

if (ind == 'blur')

{alert("testing onBlur")}

if (ind == 'focus')

{alert("testing onFocus")}

}

</SCRIPT>

</head>

<body>

<form>

<input TYPE=TEXT SIZE=20 value=blur onAbort="Check('/indexblur.html','blur');return;">

<input TYPE=TEXT SIZE=20 value=blur onBlur="Check('/indexblur.html','blur');return;">

<input TYPE=TEXT SIZE=20 value=focus onFocus="Check('/focus.html','focus');return;">

<input TYPE=TEXT SIZE=20 value=focus onChange="Check('/focus.html','focus');return;">

<input TYPE=TEXT SIZE=20 value=focus onClick="Check('/focus.html','blur');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 == 'blur')

{alert("testing onBlur")}

if (ind == 'focus')

{alert("testing onFocus")}

}

</SCRIPT>

</head>

<body>

<form>

<input TYPE=TEXT SIZE=20 value=blur onAbort="Check('gateway URL/portal-server-URL/indexblur.html','blur');return;">

<input TYPE=TEXT SIZE=20 value=blur onBlur="Check('gateway URL/portal-server-URL/indexblur.html','blur');return;">

<input TYPE=TEXT SIZE=20 value=focus onFocus="Check('gateway URL/portal-server-URL/focus.html','focus');return;">

<input TYPE=TEXT SIZE=20 value=focus onChange="Check('gateway URL/portal-server-URL/focus.html','focus');return;">

<input TYPE=TEXT SIZE=20 value=focus onClick="Check('gateway URL/portal-server-URL/focus.html','blur');return;">

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

</body>

<br>

Rewriting ends

</html>

HTML 表单示例

  使用表单示例
  1. 从以下位置访问此示例:
  2. portal-server-URL/rewriter/HTML/forms/formrule.html

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

  5. 将本示例中指定的规则添加到“HTML 属性重写规则”部分的 default_gateway_ruleset 中。
  6. 在 Identity Server 管理控制台中,编辑“Portal Server 配置”的“重写器”服务中的 default_gateway_ruleset
  7. 从终端窗口中重新启动“网关”:
  8. gateway-install-root/SUNWps/bin/gateway -n gateway-profile-name start

重写前的 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_rulesetdefault_gateway_ruleset 的 HTML 规则中定义了 <Attribute name="action"/>,所以会重写这个 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 的详细信息,请参阅第116 页的“在规则中使用模式匹配”。

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

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

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

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

</FORM>

</BODY>

RW_END

</HTML>

HTML Applet 示例

  使用 Applet 示例
  1. 获得 applet 类文件。RewriteURLinApplet.class 文件位于以下位置:
  2. portal-server-URL/rewriter/HTML/applet/appletcode

    applet 代码所在页的基 URL 是:

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

  3. 将本示例中指定的规则添加到“HTML 属性重写规则”部分的 default_gateway_ruleset 中。
  4. 在 Identity Server 管理控制台中,编辑“Portal Server 配置”的“重写器”服务中的 default_gateway_ruleset
  5. 重新启动网关:
  6. gateway-install-root/SUNWps/bin/gateway -n gateway-profile-name start

重写前的 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。“网关 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 变量示例

  使用 JavaScript URL 变量示例
  1. 可从以下位置访问本示例:
  2. portal-server-URL/rewriter/JavaScript/variables/url/js_urls.html

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

  5. 将本示例中指定的规则添加到“JavaScript 源重写规则”部分的 default_gateway_ruleset 中。
  6. 在 Identity Server 管理控制台中,编辑“Portal Server 配置”的“重写器”服务中的 default_gateway_ruleset
  7. 如果添加了此规则,请重新启动“网关”:
  8. gateway-install-root/SUNWps/bin/gateway -n gateway-profile-name start

重写前的 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 变量示例

  使用 JavaScript 表达式变量示例
  1. 可从以下位置访问本示例:
  2. portal-server-URL/rewriter/JavaScript/variables/expr/expr.html

  3. 将本示例中指定的规则(如果它尚不存在)添加到“JavaScript 源重写规则”部分的 default_gateway_ruleset 中。
  4. 在 Identity Server 管理控制台中,编辑“Portal Server 配置”的“重写器”服务中的 default_gateway_ruleset
  5. 如果添加了此规则,请重新启动“网关”:
  6. gateway-install-root/SUNWps/bin/gateway -n gateway-profile-name start

重写前的 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>

// 重写器在此附加包裹函数 psSRAPRewriter_convert_expression。

</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 变量示例

  使用 JavaScript DHTML 变量示例
  1. 可从以下位置访问本示例:
  2. portal-server-URL/rewriter/JavaScript/variables/dhtml/dhtml.html

  3. 确保在“网关”服务的“域和子域代理”列表中定义了 abc.sesta.com。如果没有定义该项,则假定采用直接连接,不会在其前面加“网关 URL”。
  4. 将本示例中指定的规则(如果它尚不存在)添加到“JavaScript 源重写规则”部分的 default_gateway_ruleset 中。在 Identity Server 管理控制台中,编辑“Portal Server 配置”的“重写器”服务中的 default_gateway_ruleset
  5. 如果添加了此规则,请重新启动“网关”:
  6. gateway-install-root/SUNWps/bin/gateway -n gateway-profile-name start

重写前的 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 变量示例

  使用 JavaScript DJS 变量示例
  1. 可从以下位置访问本示例:
  2. portal-server-URL/rewriter/JavaScript/variables/djs/djs.html

  3. 确保在“网关”服务的“域和子域代理”列表中定义了 abc.sesta.com。如果没有定义该项,则假定采用直接连接,不会在其前面加“网关 URL”。
  4. 将本示例中指定的这两项规则(如果它们尚不存在)添加到“JavaScript 源重写规则”部分的 default_gateway_ruleset 中。在 Identity Server 管理控制台中,编辑“Portal Server 配置”的“重写器”服务中的 default_gateway_ruleset
  5. 重新启动网关:
  6. gateway-install-root/SUNWps/bin/gateway -n gateway-profile-name start

重写前的 HTML 页

<html>

<head>

<title>Dynamic JavaScript Variable Test Page</title>

</head>

<body>

<script LANGUAGE="Javascript">

<!--

var dJSVar="var dJSimgsrc='/tmp/tmp/jpg';"

var dJSVar="var dJSimgsrc='../../../tmp/tmp/jpg';"

var dJSVar="var dJSimgsrc='http://abc.sesta.com/tmp/tmp/jpg';"

//-->

</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='gateway-URL/portal-server-URL/tmp/tmp/jpg';"

var dJSVar="var dJSimgsrc='gateway-URL/portal-server-URL/rewriter/tmp/tmp/jpg';"

var dJSVar="var dJSimgsrc='gateway-URL/http://abc.sesta.com/tmp/tmp/jpg';"

// 会用“网关 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 变量示例

  使用 JavaScript 系统变量示例
  1. 可从以下位置访问本示例:
  2. portal-server-URL/rewriter/JavaScript/variables/system/system.html

  3. 将本示例中指定的规则(如果它尚不存在)添加到“JavaScript 源重写规则”部分的 default_gateway_ruleset 中。
  4. 在 Identity Server 管理控制台中,编辑“Portal Server 配置”的“重写器”服务中的 default_gateway_ruleset
  5. 重新启动网关:
  6. gateway-install-root/SUNWps/bin/gateway -n gateway-profile-name start

重写前的 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 it is 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 it is loaded.

</body>

</html>

JavaScript URL 函数示例

  使用 JavaScript URL 函数示例
  1. 可从以下位置访问本示例:
  2. portal-server-URL/rewriter/JavaScript/functions/url/url.html

  3. 将本示例中指定的规则(如果它尚不存在)添加到“JavaScript 源重写规则”部分的 default_gateway_ruleset 中。在 Identity Server 管理控制台中,编辑“Portal Server 配置”的“重写器”服务中的 default_gateway_ruleset
  4. 重新启动网关:
  5. gateway-install-root/SUNWps/bin/gateway -n gateway-profile-name start

重写前的 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 函数示例

  使用 JavaScript 表达式函数示例
  1. 可从以下位置访问本示例:
  2. portal-server-URL/rewriter/JavaScript/functions/expr/expr.html

  3. 将本示例中指定的规则(如果它尚不存在)添加到“JavaScript 源重写规则”部分的 default_gateway_ruleset 中。
  4. 在 Identity Server 管理控制台中,编辑“Portal Server 配置”的“重写器”服务中的 default_gateway_ruleset
  5. 重新启动网关:
  6. gateway-install-root/SUNWps/bin/gateway -n gateway-profile-name start

重写前的 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 函数示例

  使用 JavaScript DHTML 函数示例
  1. 可从以下位置访问本示例:
  2. portal-server-URL/rewriter/JavaScript/functions/dhtml/dhtml.html

  3. 将本示例中指定的规则(如果它尚不存在)添加到“JavaScript 源重写规则”部分的 default_gateway_ruleset 中。
  4. 在 Identity Server 管理控制台中,编辑“Portal Server 配置”的“重写器”服务中的 default_gateway_ruleset
  5. 重新启动网关:
  6. gateway-install-root/SUNWps/bin/gateway -n gateway-profile-name start

重写前的 HTML 页

<html>

<head>

Testing JavaScript DHTML Functions

<br>

<br>

<script>

<!--

document.write('<a href="/index.html">write</a><BR>')

document.writeln('<a href="index.html">writeln</a><BR>')

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('<a href="gateway-URL/portal-server-URL/index.html">write</a><BR>')

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

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

// 第二项规则指定需要重写 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 函数示例

  使用 JavaScript DJS 函数示例
  1. 可从以下位置访问本示例:
  2. portal-server-URL/rewriter/JavaScript/functions/djs/djs.html

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

  5. 将本示例中指定的规则(如果它尚不存在)添加到“JavaScript 源重写规则”部分的 default_gateway_ruleset 中。在 Identity Server 管理控制台中,编辑“Portal Server 配置”的“重写器”服务中的 default_gateway_ruleset
  6. 重新启动网关:
  7. gateway-install-root/SUNWps/bin/gateway -n gateway-profile-name start

重写前的 HTML 页

<html>

Test for JavaScript DJS Functions

<br>

<script>

menu.addItem(new NavBarMenuItem("All Available

Information","JavaScript:top.location='http://abc.sesta.com'"));

//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='gateway-URL/http://abc.sesta.com'"));

// 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 属性示例

  使用 XML 属性示例
  1. 可从以下位置访问本示例:
  2. portal-server-URL/rewriter/XML/attrib.html

  3. 将本示例中指定的规则(如果它尚不存在)添加到“XML 源重写规则”部分的 default_gateway_ruleset 中。
  4. 在 Identity Server 管理控制台中,编辑“Portal Server 配置”的“重写器”服务中的 default_gateway_ruleset
  5. 重新启动网关:
  6. gateway-install-root/SUNWps/bin/gateway -n gateway-profile-name start

重写前的 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 的详细信息,请参阅第116 页的“在规则中使用模式匹配”。

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

说明

表 3-3 展示了示例规则集与实例研究之间的映射。第一列列出了页内容,第二列列出了应用的规则,第三列给出了“重写器”输出,第四列描述如何应用规则。

表 3-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. 从终端窗口中重新启动“网关”:
  3. gateway-install-root/SUNWps/bin/gateway -n gateway-profile-name start

Outlook Web Access 规则集

“安全远程访问”支持 Sun ONE 网络服务器和 IBM 应用程序服务器上的 Outlook Web Access 2000 sp3。

  配置 OWA 规则集
  1. 以管理员身份登录到 Identity Server 管理控制台。
  2. 选择“服务配置”标签。
  3. 单击“SRA 配置”下“网关”旁边的箭头。
  4. 会显示“网关配置文件”页。

  5. 单击想要为其设置属性的“网关”配置文件。
  6. 会显示“网关 - gateway-profile-name”页。

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

    exchange.domain.com|exchange_2000sp3_owa_ruleset。


6.x 与 3.0 的规则集映射

下表列出了 Sun ONE Portal Server,Secure Remote Access 与 Sun ONE Portal Server 先前版本的“重写器”规则映射。

表 3-4 与 SP4 的规则映射 

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 脚本



上一页      目录      索引      下一页     


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