Secure Remote Access 的 Rewriter 元件能讓一般使用者利用修改網頁上的統一資源識別碼 (Uniform Resource Identifier, URI) 參照,以指向閘道從而瀏覽企業內部網路。URI 可定義於任何已註冊名稱空間內封裝名稱的方法,並以該名稱空間為其加標記。最常見的 URI 類別為單一資源定址器 (Uniform Resource Locator, URL)。Rewriter 僅支援 HTTP 或 HTTPS。不論協定的大小寫為何都支援。Rewriter 僅支援相對 URL 中包含反斜線符號。
http://abc.sesta.com\\index.html 會被重新寫入。
這些 URL 不會被重新寫入:http:\\\\abc.sesta.com。 http:/abc.com
HTTP 標準需要 HTTP 標頭或 HTML 中繼標記為網頁指定字元集。但是有時候此資訊沒有辦法使用。字元集必須為已知,如此資料編碼的設定以及資料的顯示才會依照建立的想法進行。
要偵測字元集,請從 Java Enterprise System Accessory CD 安裝 SUNWjchdt 套裝軟體。如果已安裝此產品,Rewriter 將會偵測到它並在需要時使用。
使用此產品將會影響效能,因此應該只在需要時才安裝此產品。如需安裝、配置與用法的詳細資訊,請參閱 jcharset_readme.txt。
使用者試圖經由閘道存取企業內部網路網頁時,即可使用 Rewriter 來順利存取網頁。URLScraper 與閘道會使用 Rewriter。
URL Scraper 提供者會從配置的 URI 取得內容。將這些 URI 傳送至瀏覽器前,它會將所有相對 URI 展開為絕對 URI。
例如,如果使用者嘗試用下列方式存取網站:
<a href="../mypage.html">
Rewriter 會將此轉譯為:
<a href="http://yahoo.com/mypage.html">
其中 http://yahoo.com/test/ 是網頁的基準 URL。
如需 URLScraper 提供者的詳細資訊,請參閱「Sun Java System Portal Server 管理指南」。
閘道從網際網路入口網站獲取內容。將內容傳送至瀏覽器前,它會將閘道 URI 置於目前的 URI 之前,如此來自瀏覽器的後續 URI 請求都可到達閘道。
例如,如果使用者試圖用以下方式存取網際網路機器上的 HTML 網頁:
<a href="http://mymachine.intranet.com/mypage.html>"
Rewriter 會引用閘道置於這個 URL 之前,如下所示:
<a href="https://gateway.company.com/http://mymachine.intranet.com/ mypage.html>"
使用者點選與此控點相關的連結時,瀏覽器便會連絡閘道。閘道會從 mymachine.intranet.com 取得 mypage.html 的內容。
閘道使用多種規則來判定是否需重新寫入取得網頁中的元素。
如需定義規則集的詳細資訊,請參閱「Portal Server 管理指南」。在建立新規則集後,您必須定義必要的規則。
本節涵蓋下列主題:
規則集 DTD:
<?xml version="1.0" encoding="UTF-8"?> <!-- The following constraints are not represented in DTD, but taken care of programmatically 1. In a Rule, All Mandatory attributes cannot be "*". 2. Only one instance of the below elements is allowed, but in any order. 1)HTMLRules 2)JSRules 3)XMLRules 3. ID should always be in lower case. --> <!ENTITY % eURL ’URL’> <!ENTITY % eEXPRESSION ’EXPRESSION’> <!ENTITY % eDHTML ’DHTML’> <!ENTITY % eDJS ’DJS’> <!ENTITY % eSYSTEM ’SYSTEM’> <!ENTITY % ruleSetElements ’(HTMLRules | JSRules | XMLRules)?’> <!ENTITY % htmlElements ’(Form | Applet | Attribute)*’> <!ENTITY % jsElements ’(Variable | Function)*’> <!ENTITY % xmlElements ’(Attribute | TagText)*’> <!ELEMENT RuleSet (%ruleSetElements;,%ruleSetElements;,%ruleSetElements;)> <!ATTLIST RuleSet id ID #REQUIRED extends CDATA "none" > <!-- Rules for identifying rules in HTML content --> <!ELEMENT HTMLRules (%htmlElements;)> <!ELEMENT Form EMPTY> <!ATTLIST Form name CDATA #REQUIRED field CDATA #REQUIRED valuePatterns CDATA "" source CDATA "*" > <!ELEMENT Applet EMPTY> <!ATTLIST Applet code CDATA #REQUIRED param CDATA "*" valuePatterns CDATA "" source CDATA "*" > <!-- Rules for identifying rules in JS content --> <!ELEMENT JSRules (%jsElements;)> <!ELEMENT Variable EMPTY> <!ATTLIST Variable name CDATA #REQUIRED type (%eURL; | %eEXPRESSION; | %eDHTML; | %eDJS; | %eSYSTEM;) "EXPRESSION" source CDATA "*" > <!ELEMENT Function EMPTY> <!ATTLIST Function name CDATA #REQUIRED paramPatterns CDATA #REQUIRED type (%eURL; | %eEXPRESSION; | %eDHTML; | %eDJS;) "EXPRESSION" source CDATA "*" > <!-- Rules for identifying rules in XML content --> <!ELEMENT XMLRules (%xmlElements;)> <!ELEMENT TagText EMPTY> <!ATTLIST TagText tag CDATA #REQUIRED attributePatterns CDATA "" source CDATA "*" > <!ELEMENT Attribute EMPTY> <!ATTLIST Attribute name CDATA #REQUIRED tag CDATA "*" valuePatterns CDATA "" type (%eURL; | %eDHTML; | %eDJS; ) "URL" source CDATA "*" >
除必要的屬性值不能只有 * 之外,您可使用 * 做為規則值的一部分。會忽略這類規則,但是訊息會記錄在 RuleSetInfo 記錄檔中。如需此記錄檔的資訊,請參閱除錯檔案名稱。
本節包含一範例規則集。我們使用第 140 頁的「案例研究」來說明 Rewriter 解譯這些規則的方式。
<?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 網頁的目錄。
在這些目錄中,識別出需要重新寫入的網頁。
識別出各網頁上需重新寫入的 URL。識別出多數 URL 的簡易方法就是搜尋 "http" 與 "/"。
識別出 URL 的內容類型:HTML、JavaScript 或 XML。
在 Access Manager 管理主控台「Portal Server 配置」下的「Rewriter 服務」中編輯需要的規則集,以撰寫重新寫入各個 URL 所需的規則。
將所有規則合併到該網域的規則集中。
建立規則集時,請記住:
特定主機的優先順序是根據最長的 URI 符合。以下列的規則集為例
mail1.central.abc.com|iplanet_mail_ruleset *.sfbay.abc.com|sfbay_ruleset *.abc.com|generic_ruleset
使用的會是 sfbay_ruleset,因為它的符合內容最長。
規則集中的規則會依順序套用至網頁中的所有陳述式,直到有一個規則與特定陳述式相符。
撰寫規則時,請牢記規則的順序。規則會以出現在規則集中的順序,套用至網頁中的陳述式。若您有特定規則,及包含 "*" 的一般規則,請先定義該特定規則,然後再定義一般規則。否則,在套用特定規則之前就會先套用一般規則至所有陳述式。
所有的規則都必須包含在 <RuleSet> </RuleSet> 標記內。
將所有需重新寫入 HTML 內容的規則納入規則集的 <HTMLRules> </HTMLRules> 區段。
將所有需重新寫入 JavaScript 內容的規則納入規則集的 <JSRules> </JSRules> 區段。
將所有需重新寫入 XML 內容的規則納入規則集的 <XMLRules> </XMLRules> 區段。
請在您的企業內部網路網頁中,識別出需重新寫入的 URL,然後將所需規則納入規則集的相應區段 (HTML、JSRules 或 XMLRules)。
將規則集指派至所需網域。
重新啟動閘道以使變更產生作用:
gateway-install-root/SUNWportal/bin/gateway -n gateway-profile-name start
規則集根元素具有兩種屬性:
RuleSetName,例如,default_ruleset。會在 RuleSet 至 URI 的對映中參照此名稱。
Extends。此屬性指的是規則集的繼承特性。值會指向您欲從中導出規則集的規則集。
使用值 none 以表示此新的獨立規則集不依附於任何其他的規則集,或指定 RuleSetName 以表示您的規則集依附於其他規則集。
Rewriter 使用遞迴功能在符合的字串式樣的結尾搜尋是否有相同的式樣。
例如,當 Rewriter 剖析下列字串時:
<a href="src=abc.jpg,src=bcd.jpg,src=xyz.jpg>
規則
<Attribute name="href" valuePatterns="*src=**"/>
僅會重寫第一個出現的式樣,其形式如下:
<a href="src=http://jane.sun.com/abc.jpg>
如果您使用遞迴選項
<Attribute name="href" valuePatterns="REC:*src=**"/>;
Rewriter 會搜尋相同的式樣,直至符合字串式樣的結尾,因此輸出將會是:
<a href="src=http://jane.sun.com/abc.jpg,src=http://jane.sun.com/bcd.jpg,src=http://jane.sun.com/xyz.jpg>