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>
规则编写步骤
下面列出了编写规则时可以遵循的一般步骤。
规则集指导原则
请记住以下几点:
- 所有规则都需包括在 <RuleSet> </RuleSet> 标记内。
- 在规则集的 <HTMLRules> </HTMLRules> 部分加入需要重写 HTML 内容的所有规则。
- 在规则集的 <JSRules> </JSRules> 部分加入需要重写 JavaScript 内容的所有规则。
- 在规则集的 <XMLRules> </XMLRules> 部分加入需要重写 XML 内容的所有规则。
- 在内部网页中,确定需要重写的 URL,并在规则集的适当部分(HTML、JSRules 或 XMLRules)加入所需规则。
- 将规则集分配给所需的域。有关详细信息,请参阅“创建 URI 到规则集映射列表”。
- 重新启动“网关”以使所有更改生效:
gateway-install-root/SUNWps/bin/gateway -n gateway-profile-name start
定义规则集根元素
规则集根有两个属性:
定义基于语言的规则(定义规则)规则建立在下列语言基础上:
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 值。第三列对重写进行说明。
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 指定需要重写的参数(强制项)
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 函数会在运行时重写输出结果。
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('<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(强制项)
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='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
创建 URI 到规则集映射列表
规则集是在 Identity Server 管理控制台中,在“Portal Server 配置”下的“重写器”服务中创建的。有关详细信息,请参阅Sun ONE Portal Server 管理员指南。
创建了规则集之后,可使用“URI 至 RuleSet 映射”列表将某个域与此规则集相关联。默认情况下,会将以下两个条目添加到“URI 至 RuleSet 映射”列表中:
此条目表示,对于域为 sun.com 的门户目录中的所有页,都会应用 default_gateway_ruleset。对于其它所有页,将会应用一般规则集。default_gateway_ruleset 和 generic_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 映射至规则集
- 以管理员身份登录到 Identity Server 管理控制台。
- 选择“服务配置”标签。
- 单击“SRA 配置”下“网关”旁边的箭头。
会显示“网关配置文件”页。
- 单击想要为其设置属性的“网关”配置文件。
会显示“网关 - gateway-profile-name”页。
- 单击“重写器”标签。
- 滚动到“URI 至 RuleSet 映射”字段。
- 在“URI 至 RuleSet 映射”字段中,键入所需的域或主机名,然后单击“添加”。
会将此条目添加到“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 映射
- 以管理员身份登录到 Identity Server 管理控制台。
- 选择“服务配置”标签。
- 单击“SRA 配置”下“网关”旁边的箭头。
会显示“网关配置文件”页。
- 单击想要为其设置属性的“网关”配置文件。
会显示“网关 - gateway-profile-name”页。
- 单击“重写器”标签。
- 滚动到“MIME 映射分析器”字段,然后将所需 MIME 类型添加到编辑框中。可使用分号或逗号分隔多个条目。
以 HTML=text/html;text/htm 格式指定该条目
- 单击“添加”,将所需条目添加到列表中。
- 单击页顶部或底部的“保存”,记录此项更改。
- 从终端窗口中重新启动“网关”:
portal-server-install-root/SUNWps/bin/gateway -n gateway-profile-name start
指定默认的域和子域
当 URL 仅包含没有域和子域的主机名时,默认的域和子域会非常有用。在这种情况下,“网关”将假定主机名在默认的域和子域中,并进行相应处理。
例如,如果 URL 中的主机名为 host1,并且将默认的域和子域指定为 red.sesta.com,则主机名会被解析为 host1.red.sesta.com。
指定默认的域和子域
- 以管理员身份登录到 Identity Server 管理控制台。
- 单击“服务配置”标签。
- 单击“SRA 配置”下“网关”旁边的右箭头。
会显示“网关配置文件”页。
- 单击与想要为其设置属性的“网关”配置文件相应的“编辑...”。
会显示“编辑网关配置文件”页。
- 滚动到“默认域子域”字段,然后以 subdomain.domain name 格式键入所需默认值。
- 单击“编辑网关配置文件”页顶部或底部的“保存”,保存此项更改。
- 从终端窗口中重新启动“网关”:
portal-server-install-root/SUNWps/bin/gateway -n gateway-profile-name start
高级任务
创建禁止重写的 URI 列表
指定默认的域和子域
- 以管理员身份登录到 Identity Server 管理控制台。
- 选择“服务配置”标签。
- 单击“SRA 配置”下“网关”旁边的箭头。
会显示“网关配置文件”页。
- 单击想要为其设置属性的“网关”配置文件。
会显示“网关 - gateway-profile-name”页。
- 单击“重写器”标签、“高级”子部分。
- 滚动到“禁止重写 URI 列表”字段,然后在编辑框中添加 URI。
注意:即使此 href 规则包括在规则集中,在该列表中添加 #* 也会允许重写 URI。
- 单击页顶部或底部的“保存”,记录此项更改。
- 从终端窗口中重新启动“网关”:
gateway-install-root/SUNWps/bin/gateway -n gateway-profile-name start
启用 MIME 推测
重写器会根据页的 MIME 类型来选择分析器。某些网络服务器(如 WebLogic 和 Oracle)不发送 MIME 类型。要回避这个问题,可通过在“URI 映射分析器”列表框中添加数据来启用 MIME 推测功能。
启用 MIME 推测
创建 URI 映射分析器列表
如果启用了“MIME 推测”复选框,并且服务器尚未发送 MIME 类型,可使用该列表框将分析器映射到 URI。
多个 URI 以分号进行分隔。
例如,HTML=*.html; *.htm;*Servlet
它表示会使用“HTML 重写器”来重写具有 html、htm 或 Servlet 扩展名的任何页的内容。
分析 URI 映射
启用混淆
混淆功能允许“重写器”重写 URI 以便使人们看不到页的“内部网 URL”。
启用混淆
指定混淆器种子字符串
种子字符串用于混淆 URI。它是由混淆算法生成的一个随机字符串。
指定混淆种子字符串
- 以管理员身份登录到 Identity Server 管理控制台。
- 选择“服务配置”标签。
- 单击“SRA 配置”下“网关”旁边的箭头。
会显示“网关配置文件”页。
- 单击想要为其设置属性的“网关”配置文件。
会显示“网关 - gateway-profile-name”页。
- 单击“重写器”标签、“高级”子部分。
- 滚动到“Obfuscation Seed 字符串”字段,然后在编辑框中添加一个字符串。
- 单击页顶部或底部的“保存”,记录此项更改。
- 从终端窗口中重新启动“网关”:
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 列表
使网关协议与原始 URI 协议相同
当网关同时运行于 HTTP 和 HTTPS 模式下时,可以允许“重写器”使用一致的协议来访问 HTML 内容中引用的资源。
例如,如果原始 URL 是 http://intranet.com/Public.html,则添加 HTTP 网关。如果原始 URL 是 https://intranet.com/Public.html,则添加 HTTPS 网关。
使网关协议与原始 URI 协议相同
使用调试日志排除故障要排除“重写器”故障,需要启用调试日志。
“调试消息”分为以下几类。
设置重写器调试级别
设置重写器调试级别
- 以根用户身份登录到“网关”机器并编辑以下文件:
gateway-install-root/SUNWam/lib/AMConfig.properties
- 设置调试级别:
com.iplanet.services.debug.level=
调试级别为:
error - 只将严重错误记录到调试文件中。出现此类错误时,“重写器”通常会停止工作。
warning - 记录警告消息。
message - 记录所有调试消息。
off - 不记录任何调试消息。
- 在 AMConfig.properties 文件的以下属性中,为调试文件指定目录。
com.iplanet.services.debug.directory=/var/opt/SUNWam/debug
其中,/var/opt/SUNWam/debug 是默认调试目录。
- 从终端窗口中重新启动“网关”:
gateway-install-root/SUNWps/bin/gateway -n gateway-profile-name start
调试文件名称
当将调试级别设置为消息时,调试时会生成一组文件。表 3-2 列出了“重写器”文件以及其中包含的信息。第一列为调试文件的名称,第二列描述文件包含的内容。
除了上述文件以外,“重写器”还会为调试消息生成一个文件,该文件未收入上述文件中。其文件名由两部分组成:第一部分是 pwRewriter 或 psSRARewriter;第二部分为扩展名,或者使用 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 属性示例
不需要将本示例中指定的规则添加到 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 标志示例:
重写前的 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 文件中定义了 onAbort、onBlur、onFocus、onChange 和 onClick 的相应规则。“重写器”会检测 JavaScript 标志,并将其传递给 JavaScript 函数规则以便做进一步处理。示例中所列的第二项规则会通知“重写器”要重写哪个参数。
</body>
<br>
Rewriting ends
</html>
HTML 表单示例
使用表单示例
- 从以下位置访问此示例:
portal-server-URL/rewriter/HTML/forms/formrule.html
- 确保在“网关”服务的“域和子域代理”列表中定义了 abc.sesta.com。
如果没有定义该项,则假定采用直接连接,不会在其前面加“网关 URL”。
- 将本示例中指定的规则添加到“HTML 属性重写规则”部分的 default_gateway_ruleset 中。
- 在 Identity Server 管理控制台中,编辑“Portal Server 配置”的“重写器”服务中的 default_gateway_ruleset。
- 从终端窗口中重新启动“网关”:
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 示例
- 获得 applet 类文件。RewriteURLinApplet.class 文件位于以下位置:
portal-server-URL/rewriter/HTML/applet/appletcode
applet 代码所在页的基 URL 是:
portal-server-URL/rewriter/HTML/applet/rule1.html
- 将本示例中指定的规则添加到“HTML 属性重写规则”部分的 default_gateway_ruleset 中。
- 在 Identity Server 管理控制台中,编辑“Portal Server 配置”的“重写器”服务中的 default_gateway_ruleset。
- 重新启动网关:
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 变量示例
- 可从以下位置访问本示例:
portal-server-URL/rewriter/JavaScript/variables/url/js_urls.html
- 确保在“网关”服务的“域和子域代理”列表中定义了 abc.sesta.com。
如果没有定义该项,则假定采用直接连接,不会在其前面加“网关 URL”。
- 将本示例中指定的规则添加到“JavaScript 源重写规则”部分的 default_gateway_ruleset 中。
- 在 Identity Server 管理控制台中,编辑“Portal Server 配置”的“重写器”服务中的 default_gateway_ruleset。
- 如果添加了此规则,请重新启动“网关”:
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 表达式变量示例
- 可从以下位置访问本示例:
portal-server-URL/rewriter/JavaScript/variables/expr/expr.html
- 将本示例中指定的规则(如果它尚不存在)添加到“JavaScript 源重写规则”部分的 default_gateway_ruleset 中。
- 在 Identity Server 管理控制台中,编辑“Portal Server 配置”的“重写器”服务中的 default_gateway_ruleset。
- 如果添加了此规则,请重新启动“网关”:
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 变量示例
- 可从以下位置访问本示例:
portal-server-URL/rewriter/JavaScript/variables/dhtml/dhtml.html
- 确保在“网关”服务的“域和子域代理”列表中定义了 abc.sesta.com。如果没有定义该项,则假定采用直接连接,不会在其前面加“网关 URL”。
- 将本示例中指定的规则(如果它尚不存在)添加到“JavaScript 源重写规则”部分的 default_gateway_ruleset 中。在 Identity Server 管理控制台中,编辑“Portal Server 配置”的“重写器”服务中的 default_gateway_ruleset。
- 如果添加了此规则,请重新启动“网关”:
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 变量示例
- 可从以下位置访问本示例:
portal-server-URL/rewriter/JavaScript/variables/djs/djs.html
- 确保在“网关”服务的“域和子域代理”列表中定义了 abc.sesta.com。如果没有定义该项,则假定采用直接连接,不会在其前面加“网关 URL”。
- 将本示例中指定的这两项规则(如果它们尚不存在)添加到“JavaScript 源重写规则”部分的 default_gateway_ruleset 中。在 Identity Server 管理控制台中,编辑“Portal Server 配置”的“重写器”服务中的 default_gateway_ruleset。
- 重新启动网关:
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 系统变量示例
- 可从以下位置访问本示例:
portal-server-URL/rewriter/JavaScript/variables/system/system.html
- 将本示例中指定的规则(如果它尚不存在)添加到“JavaScript 源重写规则”部分的 default_gateway_ruleset 中。
- 在 Identity Server 管理控制台中,编辑“Portal Server 配置”的“重写器”服务中的 default_gateway_ruleset。
- 重新启动网关:
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 函数示例
- 可从以下位置访问本示例:
portal-server-URL/rewriter/JavaScript/functions/url/url.html
- 将本示例中指定的规则(如果它尚不存在)添加到“JavaScript 源重写规则”部分的 default_gateway_ruleset 中。在 Identity Server 管理控制台中,编辑“Portal Server 配置”的“重写器”服务中的 default_gateway_ruleset。
- 重新启动网关:
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 表达式函数示例
- 可从以下位置访问本示例:
portal-server-URL/rewriter/JavaScript/functions/expr/expr.html
- 将本示例中指定的规则(如果它尚不存在)添加到“JavaScript 源重写规则”部分的 default_gateway_ruleset 中。
- 在 Identity Server 管理控制台中,编辑“Portal Server 配置”的“重写器”服务中的 default_gateway_ruleset。
- 重新启动网关:
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 函数示例
- 可从以下位置访问本示例:
portal-server-URL/rewriter/JavaScript/functions/dhtml/dhtml.html
- 将本示例中指定的规则(如果它尚不存在)添加到“JavaScript 源重写规则”部分的 default_gateway_ruleset 中。
- 在 Identity Server 管理控制台中,编辑“Portal Server 配置”的“重写器”服务中的 default_gateway_ruleset。
- 重新启动网关:
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.write 和 document.writeln 函数,但是不会重写上述语句。这是因为本例中的第一个参数不是简单 HTML。它可以是任意的字符串,因而“重写器”不知道该如何重写这个参数。
//-->
</SCRIPT>
</head>
<body BGCOLOR=white>
<br><br>
Testing document.write and document.writeln
</body>
</html>
JavaScript DJS 函数示例
使用 JavaScript DJS 函数示例
- 可从以下位置访问本示例:
portal-server-URL/rewriter/JavaScript/functions/djs/djs.html
- 确保在“网关”服务的“域和子域代理”列表中定义了 abc.sesta.com。
如果没有定义该项,则假定采用直接连接,不会在其前面加“网关 URL”。
- 将本示例中指定的规则(如果它尚不存在)添加到“JavaScript 源重写规则”部分的 default_gateway_ruleset 中。在 Identity Server 管理控制台中,编辑“Portal Server 配置”的“重写器”服务中的 default_gateway_ruleset。
- 重新启动网关:
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 属性示例
重写前的 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 name 为 href,tag 为 check,valuePatterns 为 1234。会重写跟在 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&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 展示了示例规则集与实例研究之间的映射。第一列列出了页内容,第二列列出了应用的规则,第三列给出了“重写器”输出,第四列描述如何应用规则。
Outlook Web Access 规则集
“安全远程访问”支持 Sun ONE 网络服务器和 IBM 应用程序服务器上的 Outlook Web Access 2000 sp3。
配置 OWA 规则集
6.x 与 3.0 的规则集映射下表列出了 Sun ONE Portal Server,Secure Remote Access 与 Sun ONE Portal Server 先前版本的“重写器”规则映射。