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

第 1 部分 Secure Remote Access 伺服器元件

第 1 章 Portal Server Secure Remote Access 伺服器簡介

本章說明 Sun JavaTM System Portal Server Secure Remote Access 以及 Sun Java System Portal Server 與 Sun Java System Portal Server Secure Remote Access 元件間的關係。

本章涵蓋下列主題:

Secure Remote Access 簡介

Secure Remote Access 可讓遠端使用者透過網際網路安全地存取其組織的網路及其服務。此外,還能為您的組織提供安全的網際網路入口網站,從而讓任何目標族群 (例如員工、事業夥伴或一般大眾) 都可存取內容、應用程式及資料。

Secure Remote Access 提供以瀏覽器為基礎的安全遠端存取,以從任何遠端裝置存取入口網站內容與服務。Secure Remote Access 是一個安全的存取解決方案,使用者無需用戶端軟體就可從任何裝有啟用 Java™ 技術的瀏覽器的裝置對其進行存取。與 Portal Server 的整合能確保使用者可安全加密地存取他們有權存取的內容與服務。

Secure Remote Access 軟體適用於部署高度安全遠端存取入口網站的企業。這些入口網站重視企業內部網路資源的安全性、保護與隱私權。Secure Remote Access 架構非常適用於這些入口網站類型。Secure Remote Access 軟體能讓使用者安全地經由網際網路存取企業內部網路資源,而無需在網際網路上顯露這些資源。

Portal Server 可在兩種模式下操作:「開放模式」與「安全模式」,如下列小節所述。

開放模式

在開放模式中,Portal Server 安裝時未安裝 Secure Remote Access。雖然這個模式下可以使用 HTTPS 通訊,但卻不可以使用安全遠端存取。因此使用者無法存取安全遠端檔案系統與應用程式。

開放入口網站與安全入口網站的主要不同為,由開放入口網站提供的服務通常會位於非軍事區 (DMZ) 而不會位於安全企業內部網路中。DMZ 是一個位於公用網際網路與私有企業內部網路之間的小型受保護網路,通常由兩端的防火牆劃分界線。

若入口網站沒有包含關於部署公用資訊與允許存取免費應用程式的敏感資訊,則對於大量使用者存取請求的回應將會快於使用安全模式。

在「開放模式」中,Portal Server 安裝於防火牆後的單一伺服器上。多個用戶端透過網際網路經由單一防火牆存取 Portal Server。

圖 1–1 開放模式下含 Secure Remote Access 的 Portal Server

開放模式下的 Portal Server。

安全模式

安全模式可讓使用者安全遠端存取需要的企業內部網路檔案系統與應用程式。

閘道位於非軍事區域 (DMZ)。閘道提供至所有企業內部網路 URL 與應用程式的單一安全存取點,如此會減少將在防火牆中被開放的連接埠數。所有其他 Portal Server 服務 (例如階段作業、認證與標準入口網站桌面) 皆位於 DMZ 之後的安全的企業內部網路中。用戶端瀏覽器至閘道的通訊將使用 HTTPS 透過安全套接層 (Secure Sockets Layer, SSL) 加密。閘道至伺服器與企業內部網路資源的通訊可使用 HTTP 或 HTTPS 加密。

在「安全模式」中,會使用 SSL 加密用戶端與閘道間的網際網路連線。SSL 也可以用於加密閘道與伺服器之間的連線。企業內部網路與網際網路之間的閘道將延伸用戶端與 Portal Server 之間的安全路徑。

圖 1–2 安全模式下含 Secure Remote Access 的 Portal Server

安全模式下含 Secure Remote Access 的 Portal Server

可以新增其他伺服器與閘道以擴大網站。Secure Remote Access 軟體可以基於業務需求用不同方式配置。如需如何滿足業務需求的詳細資訊,請參閱「Sun Java System Portal Server 7.2 Deployment Planning Guide」

Secure Remote Access 服務

Secure Remote Access 軟體具有五個主要元件:

配置 Secure Remote Access 屬性

您可在 Portal Server 管理主控台中使用下列服務配置 Secure Remote Access 屬性:


注意 – 注意 –

閘道在執行時不會接收屬性變更的通知。重新啟動閘道,以讓更新的設定檔屬性 (屬於閘道或其他任何服務) 生效。如需詳細資訊,請參閱使用指令行選項配置閘道屬性


設定衝突解決

Procedure設定衝突解決層級

  1. 登入 Portal Server 管理主控台。

  2. 選取 [Secure Remote Access] 標籤,並按一下必要的服務標籤:Netlet、Netfile 或 Proxylet。

  3. 從 [選取 DN] 下拉式功能表選取 [組織] 或 [角色]。

  4. 從 [COS 優先順序] 下拉式方塊中,選取必要的 [衝突解決層級]。

  5. 按一下 [儲存] 完成作業。

支援的應用程式

SRA 支援下列應用程式:

在您開始前

Procedure啟用入口網站的 SRA

  1. 使用 PortalServer_base/psadmin switch-sra-status -u amadmin -f <passwordfile> on 指令切換 SRA 狀態。

  2. 使用 PortalServer_base/psadmin provision-sra -u amadmin -f <passwordfile> -p <portal-id> --gateway-profile <profile-name> --enable 指令佈建 SRA 狀態。

第 2 章 使用閘道

章說明與閘道相關的概念。如需管理閘道的資訊,請參閱第 16 章, 管理閘道。如需配置閘道的資訊,請參閱第 8 章, 配置 Secure Remote Access 閘道

本章涵蓋下列主題:

閘道簡介

閘道在源自網際網路的遠端使用者階段作業與您的企業內部網路之間提供了介面與安全的屏障。透過單一介面至遠端使用者,閘道可經由內部 Web 伺服器和應用程式伺服器安全地顯示內容。

針對每個閘道實例,您必須完成下列工作:

其他與閘道相關的主題包含:

建立閘道設定檔

閘道設定檔包含與閘道配置相關的所有資訊,如閘道偵聽的連接埠、SSL 選項及代理伺服器選項。安裝閘道時,如果選擇預設值,則會建立稱為「default」的預設閘道。與預設設定檔對應的配置檔會出現在:/etc/opt/SUNWportal/platform.conf.default

其中 /etc/opt/SUNWportal 是所有 platform.conf.* 檔案的預設位置。如需 platform.conf 檔案的詳細資訊,請參閱了解 platform.conf 檔案

使用設定檔時,您可執行下列作業:


注意 – 注意 –

不要指定相同的設定檔給在相同機器上執行的閘道不同實例。該設定將會造成衝突,因為連接埠號碼相同。

不要在不同的設定檔 (建立給相同的閘道) 中指定相同的連接埠號碼。以同樣的連接埠執行相同閘道的多重實例會造成衝突。


建立多個閘道實例

要建立閘道的多個實例,請參閱「Sun Java System Portal Server 7.2 Installation and Configuration Guide」中的第 4 章「Installing and Configuring a Gateway With Portal Server」

建立多址閘道實例

多重介面閘道實例是一個 Portal Server 上的多重閘道。要建立這些實例,請將 platform.conf 檔案修改如下:

gatewaybindipaddress = 0.0.0.0

使用相同的 LDAP 建立閘道實例

如果您建立的是使用相同 LDAP 的多重閘道實例,在所有隨後的閘道上建立第一個閘道之後:

/etc/opt/SUNWam/config/ 中,修改 AMConfig-instance-name.properties 的下列區域,使其與第一個安裝的閘道實例一致。

請參閱使用相同的 LDAP 建立閘道實例

重新啟動閘道

一般而言,您不需要重新啟動閘道。只有發生下列事件時,才需要重新啟動閘道:

配置閘道監視程式

您可以配置監視程式監視閘道狀態的時間間隔。要啟動或停止監視程式,請執行 ./psadmin sra-watchdog -u amadmin -f <password-file> -t <type> on|off 指令。時間間隔預設為 60 秒。要變更此值,可在 crontab 公用程式中編輯下列行:


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

請參閱 crontab 的線上手冊以配置 crontab 項目。

指定虛擬主機

虛擬主機是指向相同機器 IP 和主機名稱的額外主機名稱。例如,如果一個主機名稱 abc 指向主機 IP 位址 192.155.205.133,您可新增另一個主機名稱 cde 指向相同的 IP 位址。

指定代理伺服器以連絡 Access Manager

您可以指定閘道用以連絡部署在 Portal Server 上的 SRA 核心支援 (RemoteConfigServlet) 的代理伺服器主機。閘道使用此代理伺服器連絡 Portal Server 與 Access Manager。請參閱指定代理伺服器

了解 platform.conf 檔案

預設情況下,platform.conf 檔案位於:/etc/opt/SUNWportal

platform.conf 檔案包含閘道所需的詳細資訊。本節提供一個範例 platform.conf 檔案,並說明所有的項目。

在配置檔中包含所有機器特定詳細資訊的優點,就是共用的設定檔可以被在多個機器上執行的閘道共享。

以下是 platform.conf 檔案的範例。


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

下列表格列出並說明 platform.conf 檔案中所有的欄位。

表 2–1 檔案特性

項目 

預設值 

描述 

gateway.user

noaccess 

閘道以此使用者執行。 

閘道必須做為超級使用者啟動,並且在初始化後,它會失去超級使用者權限而成為此使用者。 

gateway.jdk.dir

 

這是閘道所使用之 JDK 目錄的位置。 

gateway.dsame.agent

 

當閘道啟動要取得其設定檔時,這是閘道會連絡 Access Manager 的 URL。 

portal.server.protocol

portal.server.host

portal.server.port

 

這是預設 Portal Server 安裝使用的通訊協定、主機和連接埠。 

gateway.protocolgateway. hostgateway.port

 

這是閘道的通訊協定、主機和連接埠。這些值與您在安裝時所指定的模式和連接埠相同。這些值用於建立通知 URL。 

gateway. trust_all_server_certs

true 

這表示閘道必須相信所有的伺服器憑證,或僅相信在閘道憑證資料庫中的伺服器憑證。 

gateway. trust_all_server_cert_domains

false 

當閘道和伺服器之間有 SSL 通訊時,會提供伺服器憑證給閘道。在預設情況下,閘道會檢查伺服器主機名稱是否與伺服器憑證 CN 相同。 

如果屬性值設定為 true,則閘道會停用它收到之伺服器憑證的網域名稱檢查。 

gateway.virtualhost

 

如果閘道機器有配置多個主機名稱,您可以在此欄位指定不同的名稱和識別提供者位址。 

gateway.virtualhost. defaultOrg=org

 

這會指定預設的 Org 給登入的使用者。 

例如,假設虛擬主機欄位項目如下所示: 

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

Managers.test.com

含有預設的 org 項目為: 

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

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

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

使用者可以使用 https://manager.test.com 而非 https://test.com/o=Manager,dc=test,dc=com 以登入管理員的 org。


備註 –

virtualhost 和 defaultOrg 在 platform.conf 檔案中區分大小寫,但用於 URL 時則沒有區分。


gateway.notification.url

 

閘道主機、通訊協定和連接埠的組合,用於建立通知 URL。用於從 Access Manager 接收階段作業通知。 

請確定通知 URL 和任何組織的名稱不相同。如果通知 URL 和組織名稱相同,則使用者在嘗試連結到該組織時會看到空白頁面而非登入的頁面。 

gateway.retries

 

此數字是在啟動時,閘道嘗試連絡 Portal Server 的次數。 

gateway.debug

error

設定閘道的除錯層級。除錯記錄檔位於 debug-directory/files。除錯檔案的位置在 gateway.debug.dir 項目中指定。

除錯層級為: 

  • error - 只會在除錯檔案中記錄幾個錯誤。在此種錯誤發生時,閘道通常會停止運作。

  • warning - 記錄警告訊息。

  • message - 記錄所有的除錯訊息。

  • on - 在主控台顯示所有的除錯訊息。

除錯檔案為: 

srapGateway.gateway-profile-name - 包含閘道的除錯訊息。

Gateway_to_from_server.gateway-profile-name - 在訊息模式下,此檔案包含閘道和內部伺服器之間所有的需求和回應標頭。

要產生此檔案,請變更 /var/opt/SUNWps/debug 目錄的寫入權限。

Gateway_to_from_browser.gateway-profile-name - 在訊息模式下,此檔案包含閘道和用戶端瀏覽器之間所有的需求和回應標頭。

要產生此檔案,請變更 /var/opt/SUNWps/debug 目錄的寫入權限。

gateway.debug.dir

 

這是所有除錯檔案產生的目錄。 

此目錄必須有足夠的權限以將 gateway.user 中提到的使用者寫入檔案。

gateway.logdelimiter

 

目前沒有使用。 

gateway.external.ip

 

如果是在多址閘道機器上 (使用多重 IP 位址的機器),您需要在此指定外部 IP 位址。此 IP 用於執行 FTP 的 Netlet。 

gateway.certdir

 

它指定憑證資料庫的位置。 

gateway.allow.client.caching

true 

允許或拒絕用戶端快取。 

如果允許,用戶端瀏覽器可以快取靜態頁面和影像以取得較佳的效能 (藉由減低網路流量)。 

如果拒絕,因為沒有任何快取,安全性會更高,但是會因為有較高的網路負載而導致效能落差。 

gateway.userProfile.cacheSize

 

這是在閘道上使用者設定檔項目被快取的數目。如果項目數量超過這個值,常用的項目會清除快取。 

gateway.userProfile. cacheSleepTime

 

以秒為單位設定休息時間,以清除快取。 

gateway.userProfile. cacheCleanupTime

 

超過以秒為單位的最大數字的時間後,會移除設定檔項目。 

gateway.bindipaddress

 

在多址機器上,這是閘道連結其 serversocket 的 IP 位址。要配置閘道偵聽所有介面,請置換 IP 位址以使 gateway.bindipaddress=0.0.0.0

gateway.sockretries

目前沒有使用。 

gateway.enable.accelerator

false 

如果設定為 true,則允許支援外部加速器。 

gateway.enable.customurl

false 

如果設定為 true,則允許管理員指定一個自訂的 URL 讓閘道重新寫入頁面。 

gateway.httpurl

 

自訂 URL 的 HTTP reverse proxy URL 讓閘道重新寫入頁面。啟用 Proxylet 時請使用此項目。 

gateway.httpsurl

 

自訂 URL 的 HTTPS reverse proxy URL 讓閘道重新寫入頁面。如果啟用 Proxylet,請勿使用此項目。 

gateway.favicon

 

閘道將 favicon.icon 檔請求重新導向到的 URL。

此項目用於 Internet Explorer、Netscape 7.0 和更高版本中的「favorite icon」。 

如果此項目保持空白,閘道會傳送一個「404 頁面找不到」的訊息給瀏覽器。 

gateway.logging.password

 

使用者 amService-srapGateway 的 LDAP 密碼,閘道會使用它來建立其應用程式階段作業。

密碼可以是加密文字或一般文字。 

http.proxyHost

 

代理伺服器主機會用於連絡 Portal Server。 

http.proxyPort

 

主機連接埠會用於連絡 Portal Server。 

http.proxySet

 

若需要代理伺服器,則屬性會設定為 true。若特性設定為 false,則會忽略 http.proxyHosthttp.proxyPort

portal.server.instance

 

此特性值對應於 /etc/opt/SUNWam/config/AMConfig -instance-name.properties 檔案。如果值是預設值,則會指向 AMConfig.properties。

gateway.cdm.cacheSleepTime

60000 

快取「用戶端偵測模組」回應的逾時值從 Access Manager 傳送到閘道。 

gateway.cdm.cacheCleanupTime

300000 

快取「用戶端偵測模組」回應的逾時值從 Access Manager 傳送到閘道。 

netletproxy.port

10555 

Netlet 代理伺服器預設程式會偵聽此連接埠上的請求。 

rewriterproxy.port

10555 

Rewriter 代理伺服器預設程式會偵聽此連接埠上的請求。 

gateway.ignoreServerList

false 

如果設定為 true,會使用 AMConfig.properties 檔案中指定的值來建立 Access Manager 伺服器 URL。當 Access Manager 伺服器位於負載平衡器之後時,請將此屬性設定為 true。

rewriterproxy.accept.from.gateways

 

這是 IP 位址的清單,可將 Rewriter 代理伺服器設定為接受來自該清單的請求。此屬性對 HTTP 與 HTTPS 模式均適用。它可加強安全性,僅接受來自此集合的請求,而不會處理所有其他的請求。IP 位址可使用逗點分隔。預設值是空的,被視為舊有模式,亦即會尊重到 Rewriter 代理程式的所有請求。 

rewriterproxy.checkacl=

false 

啟用此特性可讓 Rewriter 代理伺服器檢查 ACL 值,就像閘道一樣。舊有模式值是「false」。當將此值設定為 true 時,Rewriter 代理伺服器會在指定 DN 根據在閘道存取服務中指定的值檢查 URL,且會依據此處設定之清單集合來允許/拒絕請求。此值在 HTTP 與 HTTPS 模式中都有用。 

使用 Web 代理伺服器

您可以使用協力廠商 Web 代理伺服器配置閘道以連絡 HTTP 資源。Web 代理伺服器位於客戶端與網際網路之間。

Web 代理伺服器配置

不同的代理伺服器可能用於不同的網域和子網域。這些項目告訴閘道在特定的網域中,應該使用哪個代理伺服器以連絡特定的子網域。指定在閘道中的代理伺服器配置運作方式如下:


備註 –

如果您正透過標準入口網站桌面的 [書籤通道] 存取該 URL,且您的情況不符合上述任何一項,閘道會傳送重新導向給瀏覽器。瀏覽器會使用自己的代理伺服器設定來存取該 URL。


語法


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

範例


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

* 是與任何結果都相符的萬用字元

其中,

sesta.com 是網域名稱而 wp1 是在 8080 連接埠上用於連絡的代理伺服器。

red 是子網域而 wp2 是在 8080 連接埠上用於連絡的代理伺服器。

yellow 是子網域。由於沒有指定代理伺服器,因此會使用指定給網域的代理伺服器,即為在 8080 連接埠上的 wp1

* 表示所有其他子網域必須在 8080 連接埠上使用 wp3


備註 –

如果您沒有指定連接埠,預設是使用連接埠 8080。


處理網路代理伺服器資訊

當用戶端嘗試存取特定 URL 時,URL 中的主機名稱會與 [網域與子網域的代理伺服器] 清單中的項目進行比較。符合請求主機名稱之最長字尾的項目會被考慮。例如,假設請求的主機名稱是 host1.sesta.com。會依序進行下列搜尋,直到找到符合的結果。

考慮 [網域與子網域的代理伺服器] 清單中的下列項目:


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

閘道會將這些項目內部對應至如下列表格中顯示的表格。

表 2–2 在 [網域與子網域的代理伺服器] 清單中的對映項目

編號 

[網域與子網域的代理伺服器] 清單中的項目 

代理伺服器 

描述 

com 

p1 

指定於清單中。 

host1.com 

p2 

指定於清單中。 

host2.com 

p1 

由於沒有為 host2 指定代理伺服器,會使用網域的代理伺服器。 

*.com 

p3 

指定於清單中。 

sesta.com 

p4 

指定於清單中。 

host5.sesta.com 

p5 

指定於清單中。 

*.sesta.com 

p6 

指定於清單中。 

florizon.com 

直接 

如需詳細資訊,請參閱第 14 項的描述。 

host6.florizon.com 

– 

如需詳細資訊,請參閱第 14 項的描述。 

10 

abc.sesta.com 

p8 

指定於清單中。 

11 

host7.abc.sesta.com 

p7 

指定於清單中。 

12 

host8.abc.sesta.com 

p8 

指定於清單中。 

13 

*.abc.sesta.com 

p9 

指定於清單中。在 abc.sesta.com 網域下,所有主機 (host7host8 除外) 都會使用 p9 作為代理伺服器。

14 

host6.florizon.com 

p10 

與第 9 個項目相同。第 9 個項目表示直接連線,而此項目表示應該使用代理伺服器 10。若遇到像這樣有兩個項目的情況,含有代理伺服器資訊的項目會視為有效的項目。請忽略另一個項目。 

15 

host9.sesta.com 

p11 

指定於清單中。 

16 

siroe.com 

直接 

由於沒有指定 siroe.com 的代理伺服器,因此會嘗試直接連線。

17 

host12.siroe.com 

p12 

指定於清單中。 

18 

host13.siroe.com 

p13 

指定於清單中。 

19 

host14.siroe.com 

直接 

由於沒有指定 host14 的代理伺服器,因此會嘗試直接連線。

20 

*.siroe.com 

p14 

請參閱第 23 項描述。 

21 

host15.siroe.com 

p15 

指定於清單中。 

22 

host16.siroe.com 

直接 

由於沒有指定 host16 或 siroe.com 的代理伺服器,因此會嘗試直接連線。

23 

*.siroe.com 

p16 

與第 20 個項目類似,但是指定的代理伺服器不同。這種情形下,無法知道閘道的實際運作方式。可能會使用兩個代理伺服器中的任意一個。 

24 

p17 

如果沒有其他的項目符合請求的 URL,就會使用 p17 作為代理伺服器。


提示 –

與其在 [網域與子網域的代理伺服器] 清單中以 | 分隔代理項目,不如將個別的項目放置在清單的不同行中。例如取代如下的項目:


sesta.com p1 | red p2 | * p3

您指將此資訊指定為:


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

此清單格式更容易追蹤重複項目或任何其他含糊的情況。


以 [網域與子網域的代理伺服器] 清單為基礎重新寫入

[網域與子網域的代理伺服器] 清單中的項目也會被 Rewriter 使用。網域符合列在 [網域與子網域的代理伺服器] 清單中網域的所有 URL,Rewriter 會重新寫入。


注意 – 注意 –

在 [網域與子網域的代理伺服器] 清單中的 * 項目不會考慮重新寫入。例如,不會考慮項目 24。


如需 Rewriter 的資訊,請參閱第 4 章, 使用 Rewriter

預設網域與子網域

當在 URL 中的目標主機不是完整限定的主機名稱,會使用預設的網域和子網域以使其有完整合格的名稱。

假設管理主控台中 [預設網域] 欄位內的項目是:


red.sesta.com

備註 –

在 [網域與子網域的代理伺服器] 清單中您必須要有對應的項目。


在上面的範例中,sesta.com 是預設的網域而 red 是預設的子網域。

如果要求的 URL 是 host1,則會使用預設的網域和子網域將此項目解析為 host1.red.sesta.com。然後會在 [網域與子網域的代理伺服器] 清單中查詢 host1.red.sesta.com

使用自動代理伺服器配置

要忽略 [網域與子網域的代理伺服器] 清單中的資訊,請啟用 [自動代理伺服器配置] 功能。

使用自動代理伺服器配置 (Proxy Auto Configuration, PAC) 檔案時:

使用範例 PAC 檔案

下列範例顯示列在 [網域與子網域的代理伺服器] 清單中的 URL 和對應的 PAC 檔案。

含有傳回 DIRECT 或 NULL 的範例

如果將這些代理伺服器用於網域與子網域:

*intranet1.com proxy.intranet.com:8080

intranet2.com proxy.intranet1.com:8080

相對應的 PAC 檔案是:


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

含有傳回 STARPROXY 的範例

如果將這些代理伺服器用於網域與子網域:

intranet1.com

intranet2.com.proxy.intranet1.com:8080

internetproxy.intranet1.com:80

相對應的 PAC 檔案是:


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

在這個情況下,如果請求的主機位於 .intranet2.com 網域,則閘道會連絡 proxy.intranet1.com:8080。如果 proxy.intranet1.com:8080 無法使用,請求會失敗。閘道不會進行容錯移轉與連絡 proxy1.intranet1.com:8080

指定 PAC 檔案位置

用來指定 PAC 檔案位置的格式需視下列位置而定:

在個別階段作業中新增服務

當在個別階段作業中新增 Portal Server 服務時:

使用 Netlet 代理伺服器

Netlet 封包在閘道是解密的,並會傳送到目標伺服器。然而,閘道需要透過非軍事區 (DMZ) 和企業內部網路之間的防火牆,存取所有的 Netlet 目的地主機。此設定需要在防火牆中開啟大量的連接埠。Netlet 代理伺服器可用於最小化在防火牆中開啟的連接埠數目。

藉由延伸用戶端的安全通道,透過閘道到存在於企業內部網路的 Netlet 代理伺服器,Netlet 強化閘道和企業內部網路之間的安全性。使用代理伺服器,Netlet 封包會由代理伺服器解密,之後會傳送至目的地。

使用 Netlet 代理伺服器的優點:

您可執行下列作業:

顯示在有和沒有安裝 Netlet 代理伺服器的情況下,閘道和 Portal Server 的三個範例實作。元件包含一個用戶端、兩個防火牆、位於兩個防火牆之間的閘道、Portal Server 和 Netlet 目標伺服器。

第一個方案顯示沒有安裝 Netlet 代理伺服器的閘道和 Portal Server。資料加密僅從用戶端延伸到閘道。在第二防火牆中開啟一個連接埠給每個 Netlet 連線請求。

第二個方案顯示在 Portal Server 上安裝 Netlet 代理伺服器的閘道和 Portal Server。資料加密從用戶端一直延伸到 Portal Server。既然所有 Netlet 連線都是通過 Netlet 代理伺服器傳送的,在 Netlet 請求中的第二防火牆只需要開啟一個連接埠。

第三個方案顯示有在個別節點上安裝 Netlet 代理伺服器的閘道和 Portal Server。在個別節點上安裝 Netlet 代理伺服器會減少 Portal Server 節點上的負載。同樣的,在第二個防火牆中僅需要開啟兩個連接埠。其中一個連接埠提供給 Portal Server 使用,另一個連接埠傳送 Netlet 請求到 Netlet 代理伺服器伺服器。

圖 2–1 Netlet 代理伺服器的實作

Netlet 代理伺服器的實作

啟用 Netlet 代理伺服器

您可使用 Portal Server 管理主控台透過閘道服務啟用 Netlet 代理伺服器。

重新啟動 Netlet 代理伺服器

每次代理伺服器意外結束時,您可以配置 Netlet 代理伺服器以重新啟動。您可排程監視程式程序,以監視 Netlet 代理伺服器,並且在它當機時重新啟動。

您也可以手動重新啟動 Netlet 代理伺服器。請參閱重新啟動 Netlet 代理伺服器以取得步驟。

配置 Netlet 代理伺服器監視程式

您可以配置監視程式監視 Netlet 代理伺服器狀態的時間間隔。時間間隔預設為 60 秒。要變更此時間間隔,請將下列行新增至 crontab 檔案:

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


備註 –

要啟動或停止監視程式,請執行 ./psadmin sra-watchdog -u amadmin -f <password-file> -t <type> on|off 指令。


使用 Rewriter 代理伺服器

Rewriter 代理伺服器安裝於企業內部網路中。閘道不會直接嘗試擷取內容,而是將所有請求轉寄給 Rewriter 代理伺服器,由代理伺服器獲取並傳回內容給閘道。

使用 Rewriter 代理伺服器的優點有:

如果您沒有指定 Rewriter 代理伺服器,當使用者嘗試存取企業內部網路的其中一台電腦,閘道元件會直接連線至企業內部網路的電腦。

如果您使用 Rewriter 代理伺服器作為負載平衡器,請確定 Rewriter 的 platform.conf.instance_name 指向負載平衡器 URL。在 Portal Server 清單中指定負載平衡器主機。

如果每個閘道實例 (不一定要在入口節點上) 都有 Rewriter 代理伺服器的多個實例,請在 platform.conf 檔案中以 host-name:port 格式來提供每個 Rewriter 代理伺服器的詳細資訊,而非 Rewriter 代理伺服器的單一連接埠項目。

建立 Rewriter 代理伺服器的實例

使用 rwpmultiinstance 程序檔,在 Portal Server 節點上建立 Rewriter 代理伺服器的新實例。請在建立閘道設定檔之後執行此程序檔。

請參閱建立 Rewriter 代理伺服器實例

啟用 Rewriter 代理伺服器

在 Access Manager 管理主控台中,在「SRA 配置」下透過閘道服務啟用 Rewriter 代理伺服器。

重新啟動 Rewriter 代理伺服器

每次代理伺服器意外結束時,您可以配置重新啟動 Rewriter 代理伺服器。您可排程監視程式程序以監視,並在發生這種情況時重新啟動。

您也可以手動重新啟動 Rewriter 代理伺服器。

請參閱重新啟動 Rewriter 代理伺服器

配置 Rewriter 代理伺服器監視程式

您可以配置監視程式監視 Rewriter 代理伺服器狀態的時間間隔。時間間隔預設為 60 秒。要變更時間間隔,請將下列行新增至 crontab 檔案:

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


備註 –

要啟動或停止監視程式,請執行 ./psadmin sra-watchdog -u amadmin -f <password-file> -t <type> on|off 指令。


使用含有閘道的反向代理伺服器

代理伺服器會傳送網際網路內容至企業內部網路,而反向代理伺服器則傳送企業內部網路內容至網際網路。您可配置反向代理伺服器的部署,以實現負載平衡與快取。

若在閘道前面部署具有協力廠商反向代理伺服器,則回應必須以反向代理伺服器的 URL ( 非閘道的 URL) 重新寫入。因此需要下列配置。

請參閱啟用反向代理伺服器

取得用戶端資訊

當閘道轉寄用戶端請求至任何內部伺服器時,會新增 HTTP 標頭至 HTTP 請求。您可以使用這些標頭以取得額外的用戶端資訊並偵測閘道的出現狀態。

要檢視 HTTP 請求標頭,請將 platform.conf 檔案中的項目設定為 gateway.error=message。然後使用 servlet API 中的 request.getHeader()。以下表格列出 HTTP 標頭中的資訊。

表 2–3 HTTP 標頭中的訊息

標頭 

語法 

描述 

PS-GW-PDC 

X-PS-GW- PDC: true/false

指出閘道上的 PDC 是否啟用。 

PS-Netlet 

X-PS-Netlet:enabled=true/false

指出閘道上的 Netlet 是否已經啟用或停用。 

如果已經啟用 Netlet,則加密選項會寫入,指出閘道以 HTTPS (encryption=ssl) 或以 HTTP 模式 (encryption=plain) 執行。

例如: 

  • PS-Netlet: enabled=false

    Netlet 是停用的。

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

    Netlet 使用在 SSL 模式中執行的閘道啟用。

    未啟用 Netlet 時,不會寫入 encryption=sslencryption=plain

PS-GW-URL 

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

指出用戶端要連接的 URL。 

連接埠為非標準連接埠時,例如,如果閘道為 HTTP/HTTPS 模式且連接埠並非 80/443,那麼也會寫入 :port

PS-GW-Rewriting-URL 

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

指出閘道重新寫入所有頁面的 URL。 

  1. 當瀏覽器支援 cookie 時,此標頭的值和 PS-GW-URL 標頭的值一樣。

  2. 當瀏覽器不支援 cookie 時:

    • 並且如果目標主機在 [轉寄使用者階段作業 Cookie 到的使用者階段作業] 欄位中,則值是閘道重新寫入頁面的實際 URL (含有編碼 SessionID 資訊)。

    • 或者,如果目標主機不在 [轉寄使用者階段作業 Cookie 到的使用者階段作業] 欄位中,則 SessionInfo 字串是 $SessionID


      備註 –

      在回應部分,如果使用者的 Access Manager sessionId 變更 (如來自認證頁面的回應),則會以該值重新寫入這些頁面 (此值並非是先前在標頭中所指的值)。


      例如:

    • 如果瀏覽器支援 cookie:

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

  • 如果瀏覽器不支援 cookie,且終端伺服器位於 [轉寄使用者階段作業 Cookie 到的使用者階段作業] 欄位中。

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

  • 如果瀏覽器不支援 cookie,且終端伺服器不在 [轉寄使用者階段作業 Cookie 到的使用者階段作業] 欄位中。

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

PS-GW-CLientIP 

X-PS-GW-CLientIP: IP

指示閘道從 recievedSocket.getInetAddress().getHostAddress() 所取得的 IP。

如果直接連到閘道,此值會提供用戶端的 IP。 

使用認證鏈接

認證鏈接提供比一般機制更高層級的安全性。您可以讓使用者認證一個以上的認證機制。

此處的程序說明僅適用於在閘道同時啟用認證鏈接與「個人數位憑證」(Personal Digital Certificate, PDC) 認證。如需在閘道上沒有 PDC 認證的認證鏈接的資訊,請參閱「Access Manager 管理指南」。

例如,如果您取得 PDC 和 Radius 認證模組,使用者將必須認證這三個模組以存取標準入口網站桌面。

請參閱新增認證模組到現有 PDC 實例以取得步驟。


備註 –

如果啟用 PDC,它永遠都是第一個顯示在使用者面前的認證模組。


使用萬有字元憑證

萬用字元憑證接受含有萬用字元的單一憑證,該憑證必須位於擁有完全合格 DNS 名稱的主機中。

使用憑證可以在相同網域中維護多個主機的安全性。例如,*.domain.com 的憑證可以用於 abc.domain.comabc1.domain.com。事實上,此憑證對於在 domain.com 網域中的任何主機都有效。

停用瀏覽器快取

由於可透過閘道元件僅使用 Web 瀏覽器從任何地方安全地存取後端公司資料,因此用戶端不應該在本機對資訊進行快取。

您可以修改指定閘道在 platform.conf 中檔案的屬性,以停用透過閘道快取重新導向的頁面。

停用此選項對閘道效能有影響。每次標準入口網站桌面更新時,閘道必須擷取頁面參照的每個東西,例如先前瀏覽器已經快取過的影像。然而,啟用這個功能後,遠端存取安全的內容將不會在用戶端網站留下快取過的痕跡。如果是從網咖或類似的遠端位置 (不在企業 IT 的控制下) 存取企業網路,此因素可能比效能問題更為重要。

請參閱停用瀏覽器快取

自訂閘道服務使用者介面

本節討論可以編輯的各種閘道特性檔案。

修改 srapGateway.properties 檔案

因下列用途您可以編輯此檔案:

修改 srapgwadminmsg.properties 檔案

因下列原因您可以編輯此檔案:

共用 LDAP 目錄

當 Portal Server 及 Access Manager 伺服器的兩個實例共用相同的 LDAP 目錄時,所有後續的 Portal Server、Access Manager 及閘道的實例都會共用相同的 LDAP 目錄。請參閱共用 LDAP 目錄

第 3 章 使用 Proxylet

本章說明可讓使用者透過閘道而非剖析網頁來存取企業內部網路網頁的 Proxylet。

使用 Proxylet

Proxylet 摘要

Proxylet 是一個 Java applet,它將其本身設定為用戶端機器上的代理伺服器。Proxylet 會讀取並修改用戶端機器上自動代理伺服器配置 (Proxy Auto Config, PAC) 檔案中的代理伺服器設定,將代理伺服器設定指向本地的代理伺服器 (Proxylet)。

Proxylet 從閘道繼承傳輸模式。如果已經將閘道配置為在 SSL 上執行,Proxylet 會在用戶端機器與閘道或目標伺服器之間建立一個安全的通道。為了加密目的,如果用戶端 JVM 為 1.4 或更新版本,或者如果必要的 jar 檔是位於用戶端機器中,Proxylet 會使用 JSSE API。否則它會使用 KSSL API。解密會在用戶端機器上執行。

被導向至閘道的 URL 的網域和子網域已在閘道設定檔中指定。如果 URL 並不是閘道處理的部份網域,則請求會導向至網際網路。如果在閘道設定檔中有列出特定的 URL 網域,則 Proxylet 會將用戶端代理伺服器設定重設為閘道點。

如果在閘道啟用個人數位憑證 (Personal Digital Certificate, PDC),Proxylet 會支援用戶端認證。要檢查是否已啟用 PDC,請參閱取得用戶端資訊

Proxylet 透過 Portal Server 管理主控台啟用,也可在管理主控台指定用戶端 IP 位址或代理伺服器主機名稱與連接埠。如果已啟用 Proxylet,它會針對用戶端機器檢查下列資訊:

如果滿足所有的要求,就會下載 applet 並在用戶端機器上啟動它。如果用戶端沒有安裝 JRE 1.4.2 或更新版本,當您具有網際網路連線及管理權限時,用戶端就會透過 Proxylet 自動下載 JRE。

使用 Proxylet 時,它會從自動代理程式配置 (Proxy Auto Configuration, PAC) 檔案或代理程式配置清單中擷取代理程式設定。


備註 –

確定使用者瞭解必須在使用 Proxylet applet 時,停用瀏覽器快顯式阻擋程式。


HTTPS 支援

Proxylet 支援 HTTPS,可完成以下作業:

使用 Proxylet 的優點

不同於 Rewriter,Proxylet 安裝後很少需要或不需要變更。與協力廠商軟體 (例如 Microsoft Exchange Server) 的整合也非常容易。由於 Proxylet 不會接觸 Web 內容,閘道的效能也有所增加。因為 Proxylet 不會修改內容或變更資料,使用者可以下載任何類型的內容,例如 targzip 檔案。

配置 Proxylet

如需啟用與配置 Proxylet 的詳細資訊,請參閱第 13 章, 配置 Proxylet


備註 –

如果使用者沒有用來執行 Proxylet 的適當 Java Virtual Machine (JVM),請用瀏覽器連線至 Sun 網站下載 Java Runtime Environment。如果使用者的瀏覽器設定並未包含正確的值,或如果使用者在使用直接代理伺服器而未存取至網際網路,則無法下載 Proxylet。


第 4 章 使用 Rewriter

Secure Remote Access 的 Rewriter 元件可讓使用者透過剖析網頁,經由閘道來存取企業內部網路的網頁。

本章涵蓋下列主題:

Rewriter 簡介

Secure Remote Access 的 Rewriter 元件能讓一般使用者利用修改網頁上的統一資源識別碼 (Uniform Resource Identifier, URI) 參照,以指向閘道從而瀏覽企業內部網路。URI 可定義於任何已註冊名稱空間內封裝名稱的方法,並以該名稱空間為其加標記。最常見的 URI 類別為單一資源定址器 (Uniform Resource Locator, URL)。Rewriter 僅支援 HTTP 或 HTTPS。不論協定的大小寫為何都支援。Rewriter 僅支援相對 URL 中包含反斜線符號。


範例 4–1 重新寫入 URL

http://abc.sesta.com\\index.html 會被重新寫入。

這些 URL 不會被重新寫入:http:\\\\abc.sesta.com http:/abc.com


字元集編碼

HTTP 標準需要 HTTP 標頭或 HTML 中繼標記為網頁指定字元集。但是有時候此資訊沒有辦法使用。字元集必須為已知,如此資料編碼的設定以及資料的顯示才會依照建立的想法進行。

要偵測字元集,請從 Java Enterprise System Accessory CD 安裝 SUNWjchdt 套裝軟體。如果已安裝此產品,Rewriter 將會偵測到它並在需要時使用。


備註 –

使用此產品將會影響效能,因此應該只在需要時才安裝此產品。如需安裝、配置與用法的詳細資訊,請參閱 jcharset_readme.txt


Rewriter 使用方案

使用者試圖經由閘道存取企業內部網路網頁時,即可使用 Rewriter 來順利存取網頁。URLScraper 與閘道會使用 Rewriter。

URLScraper

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)

規則集 DTD:

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

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

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

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

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

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

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

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

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

備註 –

除必要的屬性值不能只有 * 之外,您可使用 * 做為規則值的一部分。會忽略這類規則,但是訊息會記錄在 RuleSetInfo 記錄檔中。如需此記錄檔的資訊,請參閱除錯檔案名稱


XML DTD 範例

本節包含一範例規則集。我們使用第 140 頁的「案例研究」來說明 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>

撰寫規則的步驟

撰寫規則的一般程序如下:

規則集指導方針

建立規則集時,請記住:

定義規則集根元素

規則集根元素具有兩種屬性:

使用遞迴功能

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>

定義以語言為基礎的規則

規則以下列語言為基礎:

HTML 內容的規則

可進一步將網頁上的 HTML 內容分類為屬性、表單或 Applet。同樣地,HTML 內容的規則可分類為:

HTML 內容的屬性規則

此規則可識別需重新寫入值的標籤屬性。屬性值可為簡單的 URL、JavaScript 或 DHTML 內容。例如:

此部分說明下列內容:

屬性規則語法

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

其中,

attributeName 為屬性名稱 (必須的)

tag 是屬性所屬的標籤 (可選,預設為 *,表示任何標籤)

valuePatterns 請參閱在規則中與式樣相符

source 指定定義此屬性的頁面的 URI (可選,預設為 *,表示在任何頁面中)

type 指定值的類型 (可選)。類型可能是:

URL - 簡單 URL (預設值)。

DHMTL - DHTML 內容。此類內容會以標準 HTML 內容的形式顯示,而且用於 Microsoft HTC 格式的檔案。

DJS - JavaScript 內容。所有 HTML 事件處理器,如 onClick 與 onMouseover,其 JavaScript 皆含有 HTML 屬性。

屬性規則範例

假設此網頁的基準 URL 是:

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

網頁內容:

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

規則

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

輸出

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

描述

因為待重新寫入的 URL 已經是一個絕對 URL,因此只會將閘道 URL 前置於此 URL。

DJS 屬性範例

假設此網頁的基準 URL 是:

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

網頁內容:

<Form>

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

</Form>

規則

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

輸出

<Form>

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

</Form>

描述

重新寫入特定網頁內容需要兩個規則。第一個規則可識別 onClick JavaScript 記號。第二個規則可識別需重新寫入的 check 函數參數。在這種情況下,僅會重新寫入第一個參數,因為 paramPatterns 用值 y 取代了第一個參數。

出現 JavaScript 記號的閘道 URL 與網頁的基準 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 則可以包含許多參數。Rewriter 會利用 Applet 的 HTML 定義與規則中指定的值相符,然後修改作為 Applet 參數定義一部分呈現的 URL 值。此取代動作會在伺服器上進行,而非在使用者瀏覽特定網頁時進行。此規則可識別並重新寫入 HTML 內容中的 Applet 及物件標籤的參數。

本節分為下列部分:

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>

描述

將重新寫入 codebase 屬性,因為 <Attribute name="codebase"/>default_gateway_ruleset 中已定義的規則。

所有以 Test 開頭的參數都會被重新寫入。顯示 Applet 碼的網頁基準 URL 及閘道 URL 都會置於 params 標籤的 value 屬性之前。

在規則中與式樣相符

您可以使用 valuePatterns 欄位來與式樣相符,並識別需重新寫入之陳述式的特定部分。

若您指定 valuePatterns 作為規則的一部分,則會重新寫入所有位於符合之樣式後的內容。

請參考下列表單規則範例。

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

其中

source 是顯示表單之 Html 網頁的 URL。

name 為表單名稱。

field 是表單中的欄位,需要重新寫入它的值。

valuePatterns 指出需重新寫入的字串部分。會重新寫入所有出現在 valuePatterns 之後的內容 (可選,預設為 "",表示需重新寫入完整值)

以 valuePatterns 格式指定特殊化字元

您可以透過以反斜線退出特殊化字元的方式來指定它們。例如:

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

在 valuePatterns 中使用萬用字元

您可使用萬用字元星號 (*) 字元來完成用於重新寫入的式樣相符。

valuePatterns 欄位中,您不能僅指定一個 *。因為 * 表示包含所有文字的符合結果,這樣 valuePattern 後沒有文字。因此,Rewriter 沒有可重新寫入的文字。您必須利用其他字串與 * 連用,如 *abc。在這種情況下,即會重新寫入所有位於 *abc 之後的內容。


備註 –

規則中的任何欄位皆可使用萬用字元星號 (*)。但是規則中所有的欄位不能都包含 *。若所有欄位皆包含 *,則會忽略此規則。不會顯示任何的錯誤訊息。


您可以利用 * 或 ** 與顯示在原始陳述式中的分隔字元 (分號或逗號) 連用,以分隔多個欄位。一個星號 (*) 會與所有不需重新寫入的欄位相符,而兩個星號 (**) 則會與所有需重新寫入的欄位相符。

在 valuePatterns 中使用萬用字元列出 * 萬用字元的某些用法範例。

表 4–1 * 萬用字元的使用範例

URL 

valuePatterns 

描述 

url1, url2, url3, url4

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

會重新寫入 url1url3,因為 ** 會指出待重新寫入的部分

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

valuePatterns = "*ABC"

僅會重新寫入 http://host1.sesta.com/dir1.html 部分。所有位於 *ABC 之後的項目皆需重新寫入。

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

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

會重新寫入 dir2dir4url1。需重新寫入的最後一個欄位不必以 ** 表示。

JavaScript 內容的規則

JavaScript 可在多個位置包含 URL。Rewriter 無法直接剖析 JavaScript 與確定 URL 部分。必須撰寫特定規則集以協助 JavaScript 處理器識別及轉譯 URL。

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

變數

變數的一般語法是:

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

視其所持有的值類型而定,JavaScript 變數可細分為 5 種:

URL 變數

變數值是一個可視為 URL 的簡單字串。

本節分為下列部分:

URL 變數語法

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

其中

variableName 為變數名稱。將會重新寫入 variableName 的值 (必須的)

type 為 URL 變數 (必須的,且值必須為 URL)

source 是此 JavaScript 變數所在的網頁的 URI (可選,預設為 *,表示在任何網頁中)

URL 變數範例

假設基準 URL 是:

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

網頁內容

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

規則

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

輸出

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

描述

所有 URL 類型的變數及名稱以 imgsrc 開頭的變數皆會被重新寫入。在輸出的第一行,會前置顯示變數的閘道 URL 與網頁 URL。第二行已包含絕對路徑,因此僅會前置閘道 URL。第三行 var imagsrc2 將不會重新寫入,因為其值並非字串,而是另一個 JavaScript 值。

EXPRESSION 變數

EXPRESSION 變數的右側會有一個表示式。此表示式會產生一個 URL。Rewriter 會將 JavaScript 函數 (psSRAPRewriter_convert_expression) 附加至 HTML 網頁,因為其無法在伺服器上計算這類表示式的值。此函數會將表示式視為參數,並在用戶端瀏覽器中計算所需 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";

描述

psSRAPRewriter_convert_expression 函數會前置於第一行表示式變數 expvar 的右側之前。此函數可處理表示式,並於執行時間重新寫入內容。在第三行中,此值將被重新寫入為簡單 URL。

DHTML (動態 HTML) 變數

這些是含有 HTML 內容的 JavaScript 變數。

本節分為下列部分:

DHTML 語法

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

其中

variableName 是含有 DHTML 內容的 JavaScript 變數的名稱 (必須的)

type 是變數的類型 (必須的,此值必須為 DHTML)

source 是網頁的 URL (可選,預設為 *,表示在任何網頁中)

DHTML 範例

假設此網頁的基準 URL 是:

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

網頁內容

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

規則

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

輸出

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

描述

JavaScript 剖析器會讀取 dhtmlVar 的值作為 HTML 內容,並經由 HTML 剖析器傳送內容。HTML 剖析器會套用符合 href 屬性規則的 HTML 規則,因此 URL 會被重新寫入。

DJS (動態 JavaScript) 變數

這些是含有 JavaScript 內容的 JavaScript 變數。

本節分為下列部分:

DJS 語法

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

其中

variable 是 JavaScript 變數,其值為 javascript。

DJS 範例

假設此網頁的基準 URL 是:

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

網頁內容

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

規則

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

輸出

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

描述

此處必須使用兩個規則。第一個規則可找到動態 JavaScript 變數 dJSVar。此變數的值仍然是 URL 類型的 JavaScript。套用第二個規則來重新寫入此 JavaScript 變數的值。

SYSTEM 變數

這些變數並非由使用者公佈且支援有限。這些變數可用作 JavaScript 標準的一部分。例如,window.location.pathname

本節分為下列部分:

SYSTEM 變數語法

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

其中

variableName 是 JavaScript 系統變數 (必須的,其值可能是與下列式樣相符的值:document.URL、document.domain、location、doument.location、location.pathname、location.href、location.protocol、location.hostname、location.host 與 location.port。所有這些都會位於 generic_ruleset 中。請勿修改這些系統變數規則。)

type 指定系統類型值 (必須的,且值為 DJS)

source 是此網頁的 URI (可選,預設為 *,表示在任何網頁中)

SYSTEM 變數範例

假設此網頁的基準 URL 是:

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

網頁內容

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

規則

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

輸出

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

描述

Rewriter 會找出與規則相符的系統變數,然後前置 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 函數參數,從而指定此參數需要重新寫入。在網頁內容範例中,第一個參數是僅在執行時間中計算其值的表示式。Rewriter 會將 psSRAPRewriter_convert_expression 函數前置於此表示式之前。從而計算此表示式,並且 psSRAPRewriter_convert_expression 函數在執行階段重新寫入輸出。


備註 –

以上範例中,不需將 test1 變數作為 JavaScript 變數規則的一部分。jstest1 的函數規則負責執行重新寫入。


DHTML 參數

其值為 HTML 的函數參數

本機 JavaScript 方法,如會以動態的方式產生 HTML 網頁的 document.write(),歸屬於此種類。

本節分為下列部分:

DHTML 參數語法

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

其中

name 是函數名稱

paramPatterns 指出需重新寫入的參數 (必須的)

y y 的位置會指出需重新寫入的函數參數。上列語法中,僅會重新寫入第一個參數

DHTML 參數範例

假設此網頁的基準 URL 是:

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

網頁內容

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

規則

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

輸出

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

描述

第一個規則指出 document.write 函數中的第一個參數需要重新寫入。第二個規則指出 document.writeln 函數中的第一個參數需要重新寫入。第三個規則是一個簡單 HTML 規則,指出名稱為 href 的所有屬性皆需重新寫入。在範例中,DHTML 參數規則會識別出函數中需重新寫入的參數。然後便套用 HTML 屬性規則,以實際重新寫入識別出的參數。

DJS 參數

其值為 JavaScript 的函數參數。

本節分為下列部分:

DJS 參數語法

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

其中

name 是含有一個 DJS 參數的函數名稱 (必須的)

paramPatterns 指出上列函數中哪一個參數是 DJS (必須的)

y y 的位置會指出需重新寫入的函數參數。上列語法中,僅會重新寫入第一個參數

type 是 DJS (必須的)

source 是網頁的 URI (可選,預設為 *,表示任何 URI)

DJS 參數範例

假設此網頁的基準 URL 是:

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

網頁內容

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

規則

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

輸出

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

描述

第一個規則指出 NavBarMenuItem 函數中的第二個包含 JavaScript 的參數需要重新寫入。在 JavaScript 中,top.location 變數亦需重新寫入。將使用第二個規則來重新寫入此變數。

XML 內容的規則

網頁可能包含 XML 內容,其因此可包含 URL。需重新寫入的 XML 內容可分為兩類:

標記文字

此規則是用於重新寫入標記元素的 PCDATA 或 CDATA。

本節分為下列部分:

標記文字語法

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

其中

tagName 為標記名稱

attributePatterns 是此標記的屬性及值式樣 (可選,表示此標記完全不具屬性)

source 是此 xml 檔案的 URI (可選,預設為 *,表示任何 xml 網頁)

標記文字範例

假設此網頁的基準 URL 是:

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

網頁內容

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

規則

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

輸出

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

描述

網頁內容的第一行包含屬性範例。此網頁內容的第二行不包含具有屬性呼叫名稱且屬性名稱值為 src 的屬性,因此不會執行任何重新寫入的動作。要進行重新寫入,我們亦需具有 <TagText tag="attribute"/>

屬性

XML 屬性的規則與 HTML 的屬性規則類似。其間的差異在於:XML 的屬性規則有大小寫之分,而 HTML 屬性規則則無。這是因為 XML 中建立了區分大小寫的特性,而 HTML 中未建立。

Rewriter 會依據屬性名稱轉譯屬性值。

本節分為下列部分:

屬性語法

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

描述

上列範例中,僅重新寫入第四行,因為其符合規則中所指定的所有條件。請參閱在規則中與式樣相符

Cascading Style Sheet (串接樣式表) 的規則

HTML 網頁中的 Cascading Style Sheet (包含 CCS2) 會被轉譯。沒有任何針對此轉譯而定義的規則,因為 URL 僅出現在 CSS 的 url() 函數與匯入語法中。

WML 的規則

WML 與 HTML 相似,因此會將 HTML 規則套用至 WML 內容。使用 WML 內容的一般規則集。請參閱HTML 內容的規則

使用遞迴功能

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>

使用除錯記錄檔排除故障

要排除 Rewriter 的故障,您需啟用除錯記錄檔。

除錯訊息分類如下:

設定 Rewriter 除錯層級

Procedure設定 Rewriter 除錯層級

  1. 以超級使用者身份登入閘道機器,然後編輯下列檔案:


    gateway-install-root/SUNWam/config/AMConfig-instance-name.properties
  2. 設定除錯層級:


    com.iplanet.services.debug.level=

    除錯層級為:

    error - 只會在除錯檔案中記錄嚴重錯誤。在此種錯誤發生時,Rewriter 通常會停止運作。

    warning - 會記錄警告訊息。

    message - 會記錄所有的除錯訊息。

    off - 不會記錄任何除錯訊息。

  3. AMConfig-instance-name .properties 檔案的下列特性中,指定除錯檔案目錄:


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

    其中 /var/opt/SUNWam/debug 是預設的除錯目錄。

  4. 從終端機視窗重新啟動閘道:


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

除錯檔案名稱

當將除錯層級設定為 message 時,除錯會產生一組檔案。除錯檔案名稱會列出 Rewriter 檔案與其中包含的資訊。

表 4–2 Rewriter 除錯檔案

檔案名稱 

資訊 

RuleSetInfo 

包含已用於重新寫入的所有規則集,皆記錄在此檔案中。 

Original Pages 

包含網頁 URI、resolveURI (若與網頁 URI 不同)、內容 MIME、套用至網頁的規則集、剖析器 MIME 與原始內容。 

與剖析有關的特定錯誤/警告/訊息亦會出現在此檔案中。 

在 message 模式中會記錄完整內容。在 warning 與 error 模式中只會記錄重新寫入期間發生的異常情況。 

Rewritten Pages 

包含網頁 URI、resolveURI (若與網頁 URI 不同)、內容 MIME、套用至網頁的規則集、剖析器 MIME 與已重新寫入的內容。 

當除錯模式設為 message 時,即會儲存這些資訊。 

Unaffected Pages 

包含未經修改的網頁清單。 

URIInfo Pages 

包含已找到及轉譯的 URL。所有其內容與原始資料相同的網頁詳細資訊將記錄至此檔案中。 

記錄的詳細資訊包括:網頁 URI、MIME 與編碼資料、用於重新寫入的 rulesetID 以及剖析器 MIME。 

除了上述檔案之外,Rewriter 會產生一個用於未留存於上述檔案中的其他除錯訊息的檔案。檔案名稱包括兩個部分:第一部分為 pwRewriterpsSRARewriter,第二部分則為使用 portalgateway-profile-name 的副檔名。

除錯檔案會顯示在入口網站或閘道中。這些檔案是位於 AMConfig-instance-name.properties 檔案中指出的目錄。

Rewriter 元件會產生下列檔案組以協助除錯作業:

prefix_RuleSetInfo.extension

prefix_OrginalPages.extension

prefix_RewrittenPages.extension

prefix_UnaffectedPages.extension

prefix_URIInfo.extension

其中

prefix 為用於 URLScraper 用途記錄檔的 psRewriter 或用於閘道用途記錄檔的 psSRAPRewriter

extension 則為用於 URLScraper 用途的 portal 或用於閘道用途的 gateway-profile-name

例如,若利用閘道上的 Rewriter 來轉換網頁並使用預設的閘道設定檔,則除錯作業會產生下列檔案:

psSRAPRewriter_RuleSetInfo.default

psSRAPRewriter_OriginalPages.default

psSRAPRewriter_RewrittenPages.default

psSRAPRewriter_UnaffectedPages.default

psSRAPRewriter_URIInfo.default

psSRAPRewriter.default

工作範例

本節包括:

這些頁面範例位於 portal-server-URL /rewriter 目錄下。您可在套用規則前瀏覽整個頁面,然後經由您的閘道檢視含已重新寫入之輸出的檔案,以查看規則的套用結果。在某些範例中,規則已經是 default_gateway_ruleset 的一部分。在某些範例中,您必須將規則納入 default_gateway_ruleset 中。這一點會在適當之處提及。


備註 –

某些以粗體顯示的陳述式表示其已被重新寫入。


可用的範例如下:

HTML

JavaScript

函數

XML

HTML 內容範例

HTML 屬性範例

Procedure使用 HTML 屬性範例

  1. 您可自下列路徑存取此範例:

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

  2. 請確定您已於閘道服務的 [網域與子網域的代理伺服器] 清單中定義 abc.sesta.comhost1.siroe.com

    若未定義,則會採用直接連接,且不前置閘道 URL。

    您不需將此範例中指定的規則新增至 default_gateway_ruleset 中,因為規則已完成定義。

重新寫入前的 HTML

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

規則

<Attribute name="href"/>

重新寫入後的 HTML

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

// 重新寫入此 URL 是因為 <Attrib name="href"/> 規則已於 default_gateway_ruleset 中加以定義。由於此 URL 是絕對 URL,因此僅會前置閘道 URL。請確定您已於閘道服務的 [網域與子網域的代理伺服器] 清單中定義 abc.sesta.com。否則,會認為是直接連接,而不會前置閘道 URL。

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

// 同樣,host1.siroe.com 需於閘道服務的 [網域與子網域的代理伺服器] 清單中定義。否則,會認為是直接連接,而不會前置閘道 URL。

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

// 由於指定的是相對路徑,因此會前置閘道 URL 與 portal-server-URL (附有所需子目錄)。此連結將無法作用,因為在所提供之範例結構的 HTML 目錄下沒有名為 images 的目錄。

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

// 由於指定的是相對路徑,因此會前置閘道 URL 與 Portal Server URL (附有所需子目錄)。

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

// 由於指定的是相對路徑,因此會前置閘道 URL 與 Portal Server URL (附有所需子目錄)。此連結將無法作用,因為在所提供之範例結構的 Rewriter 目錄下沒有名為 images 的目錄。

Rewriting ends</html>

HTML 動態 JavaScript 記號的範例

此部分討論使用 HTML JavaScript 記號範例

Procedure使用 HTML JavaScript 記號範例:

  1. 您可自下列路徑存取此範例:

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

  2. 將此範例中指定的規則新增至 [重新寫入 JavaScript 來源的規則] 部分的 default_gateway_ruleset 中。

  3. 在 Portal Server 管理主控台的 Portal Server 配置下,編輯 Rewriter 服務中的 default_gateway_ruleset

  4. 從終端機視窗重新啟動閘道:


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

重新寫入前的 HTML

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

規則

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

備註 –

<Function name="URL" name="Check" paramPatterns="y"/> 為 JavaScript 函數規則,並於 JavaScript 函數範例中詳細說明。


重新寫入後的 HTML

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

// 所有敘述是依照此範例重寫。已在每種情況中前置閘道 URL 與 Portal Server URL。這是因為 onAbortonBluronFocusonChangeonClick 的規則都已在 default_gateway_ruleset 檔案中定義。Rewriter 會偵測 JavaScript 記號,並將之傳送至 JavaScript 函數規則中以便進行進一步的處理。此範例中的第二個規則會告知 Rewriter 該重新寫入哪一個參數。

</body>
<br>

Rewriting ends

</html>

HTML 表單範例

Procedure使用表單範例

  1. 您可自下列路徑存取表單範例:

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

  2. 請確定您已於閘道服務的 [網域與子網域的代理伺服器] 清單中定義 abc.sesta.com

    若未定義,則會採用直接連接,且不前置閘道 URL。

  3. 將此範例中指定的規則新增至 [重新寫入 HTML 屬性的規則] 部分的 default_gateway_ruleset 中。

  4. 在 Portal Server 管理主控台的 Portal Server 配置下,編輯 Rewriter 服務中的 default_gateway_ruleset

  5. 從終端機視窗重新啟動閘道:


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

重新寫入前的 HTML 網頁

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

規則

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

重新寫入後的 HTML 網頁

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

// 重新寫入此 URL 是因為已在 default_gateway_ruleset 中將 <Attribute name="action"/> 定義為 HTML 規則的一部分。由於此 URL 應該是絕對 URL,因此僅需前置閘道 URL。請確定您已於閘道服務的 [網域與子網域的代理伺服器] 清單中定義 abc.sesta.com。否則,會認為是直接連接,而不會前置閘道 URL。

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

// 此處的表單名稱為 form1,而欄位名稱則為 name1。上述名稱與規則中指定的表單名稱與欄位名稱相符。規則指出 valuePatterns0|1234|,其符合此陳述式中的 value。因此會重新寫入出現在 valuePattern 之後的 URL。將前置 Portal Server URL 與閘道 URL。請參閱在規則中與式樣相符以取得 valuePatterns 的詳細資訊。

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

// 未重新寫入此 URL 是因為此 name 不符合規則中所指定的 field 名稱。

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

// 重新寫入此 URL 是因為已在預設規則集中將 <Attribute name="action"/> 定義為 HTML 規則的一部分。由於此 URL 應該是絕對 URL,因此僅需前置閘道 URL。

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

// 不重新寫入此 URL 是因為此表單名稱不符合規則中所指定的名稱。

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

HTML Applet 範例

Procedure使用 Applet 範例

  1. 請取得 Applet 類別檔案。RewriteURLinApplet.class 檔案位於下列位置:

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

    出現 Applet 代碼之網頁的基準 URL 為:

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

  2. 將此範例中指定的規則新增至 [重新寫入 HTML 屬性的規則] 部分的 default_gateway_ruleset 中。

  3. 在 Portal Server 管理主控台的 Portal Server 配置下,編輯 Rewriter 服務中的 default_gateway_ruleset

  4. 重新啟動閘道:


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

重新寫入前的 HTML

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

規則

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

重新寫入後的 HTML

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

// 重新寫入此 URL 是因為規則 <Attribute name="codebase"/> 已呈現為 default_gateway_ruleset 檔案的一部份。會前置閘道與 Portal Server URL 以及至 appletcode 目錄的路徑。

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

// 重新寫入此 URL 是因為此網頁的基準 URL 為 rule1.html,且參數名稱符合規則中指定的參數 Test*。由於已將 index.html 指定放置於根層級,因此將直接前置閘道與 Portal Server URL。

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

// 重新寫入此 URL 是因為此網頁的基準 URL 為 rule1.html,且參數名稱符合規則中指定的參數 Test*。將依需要前置路徑。

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

// 重新寫入此 URL 是因為此網頁的基準 URL 為 rule1.html,且參數名稱符合規則中指定的參數 Test*。將依需要前置路徑。

</APPLET>
Rewriting ends
</HTML>

JavaScript 內容範例

JavaScript URL 變數的範例

Procedure使用 JavaScript URL 變數範例

  1. 您可自下列路徑存取此範例:

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

  2. 請確定您已於閘道服務的 [網域與子網域的代理伺服器] 清單中定義 abc.sesta.com

    若未定義,則會採用直接連接,且不前置閘道 URL。

  3. 將此範例中指定的規則新增至 [重新寫入 JavaScript 來源的規則] 部分的 default_gateway_ruleset 中。

  4. 在 Portal Server 管理主控台的 Portal Server 配置下,編輯 Rewriter 服務中的 default_gateway_ruleset

  5. 若您新增此規則,請重新啟動閘道:


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

重新寫入前的 HTML 網頁

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

規則

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

重新寫入後的 HTML 網頁

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

// 上列所有 URL 皆為規則中所指定的 URL 類型且名稱為 imgsrc 的 JavaScript 變數。因此皆會前置閘道與 Portal Server URL。將依需前置位於 Portal Server URL 後的路徑。

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

// 重新寫入此行是因為已於 default_gateway_ruleset 中定義規則 <Attribute name="src"/>

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

JavaScript EXPRESSION 變數範例

Procedure使用 JavaScript EXPRESSION 變數範例

  1. 您可自下列路徑存取此範例:

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

  2. 將此範例中指定的規則新增 (若尚不存在) 至 [重新寫入 JavaScript 來源的規則] 部分的 default_gateway_ruleset 中。

  3. 在 Portal Server 管理主控台的 Portal Server 配置下,編輯 Rewriter 服務中的 default_gateway_ruleset

  4. 若您新增此規則,請重新啟動閘道:


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

重新寫入前的 HTML 網頁

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

規則

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

重新寫入後的 HTML 網頁

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

// Rewriter 會將此陳述式右側識別為 JavaScript EXPRESSION 變數。Rewriter 無法在伺服器端計算出此表示式的值。因此,psSRAPRewriter_convert_expression 函數會被置於此表示式之前。此表示式將於用戶端計算,並視需要重新寫入。

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

// 將使用前一個陳述式之 expvar 的重新寫入值來計算此表示式的值。由於結果為一有效的 URL (範例中此處出現一個圖形),因此連結有效。

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

// Rewriter 會將 expvar 的右側識別為字串表示式。此表示式可於伺服端計算,因此可直接重新寫入。

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

// 將使用前一個陳述式之 expvar 的重新寫入值來計算此表示式的值。由於結果不是有效的 URL (於結果位置中未出現圖形),因此連結無效。

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

JavaScript DHTML 變數的範例

Procedure使用 JavaScript DHTML 變數範例

  1. 您可自下列路徑存取此範例:

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

  2. 請確定您已於閘道服務的 [網域與子網域的代理伺服器] 清單中定義 abc.sesta.com。若未定義,則會採用直接連接,且不前置閘道 URL。

  3. 將此範例中指定的規則新增 (若尚不存在) 至 [重新寫入 JavaScript 來源的規則] 部分的 default_gateway_ruleset 中。在 Portal Server 管理主控台的 Portal Server 配置下,編輯 Rewriter 服務中的 default_gateway_ruleset

  4. 若您新增此規則,請重新啟動閘道:


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

重新寫入前的 HTML 網頁

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

規則

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

重新寫入後的 HTML 網頁

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

// JavaScript DHTML 規則會將 dhtmlVar 的右側識別為動態 HTML 內容。因此會套用 default_gateway_ruleset 檔案中的 HTML 規則。動態 HTML 包含 href 屬性。default_gateway_ruleset 定義規則 <Attribute name="href"/>。因此會重新寫入 href 屬性的值。但是 URL 並非絕對,因此網頁的基準 URL 與所需子目錄會取代相對 URL。最後會前置閘道 URL 以導出最後的重新寫入輸出。

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

// 雖然已附加此網頁的基準 URL,且已前置閘道 URL,但是最後的 URL 卻無效。這是因為初始 URL /../images/test.html 不正確。

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

// 同樣,JavaScript DHTML 規則會將右側識別為動態 HTML 內容,並將之傳送至 HTML 規則。將套用 default_gateway_ruleset 中的 HTML 規則 <Attribute name="href"/>,且已如所示重新寫入陳述式。已前置閘道 URL 與 Portal Server URL。

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

// JavaScript DHTML 規則會識別右側的動態 HTML 內容,並將陳述式傳送至 HTML 規則。將套用 default_gateway_ruleset 中的 <Attribute name="src"/> 規則。由於此 URL 是絕對 URL,因此僅需前置閘道 URL。請確定您已於 [網域與子網域的代理伺服器] 清單中定義 abc.sesta.com 以便重新寫入此 URL。

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

// 重新寫入此行是因為已於 default_gateway_ruleset 中定義規則 <Attribute name="src"/>

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

JavaScript DJS 變數的範例

Procedure使用 JavaScript DJS 變數範例

  1. 您可自下列路徑存取此範例:

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

  2. 請確定您已於閘道服務的 [網域與子網域的代理伺服器] 清單中定義 abc.sesta.com。若未定義,則會採用直接連接,且不前置閘道 URL。

  3. 將此範例中指定的兩個規則新增 (若尚不存在) 至 [重新寫入 JavaScript 來源的規則] 部分的 default_gateway_ruleset 中。在 Portal Server 管理主控台的 Portal Server 配置下,編輯 Rewriter 服務中的 default_gateway_ruleset

  4. 重新啟動閘道:


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

重新寫入前的 HTML 網頁

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

規則

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

重新寫入後的 HTML 網頁

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

// 所有上述陳述式皆會使用閘道及 Portal Server URL 重新寫入。將依需要前置適當的路徑。第一個規則會將 dJSVar 右側識別為動態 JavaScript 變數。然後傳送至第二個規則;第二個規則會將 dJSimgsrc 右側識別為 URL 類型的 JavaScript 變數。將相應進行重新寫入。

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

// 重新寫入此行是因為已於 default_gateway_ruleset 中定義規則 <Attribute name="src"/>

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

JavaScript SYSTEM 變數的範例

Procedure使用 JavaScript SYSTEM 變數範例

  1. 您可自下列路徑存取此範例:

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

  2. 將此範例中指定的規則新增 (若尚不存在) 至 [重新寫入 JavaScript 來源的規則] 部分的 default_gateway_ruleset 中。

  3. 在 Portal Server 管理主控台的 Portal Server 配置下,編輯 Rewriter 服務中的 default_gateway_ruleset

  4. 重新啟動閘道:


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

重新寫入前的 HTML 網頁

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

規則

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

重新寫入後的 HTML

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

// Rewriter 會將 window.location.pathname 識別為 JavaScript SYSTEM 變數。此變數的值無法於伺服器端判定。因此 Rewriter 會在變數前前置 psSRAPRewriter_convert_pathname 函數。此包裝函數可於用戶端判定此變數的值,然後依需要重新寫入。

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

JavaScript URL 函數的範例

Procedure使用 JavaScript URL 函數範例

  1. 您可自下列路徑存取此範例:

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

  2. 將此範例中指定的規則新增 (若尚不存在) 至 [重新寫入 JavaScript 來源的規則] 部分的 default_gateway_ruleset 中。在 Portal Server 管理主控台的 Portal Server 配置下,編輯 Rewriter 服務中的 default_gateway_ruleset

  3. 重新啟動閘道:


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

重新寫入前的 HTML 網頁

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

規則

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

重新寫入後的 HTML 網頁

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

JavaScript EXPRESSION 函數的範例

Procedure使用 JavaScript EXPRESSION 函數範例

  1. 您可自下列路徑存取此範例:

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

  2. 將此範例中指定的規則新增 (若尚不存在) 至重新寫入 JavaScript 來源的規則部分的 default_gateway_ruleset 中。

  3. 使用 Portal Server 管理主控台中的 Rewriter 服務來編輯 default_gateway_ruleset

  4. 重新啟動閘道:


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

重新寫入前的 HTML 網頁

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

規則

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

重新寫入後的 HTML 網頁

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

// 此規則指出函數 jstest1 中類型為 EXPRESSION 的第一個參數需要重新寫入。此表示式的值為 /test/images/test.html。此值會被前置 Portal Server URL 與閘道 URL。

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

JavaScript DHTML 函數的範例

Procedure使用 JavaScript DHTML 函數範例

  1. 您可自下列路徑存取此範例:

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

  2. 將此範例中指定的規則新增 (若尚不存在) 至 [重新寫入 JavaScript 來源的規則] 部分的 default_gateway_ruleset 中。

  3. 在 Portal Server 管理主控台的 Portal Server 配置下,編輯 Rewriter 服務中的 default_gateway_ruleset

  4. 重新啟動閘道:


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

重新寫入前的 HTML 網頁

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

規則

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

重新寫入後的 HTML 網頁

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

// 第一個規則指出 DHTML JavaScript 函數 document.write 的第一個參數需要重新寫入。Rewriter 會將第一個參數識別為一個簡單的 HTML 陳述式。在 default_gateway_ruleset 中的 HTML 規則部分具有規則 <Attribute name="href" />,此規則指出此陳述式需重新寫入。

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

// 第二個規則指出 DHTML JavaScript 函數 document.writeln 的第一個參數需要重新寫入。Rewriter 會將第一個參數識別為一個簡單的 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。其可能是任何字串而 Rewriter 不知如何將之重新寫入。

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

JavaScript DJS 函數的範例

Procedure使用 JavaScript DJS 函數範例

  1. 您可自下列路徑存取此範例:

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

  2. 請確定您已於閘道服務的 [網域與子網域的代理伺服器] 清單中定義 abc.sesta.com

    若未定義,則會採用直接連接,且不前置閘道 URL。

  3. 將此範例中指定的規則新增 (若尚不存在) 至 [重新寫入 JavaScript 來源的規則] 部分的 default_gateway_ruleset 中。在 Portal Server 管理主控台的 Portal Server 配置下,編輯 Rewriter 服務中的 default_gateway_ruleset

  4. 重新啟動閘道:


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

重新寫入前的 HTML 網頁

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

規則

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

重新寫入後的 HTML 網頁

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

// abc.sesta.com 是閘道服務的 [網域與子網域的代理伺服器] 清單中的一項。因此 Rewriter 需要重新寫入此 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 的第二個參數需要重新寫入,但此陳述式中並未進行重新寫入。這是因為 Rewriter 未將第二個參數識別為簡單 HTML。

</script>
</html>

XML 屬性範例

Procedure使用 XML 屬性範例

  1. 您可自下列路徑存取此範例:

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

  2. 將此範例中指定的規則新增 (若尚不存在) 至 [重新寫入 XML 來源的規則] 部分的 default_gateway_ruleset 中。

  3. 在 Portal Server 管理主控台的 Portal Server 配置下,編輯 Rewriter 服務中的 default_gateway_ruleset

  4. 重新啟動閘道:


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

重新寫入前的 XML

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

規則

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

重新寫入後的 HTML

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

// 重新寫入此陳述式是因為其符合規則中所指定的條件。Attribute namehreftagcheckvaluePatterns 1234。valuePatterns 之後所接的字串會被重新寫入。請參閱在規則中與式樣相符以取得 valuePatterns 的詳細資訊。

</body>
Rewriting ends
</html>

案例研究

本節包括某範例郵件用戶端的來源 HTML 網頁。此案例研究並未囊括所有可能的情況與規則。這只是一個範例規則集,用以幫助您為自己的企業內部網路網頁收集規則。

假設狀況

針對此案例研究訂出下列假設狀態:

範例網頁 1

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

描述

描述顯示範例規則集與案例研究之間的對應關係。

表 4–3 範例規則集與案例研究之間的對映

網頁內容 

套用的規則 

Rewriter 輸出 

描述 

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。

此規則告知 Rewriter 搜尋 URL 類型的 g_szVirtualRoot 變數。若網頁中有這類變數,則 Rewriter 會將之轉換為絕對 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。 

此規則告知 Rewriter 搜尋所有名稱為 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。 

此規則告知 Rewriter 搜尋所有名稱為 href 的屬性,然後重新寫入該屬性的值。


備註 –

套用規則集的優先順序為 hostname-subdomain-domain

例如,假設您的以網域為基礎規則集清單中包含下列項目:

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

ruleset3 可套用於 host1 上的所有頁面。

ruleset2 可套用於 eng 子網域中的所有頁面,除了擷取於 host1 中的頁面。

ruleset1 可套用於 sesta.com 網域中的所有頁面,除了擷取於 eng 子網域與 host1 中的頁面。


  1. 按一下 [儲存] 完成作業。

  2. 從終端機視窗重新啟動閘道:


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

Outlook Web Access 的規則集

Secure Remote Access 伺服器支援 Sun Java System Web Server 和 IBM 應用程式伺服器上 Outlook Web Access (OWA) 的 MS Exchange 2000 SP3 以及 MS Exchange 2003 安裝。

Procedure配置 OWA 規則集

  1. 以管理員身份登入 Portal Server 管理主控台。

  2. 選取 [Secure Remote Access] 標籤,並選取要設定屬性的閘道設定檔。

  3. 在 [對映 URI 至規則集] 欄位中,輸入安裝 Exchange 2000 的服務其名稱,隨後輸入 Exchange 2000 Service Pack 4 OWA 規則集。

    例如:


    exchange.domain.com|exchange_2000sp3_owa_ruleset.

使用公用資料夾

在 Exchange 端,「公用資料夾」被配置為使用 NTLM 授權。必須將它變更為使用 HTTP Basic Authorization。

要執行此作業,請至 Exchange 伺服器,選取 [控制台] -->[系統管理工具],然後開啟 [網際網路資訊服務]。

在 [預設網站] 下,有一個名為 [公用] 的「公用資料夾」標籤。按一下滑鼠右鍵,然後選取 [內容]。按一下 [目錄安全性] 標籤。在 [匿名存取及認證] 控制台上,選取 [編輯...]。消取選取所有其他選項,僅勾選 [Basic Authentication]。

6.x 與 3.0 規則集對映

下表列出 Secure Remote Access 伺服器 Rewriter 規則與前版 Portal Server 產品的對映關係。

表 4–4 SP3 規則對映

Rewriter 6.0 DTD 元素 

Rewriter 3.0 清單方塊名稱 

HTML 內容的規則

 

屬性 - URL 

重新寫入 HTML 屬性 

屬性 - DJS 

重新寫入包含 JavaScript 的 HTML 屬性 

表單 

重新寫入表單輸入標記清單 

Applet 

重新寫入 Applet/物件參數值清單 

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 文件的屬性值 

標記文字 

重新寫入 XMl 文件的文字資料 

CSS 內容的規則

 

不需使用規則。依預設,所有 URL 皆會被轉譯。 

 

WML 內容的規則

 

未定義任何規則。按 HTML 處理 WML,並會套用 HTML 規則。 

 

WMLScript 內容的規則

 
   

不支援 WML 程序檔 

 

第 5 章 使用 NetFile

本章說明 NetFile 及其作業。要配置 NetFile,請參閱第 14 章, 配置 NetFile

NetFile 簡介

NetFile 是一個檔案管理應用程式,可以讓使用者存取並操作遠端檔案系統和目錄。

Secure Remote Access 的 NetFile 元件以 Java2 Applet 的形式提供。Java2 applet 有比較好的介面,同時新增了存取的便利性。

NetFile 提供了下列的主要功能:

支援檔案存取協定

NetFile 允許使用 FTP, NFS 與 jCIFS (Microsoft Windows) 協定存取遠端系統。其中包含下列檔案存取協定功能:


備註 –

如果伺服器在非標準的連接埠上執行,連線會失敗。


表 5–1 檔案系統和支援的協定

檔案系統/協定 

平台 

FTP 

在 Novell Netware 上的 Novell FTP 5.1 Server 

在 Win NT 4.0 上的 MS FTP Server 4.0 

在 Win NT 2000 上的 MS FTP Server 5.0 

Solaris FTP Server 

WU_FTP 2.6.1 

ProFTPD 1.2.8 

vsFTPd 1.2.0 

NFS 

Solaris 2.6 和更高版本 

jCIFS 

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


備註 –

要使用 NetFile 將檔案上傳至 ProFTPD 伺服器,需要在執行 ProFTPD 伺服器的主機中的 proftpd.conf 檔案中,將「AllowStoreRestart」設定為「on」。

對 Novell Netware 的支援,僅能透過 FTP 伺服器而非透過本機存取。

要存取 Microsoft Windows (SMB/CIFS) 檔案系統,必須將 jCIFS 安裝於 Portal Server。jCIFS 是實作 CIFS/SMB 網路協定的「開放原始碼」的用戶端程式庫。


Procedure 建立 NetFile 策略

  1. 以管理員身份登入 Portal 管理主控台。

  2. 選取 [Secure Remote Access] 標籤並選取 [NetFile] 標籤。

  3. 從 [選取 DN] 下拉式方塊中選取 [組織]/[角色]/[使用者]。

  4. 將權限設定為存取/拒絕主機與服務。

  5. 按一下 [儲存]。

  6. 重新啟動閘道。

第 6 章 使用 Netlet

本章會介紹如何使用 Netlet 在使用者遠端桌面以及在您的企業內部網路中執行應用程式的伺服器之間,以安全的方式執行應用程式。要配置 Netlet,請參閱第 11 章, 配置 Netlet

本章包含下列章節:

Netlet 簡介

Sun Java System Portal Server 軟體使用者可能希望在他們的遠端桌面上,以安全的方式執行最常使用或特定於公司的應用程式。在您的平台上設定 Netlet 之後,您就可以安全存取這些應用程式。

Netlet 可讓使用者透過不安全的網路,例如網際網路,安全地執行 一般 TCP/IP 服務。您可執行 TCP/IP 應用程式 (如 Telnet 和 SMTP)、HTTP 應用程式以及任何使用固定連接埠的應用程式。

如果應用程式是以 TCP/IP 為基礎或使用固定的連接埠,您可以在 Netlet 上執行應用程式。


備註 –

只有在使用 FTP 時才支援動態連接埠。要使用 Microsoft Exchange,請使用 OWA (Outlook Web Access)。

請確定通知您的使用者在使用 Netlet 時,停用他們瀏覽器中的快顯式阻擋程式選項。


Netlet 元件

Netlet 所用的不同元件會顯示於 Netlet 元件

圖 6–1 Netlet 元件

Netlet 元件

位於 localhost 上的偵聽連接埠

此為用戶端機器上 Netlet applet 偵聽的連接埠。用戶端機器為 localhost。

Netlet Applet

Netlet applet 負責在遠端用戶端機器和企業內部應用程式 (例如 Telnet、Graphon 或 Citrix) 之間設定加密的 TCP/IP 通道。Applet 會將封包加密並將它們傳送至閘道,並將來自閘道的回應封包解密,然後將它們傳送至本機的應用程式。

對於靜態規則,當使用者登入入口網站時,會自動下載 Netlet applet。對於動態規則,會在使用者在相對應的動態規則連結上按一下時,下載 applet。請參閱規則類型以取得靜態與動態規則的詳細資訊。

要在 Sun Ray 環境中執行 Netlet,請參閱在 Sun Ray 環境中執行 Netlet

Netlet 規則

Netlet 規則會將需要在用戶端機器上執行的應用程式映射至相應的目標主機。這表示 Netlet 只會在已傳送至連接埠 (於 Netlet 規則中定義) 的封包上運作。這可確保取得較大的安全性。

作為管理員,您需要為 Netlet 的功能運作配置一些規則。這些規則指定了各種詳細信息,例如要使用的加密、要呼叫的 URL、要下載的 applet、目標連接埠以及目標主機。當用戶端機器上的使用者透過 Netlet 提出請求時,這些規則會協助確定如何建立連線。請參閱定義 Netlet 規則以取得詳細資訊。

Netlet 提供者

此為 Netlet 的 UI 元件。提供者允許使用者透過 Portal Server 桌面配置必要的應用程式。會在提供者中建立連結,而使用者按一下連結以執行必要的應用程式。使用者也可以將桌面中動態規則的目標主機指定為 Netlet 提供者。請參閱定義 Netlet 規則

Netlet 代理伺服器 (選擇性)

閘道可確保為遠端用戶端機器以及閘道之間提供一條安全通道。Netlet 代理伺服器為選用選項,您可以在安裝時選擇不安裝此代理伺服器。如需 Netlet 代理伺服器的資訊,請參閱使用 Netlet 代理伺服器

Netlet 使用方案

使用 Netlet 將會順序發生下列事件:

  1. 遠端使用者登入至 Portal Server 桌面。

  2. 如果已經為使用者、角色或組織定義靜態 Netlet 規則,則將會自動下載 Netlet applet 至遠端用戶端。

    如果已經為使用者、角色或組織定義動態規則,則使用者需要在 Netlet 提供者中配置必要的應用程式。當使用者按一下 Netlet 提供者中的應用程式連結時,將會下載 Netlet applet。請參閱定義 Netlet 規則以取得靜態與動態規則的詳細資訊。

  3. Netlet 會偵聽在 Netlet 規則中定義的本機連接埠。

  4. Netlet 會通過 Netlet 規則中指定的連接埠,設定遠端用戶端與主機之間的通道。

使用 Netlet

為了使 Netlet 在運作時能夠符合不同組織中各種使用者的需要,您必須執行下列動作:

  1. 依據使用者需求確定是否需要建立靜態或動態規則。請參閱規則類型

  2. 從 Portal Server 管理主控台配置 Netlet 服務的選項。如需配置 Netlet 的資訊,請參閱第 11 章, 配置 Netlet

  3. 確定規則是否以組織、角色或使用者為基礎,並視需要在每個層級中做出修改。如需組織、角色和使用者的詳細資訊,請參閱「Portal Server 管理指南」。


    備註 –

    請勿本地化在 srapNetletServlet.properties 檔案中的框架集參數的值。


從遠端主機下載 Applet

偶爾 URL 會傳回需要從遠端主機取得的內嵌 applet 之頁面。然而 Java 的安全性不允許 applet 與非其下載來源的主機進行通訊。要允許 applet 透過本機網路埠與閘道通訊,您必須核取 Access Manager 管理主控台上的 [下載 Applet] 欄位並指定以下語法:

local-port:server-host:server-port

其中

local-port 是 Netlet 偵聽來自 applet 流量的本機連接埠

server-host 是下載 applet 之處

server-port 是用來下載 applet 的連接埠

定義 Netlet 規則

Netlet 配置是 Netlet 規則所定義的,這些規則使用 [Secure Remote Access] 配置標籤下的 Portal Server 管理主控台配置。可為組織、角色或使用者配置 Netlet 規則。如果 Netlet 規則用於角色或使用者,請在選取組織之後選取想要的角色或使用者。


注意 – 注意 –

Netlet 規則不支援多位元組輸入。請勿在 Netlet 規則中的任何欄位中指定多位元組字元。

Netlet 規則中不能包含任何高於 64000 的連接埠號。


定義 Netlet 規則會列出 Netlet 規則中的欄位。

表 6–1 Netlet 規則中的欄位

參數 

描述 

值 

規則名稱 

指定此 Netlet 規則的名稱。您需要為每個規則指定唯一的名稱。如此當您在定義使用者存取特定規則時將會非常有用。 

 

加密密碼 

定義加密密碼,或是指定使用者可從中選擇的密碼清單。 

您選取的密碼將會在 Netlet 提供者中以清單的形式出現。使用者可以從清單中選擇需要的密碼。 

預設 - 會使用 Netlet 管理主控台中指定的 [預設 VM 原生密碼] 和 [預設 Java Plugin 密碼]。 

遠端應用程式 URL 

指定當使用者按一下 Netlet 提供者中的相關連結時,瀏覽器所開啟的 URL。瀏覽器會開啟應用程式的視窗,並連接至稍後在規則中指定的本機連接埠號的 localhost

您需要指定一個相對的 URL。 

Netlet 規則所呼叫之應用程式的 URL。例如,telnet://localhost:30000

如果應用程式使用 applet 來呼叫應用程式,則指定一個 URL。 

null- 如果應用程式不是由 URL 啟動或由桌面控制,請設定此值。對於不以網路為基礎的應用程式而言,該項通常為 true。

啟用下載 Applet 

指出是否需要為此規則下載 applet。 

  • Client Port 表示用戶端上的目標連接埠。此連接埠必須與預設的回送連接埠不同。為每個規則指定唯一的本機連接埠

  • Server Host 是會從該處下載 applet 的伺服器名稱。

  • Server Port 代表伺服器上用來下載 applet 的連接埠。

    如果要下載 applet,而且未指定伺服器,則會從 Portal Server 主機下載 applet。

啟用延伸階段作業 

此將控制 Netlet 為使用中時 Portal Server 階段作業的閒置逾時。 

僅在 Netlet 為使用中且入口網站應用程式的其餘部分為閒置時,選取此核取方塊以保持入口網站階段作業為使用中。根據預設,不會選取此選項。 

將本機連接埠對映至目標伺服器連接埠 

本機連接埠 

Netlet 偵聽之用戶端上的連接埠。 

local-port 的值必須唯一。您不能夠在一個以上的規則中指定某特定的連接埠號。

如果您要為多個連線指定多個主機,請指定多個本機連接埠。請參閱包含多個主機連線的靜態規則以取得語法。

對於 FTP 規則,本機連接埠值必須為 30021。 

目標主機 

Netlet 偵聽之用戶端上的連接埠。 

Netlet 連線的收件者。 

host - 接收 Netlet 連線的主機名稱。此欄位用於靜態規則。使用簡單的主機名稱 (例如 siroe) 或完全合格的 DNS 式主機名稱 (例如 siroe.mycompany.com)。因下列原因指定多個主機:

local-port 的值必須唯一。您不能夠在一個以上的規則中指定某特定的連接埠號。

如果您要為多個連線指定多個主機,請指定多個本機連接埠。請參閱包含多個主機連線的靜態規則以取得語法。

對於 FTP 規則,本機連接埠值必須為 30021。 

與每個指定主機建立連線。您需要為每個指定的主機指定相對應的用戶端以及目標連接埠。請參閱包含多個主機連線的靜態規則以取得語法。

嘗試連接至指定主機清單中任何可用的主機。請參閱選擇多個主機的靜態規則以取得語法。

TARGET - 在語法中指定 TARGET 的規則為動態規則。TARGET 表示一般使用者能夠在桌面的 Netlet 提供者中指定一台或多台必要的目標主機。

在單個規則中,不可以同時有靜態主機和 TARGET。 

目標連接埠 

目標主機上的連接埠 

除了主機與目標主機以外,您必須指定目標連接埠。 

您可以在有多個目標主機的情況下,指定多個目標連接埠。以下列格式指定多個連接埠:port1+port2+port3-port4+port5

連接埠號之間的加號 (+) 指出用於單一目標主機的替代連接埠。 

連接埠號之間的減號 (-) 為不同目標主機連接埠號的分隔符號。 

Netlet 在此會嘗試依序使用 port1port2port3 連接至指定的第一台目標主機。如果此項操作失敗,Netlet 會嘗試以 port4port5 依次連接至第二台主機。

您只可以為靜態規則配置多個連接埠。 

閘道要從 Portal Server 取得階段作業通知時,新增下列指令行:

com.iplanet.am.jassproxy.trustAllServerCerts=true

至下列的特性檔中

Portal Server 上的 /etc/opt/SUNWam/config/AMConfig.instance-name .properties

規則類型

根據規則中指定目標主機的方式,Netlet 規則類型有兩種。

靜態規則

靜態規則會指定目標主機做為規則的一部分。如果您建立一項靜態規則,使用者將無法指定需要的目標主機。在下列範例中,sesta 為目標主機。

規則名稱 

加密密碼 

URL 

啟用下載 Applet 

啟用延伸階段作業 

將本機連接埠對映至目標伺服器連接埠 

ftpstatic 

SSL_RSA_WITH_RC 4_128_MD5

空 

false 

true 

  • 本機連接埠:30021

  • 目標主機:sesta

  • 目標連接埠:21

您可以為靜態規則配置多個目標主機和連接埠。請參閱包含多個主機連線的靜態規則以取得範例。

動態規則

在動態規則中,不會將目標主機指定為規則的一部分。使用者可以在 Netlet 提供者中指定必要的目標主機。在下列範例中,TARGET 為目標主機的萬用字元。

規則名稱 

加密密碼 

遠端應用程式 URL 

啟用下載 Applet 

啟用延伸階段作業 

將本機連接埠對映至目標伺服器連接埠 

ftpdynamic 

SSL_RSA_WIT H_RC4_128_MD5

空 

選取核取方塊 

選取核取方塊 

  • 本機連接埠:30021

  • 目標主機:TARGET

  • 目標連接埠:21

加密密碼

根據加密密碼,可進一步將 Netlet 規則依如下分類:

規則名稱 

加密密碼 

遠端應用程式 URL 

啟用下載 Applet 

啟用延伸階段作業 

將本機連接埠對映至目標伺服器連接埠 

Telnet 

SSL_RSA_WITH_RC4 _128_SHA

空 

選取核取方塊 

選取核取方塊 

  • 本機連接埠:30000

  • 目標主機:TARGET

  • 目標連接埠:23

 

SSL_RSA_WITH_RC4 _128_MD5

       


備註 –

雖然 Portal Server 主機可能已經啟用不同的密碼,但是使用者僅能從配置為 Netlet 規則部分的清單中選擇。


請參閱支援的密碼以取得 Netlet 所支援的密碼的清單。

規則名稱 

加密密碼 

遠端應用程式 URL 

啟用下載 Applet 

啟用延伸階段作業 

將本機連接埠對映至目標伺服器連接埠 

Telnet 

SSL_RSA_WITH_RC4_128_MD5

空 

選取核取方塊 

選取核取方塊 

  • 本機連接埠:30000

  • 目標主機:TARGET

  • 目標連接埠:23

請參閱支援的密碼以取得 Netlet 支援的密碼的清單。

支援的密碼

支援的密碼列出 Netlet 支援的密碼。

表 6–2 支援的密碼清單

密碼 

原生 VM 密碼

KSSL_SSL3_RSA_WITH_3DES_EDE_CBC_SHA 

KSSL_SSL3_RSA_WITH_RC4_128_MD5 

KSSL_SSL3_RSA_WITH_RC4_128_SHA 

KSSL_SSL3_RSA_EXPORT_WITH_RC4_40_MD5 

KSSL_SSL3_RSA_WITH_DES_CBC_SHA 

Java Plugin 密碼

SSL_RSA_WITH_3DES_EDE_CBC_SHA 

SSL_RSA_WITH_RC4_128_MD5 

SSL_RSA_WITH_RC4_128_SHA 

SSL_RSA_EXPORT_WITH_RC4_40_MD5 

SSL_RSA_WITH_DES_CBC_SHA 

SSL_RSA_WITH_NULL_MD5 

TLS_RSA_WITH_AES_128_CBC_SHA 

TLS_RSA_WITH_AES_256_CBC_SHA 

向下相容性

先前的 Portal Server 版本並不支援將密碼作為 Netlet 規則的一部分。為了向下相容不含密碼的現有規則,規則會使用預設的密碼。不含密碼的現有規則如下:

規則名稱 

加密密碼 

遠端應用程式 URL 

啟用下載 Applet 

啟用延伸階段作業 

將本機連接埠對映至目標伺服器連接埠 

Telnet 

 

telnet://localhost:30000

請勿選取核取方塊 

選取核取方塊 

  • 本機連接埠:30000

  • 目標主機:TARGET

  • 目標連接埠:23

將被解譯為:

規則名稱 

加密密碼 

遠端應用程式 URL 

啟用下載 Applet 

啟用延伸階段作業 

將本機連接埠對映至目標伺服器連接埠 

Telnet 

預設密碼 

telnet://localhost:30000

請勿選取核取方塊 

選取核取方塊 

  • 本機連接埠:30000

  • 目標主機:TARGET

  • 目標連接埠:23

這類似於 [加密密碼] 欄位已選擇為 [預設] 的 [管理員配置的規則]。


備註 –

Netlet 規則無法包含任何大於 64000 的連接埠號碼。


Netlet 規則範例

本節包括一些 Netlet 規則的範例,以說明 Netlet 的語法。

基本靜態規則

本規則支援從用戶端至機器 sesta 的 Telnet 連線。

規則名稱 

加密密碼 

遠端應用程式 URL 

下載 Applet 

延伸式階段作業 

將本機連接埠對映至目標伺服器連接埠 

myrule 

SSL_RSA_WITH_RC4_128_MD5

空 

請勿選取核取方塊 

true 

  • 本機連接埠:1111

  • 目標主機:sesta

  • 目標連接埠:23

其中

myrule 為規則的名稱。

SSL_RSA_WITH_RC4_128_MD5 表示要使用的密碼。

null 表示此應用程式不是由 URL 所呼叫或透過桌面執行。

false 表示用戶端並不會下載 applet 以執行此應用程式。

true 表示當 Netlet 連線在使用中的情況下 Portal Server 不應逾時。

1111 為用戶端上的連接埠,Netlet 會在此偵聽來自目標主機的連線請求。

sesta 是 Telnet 連線上收件者主機的名稱。

23 是目標主機上用於連線的連接埠號,在本例中即為已知的 Telnet 連接埠。

桌面 Netlet 提供者並不會顯示連結,但是 Netlet 會自動啟動與偵聽指定的連接埠 (1111)。指示使用者啟動用戶端軟體 - 此情形中為連接至 localhost 的 Telnet 階段作業。

例如,如果要啟動 Telnet 階段作業,用戶端需要在終端機 UNIX 指令行中鍵入下列字元:


telnet localhost 1111

包含多個主機連線的靜態規則

本規則支援從用戶端至兩台機器,即 sestasiroe 的 Telnet 連線。

規則名稱 

加密密碼 

遠端應用程式 URL 

啟用下載 Applet 

啟用延伸階段作業 

將本機連接埠對映至目標伺服器連接埠 

myrule 

SSL_RSA_WITH_RC4_128_MD5

空 

請選取核取方塊 

選取核取方塊 

  • 本機連接埠:1111–1234

  • 目標主機:sesta-siroe

  • 目標連接埠:23

其中

23 是目標主機上用於連線的連接埠號碼 – Telnet 的保留連接埠。

1111 為用戶端上的連接埠,Netlet 會在此偵聽來自第一個目標主機 sesta 的連線請求。

1234 為用戶端上的連接埠,Netlet 會在此偵聽來自第二個目標主機 siroe 的連線請求。

此規則中的前六個欄位與基本靜態規則中的相同。差別在於有三個欄位用於識別第二個目標主機。

當您新增其他目標至規則時,必須為每個新目標主機新增三個欄位:local portdestination hostdestination port


備註 –

您可以有多組此三個欄位,以描述與每個目標主機的連線。如果遠端用戶端是以 UNIX 為基礎,則不可以使用低於 2048 的偵聽連接埠號,原因是數字較低的連接埠將會受到限制,並且您必須是超級使用者才能夠啟動偵聽程式。


此規則的作用與先前的規則相同。Netlet 提供者並不顯示任何連結,但是 Netlet 會自動在指定的兩個連接埠 (1111 和 1234) 上啟動與偵聽。使用者必須啟動用戶端軟體 (在此案例中是連線至連接埠 1111 上的 localhost,或連接埠 1234 上的 localhost 的 Telnet 階段作業) 以連線至第二個範例中的主機。

選擇多個主機的靜態規則

使用此規則以指定多個替代主機。如果與規則中第一個主機的連線失敗,Netlet 會嘗試連接指定的第二個主機,以此類推。

規則名稱 

加密密碼 

遠端應用程式 URL 

啟用下載 Applet 

啟用延伸階段作業 

將本機連接埠對映至目標伺服器連接埠 

gojoe 

SSL_RSA_WITH_RC4_128_MD5

/gojoe.html 

  • 用戶端連接埠:8000

  • 伺服器主機:gojoeserver

  • 伺服器連接埠:8080

選取核取方塊 

  • 本機連接埠:10491

  • 目標主機:siroe+sesta

  • 目標連接埠:35+26+491-35+491

其中

10491 為用戶端上的連接埠,Netlet 會在此偵聽來自目標主機的連線請求。

Netlet 會嘗試以相同順序連線至連接埠 3526491 上的 siroe,視何者可用而定。

如果無法建立與 siroe 的連線,Netlet 會嘗試以相同順序連線至連接埠 35491 上的 sesta

主機之間的加號 (+) 表示替代的主機。

連接埠號之間的加號 (+) 指出用於單一目標主機的替代連接埠。

連接埠號之間的減號 (-) 為不同目標主機連接埠號的分隔符號。


備註 –

會按次序連線至鏈接中所提供的主機。例如,如果規則是 siroe+ sesta,則會先嘗試 siroe。如果連線失敗,則會嘗試連線至 sesta。如果規則中先列出的主機無法在使用中的網路實際使用,則連線至下一個可用主機的時間會隨著規則中的不可用主機數增加而增加。


呼叫 URL 的動態規則

此規則可以讓使用者配置必要的目標主機,讓使用者可以通過 Netlet 遠程登入不同主機。

規則名稱 

加密密碼 

遠端應用程式 URL 

啟用下載 Applet 

啟用延伸階段作業 

將本機連接埠對映至目標伺服器連接埠 

myrule 

SSL_RSA_WITH_RC4_128_MD5

telnet://localhost:30000 

請勿選取核取方塊 

選取核取方塊 

  • 本機連接埠:30000

  • 目標主機:TARGET

  • 目標連接埠:23

其中

myrule 為規則的名稱。

SSL_RSA_WITH_RC4_128_MD5 表示要使用的密碼。

telnet://localhost:30000 為規則所呼叫的 URL。

false 表示將不會下載任何 applet。

Extend Session(true) 表示當 Netlet 連線在使用中的情況下 Portal Server 不應逾時。

30000 為用戶端上的連接埠,Netlet 會在此偵聽此規則的連線需求。

TARGET 表示使用 Netlet 提供者的使用者需要配置的目標主機。

23 是 Netlet 開啟的目標主機上的連接埠,在本例中為已知的 Telnet 連接埠。

Procedure在新增規則之後執行 Netlet

在新增規則之後,使用者必須完成某些步驟,使得 Netlet 能夠如預期般執行。使用者需要在用戶端執行下列動作:

  1. 在標準 Portal Server 桌面的 Netlet 提供者區段中,按一下 [編輯]。

    新的 Netlet 規則會列在 [新增新目標] 區段中的 [規則名稱] 底下。

  2. 變更規則名稱,然後鍵入目標主機的名稱。

  3. 儲存變更。

    使用者會返回桌面,此時您可以在 Netlet 提供者區段中看見此新連結。

  4. 按一下新連結。

    會啟動一個新的瀏覽器,並進至 Netlet 規則中所提供的 URL。


    備註 –

    透過重複上述步驟,您可以在相同的規則中新增一個以上的目標主機。只有最後選取的連結為使用中。


下載 Applet 的動態規則

本規則定義從用戶端至動態配置的主機之間的連線。規則會從 applet 所在的伺服器上將 GO-Joe applet 下載至用戶端。

規則名稱 

加密密碼 

遠端應用程式 URL 

啟用下載 Applet 

延伸式階段作業 

將本機連接埠對映至目標伺服器連接埠 

gojoe 

SSL_RSA_WITH_RC4_128_MD5

/gojoe.html 

  • 用戶端連接埠:8000

  • 伺服器主機:gojoeserver

  • 伺服器連接埠:8080

選取核取方塊 

  • 本機連接埠:3399

  • 目標主機:TARGET

  • 目標連接埠:58

其中

gojoe 是規則的名稱。

SSL_RSA_WITH_RC4_128_MD5 表示要使用的密碼。

例如 /gojoe.html 是包含 applet 的 HTML 頁面的路徑,路徑應與部署入口網站的 Web 容器文件根是相對的。

8000:server:8080 表示連接埠 8000 是用戶端上用來接收 applet 的目標連接埠,gojoeserve 是提供 applet 的伺服器名稱,而 8080 則是伺服器上的連接埠,applet 則從該處下載。

Extended Session(true) 表示當 Netlet 連線在使用中的情況下 Portal Server 不應逾時。

3399 為用戶端上的連接埠,Netlet 會在此偵聽此類型的連線請求。

TARGET 表示使用 Netlet 提供者的使用者需要配置的目標主機。

58 為 Netlet 所開啟的目標主機上的連接埠,在本例中為 GoJoe 的連接埠。連接埠 58 為目標主機偵聽其本身通訊的連接埠。Netlet 會將資訊從新的 applet 傳送至此連接埠。

Netlet 規則範例

Netlet 規則範例列出某些共用應用程式的範例 Netlet 規則。

表格中有 7 欄,與 Netlet 規則的下列欄位相對應。規則名稱、URL、下載 Applet、本機連接埠、目標主機、目標連接埠。最後一欄包含規則的說明。


備註 –

Netlet 規則範例不會列出 Netlet 規則的 [密碼] 與 [延伸階段作業] 欄位。假設提供的範例中這兩個欄位是「SSL_RSA_WITH_RC4_128_MD5」和「true」。


表 6–3 Netlet 規則範例

規則名稱 

遠端應用程式 URL 

啟用下載 Applet 

將本機連接埠對映至目標伺服器連接埠 

描述 

IMAP

空 

請勿選取核取方塊 

  • 本機連接埠:10143

  • 目標主機:imapserver

  • 目標連接埠:143

用戶端中的 Netlet local port 不需要和伺服器端上的 destination port 相同。如果您使用任何標準 IMAP 和 SMTP 連接埠以外的連接埠,請確定已將用戶端配置為可在不同於標準連接埠的連接埠上進行連接。

Solaris 用戶端使用者除非是以超級使用者的身份來執行,否則無法連接至低於 1024 的連接埠號。 

SMTP

空 

請勿選取核取方塊 

  • 本機連接埠:10025

  • 目標主機:smtpserver

  • 目標連接埠:25

 

Lotus Web 用戶端

空 

請勿選取核取方塊 

  • 本機連接埠:80

  • 目標主機:lotus-server

  • 目標連接埠:80

本規則會告知 Netlet 偵聽連接埠 80 上的用戶端,並連接至 lotus 伺服器-連接埠 80 上的伺服器。Lotus Web Client 的一個需求是用戶端偵聽連接埠必須與伺服器連接埠相符。 

Lotus Notes 非 Web 用戶端

空 

請勿選取核取方塊 

  • 本機連接埠:1352

  • 目標主機:lotus-domino

  • 目標連接埠:1352

利用此規則,Lotus Notes 用戶端可以透過 Netlet 連接至 Lotus Domino 伺服器。可確保當用戶端嘗試連接至伺服器時,它一定不會指向 localhost 作為伺服器名稱。它必須指向 Lotus Domino 伺服器實際的伺服器名稱。伺服器名稱必須與伺服器的系統名稱相同。在使用 Netlet 時,用戶端必須將該名稱解析為 127.0.0.1。實現這個動作的方法有兩種:

  • 將伺服器名稱設定為指向用戶端主機表中的 127.0.0.1

  • 將指向 127.0.0.1 的伺服器名稱的 DNS 項目匯出。

    伺服器名稱必須和在設定期間用來配置 Domino 伺服器的伺服器名稱相同。

Microsoft Outlook 與 Exchange Server

這個無法作用於 Windows NT、2000 與 XP。透過 Windows NT、2000 與 XP 的 Rewriter 使用 Outlook Web Access。

空 

請勿選取核取方塊 

  • 本機連接埠:135

  • 目標主機:exchange

  • 目標連接埠:135

此規則可告知 Netlet 偵聽用戶端上的連接埠 135,並連接至連接埠 135 上的伺服器 exchange。Outlook 用戶端會使用此連接埠與 Exchange 伺服器嘗試初始連絡,並決定與伺服器溝通所使用的後續連接埠。

在用戶端機器上: 

  • 使用者必須將已經在 Outlook 用戶端中配置的 Exchange 伺服器的主機名稱變更為 localhost。此選項的位置會因為 Outlook 的版本而有所差異。

  • 使用者必須使用主機檔案將 Exchange 伺服器的主機名稱 (單一和完全合格) 映射至 IP 位址 127.0.0.1

  • 在 Windows 95 或 98 中,檔案位於 \\Windows\\Hosts

  • 在 Windows NT4 中,檔案位於 \\WinNT\\System32\\drivers\\etc\\Hosts

    項目的外觀如下:

    127.0.0.1 exchange exchange.company.com

    Exchange 伺服器會將它自己的名稱傳回 Outlook 用戶端。此項映射可確保 Outlook 用戶端是使用 Netlet 用戶端連接回伺服器。

FTP

空 

請勿選取核取方塊 

  • 本機連接埠:30021

  • 目標主機:your-ftp_server.your-domain

  • 目標連接埠:21

您可以使用受控制的一般使用者帳號提供 FTP 服務至單一的 FTP 伺服器。如此可確保遠端的 FTP 可從一般使用者系統安全傳輸至單一位置。如果沒有使用者名稱,FTP URL 會被解譯為匿名的 FTP 連線。 

必須將連接埠 30021 定義為您 Netlet FTP 規則的本機連接埠。

使用 Netlet 連線會支援動態 FTP。 

Netscape 4.7 郵件用戶端

空 

請勿選取核取方塊 

  • 本機連接埠:30143、30025。

  • 目標主機:TARGET

  • 目標連接埠:10143

在 Netscape 用戶端中,使用者需要: 

用於 IMAP 或內送郵件的 localhost:30143

用於 SMTP 或外送郵件的 localhost:30025

Graphon 

third_party/xsession_start.html 

選取核取方塊 

  • 本機連接埠:10491

  • 目標主機:TARGET

  • 目標連接埠:491

這是用於透過 Netlet 存取 Graphon 的規則。xsession_start.html 與 Graphon 連結。

Citrix 

third_party/citrix_start.html 

選取核取方塊 

  • 本機連接埠:1494

  • 目標主機:TARGET

  • 目標連接埠:1494

這是用於透過 Netlet 存取 Citrix 的規則。citrix_start.html 與 Citrix 連結。

RemoteControl 

third_party/pca_start.html 

選取核取方塊 

  • 本機連接埠:5631

    5632

  • 目標主機:TARGET

    TARGET

  • 目標連接埠:5631

    5632

這是用於透過 Netlet 存取「遠端控制」的規則。pca_start.html 與「遠端控制」連結。

Netlet 記錄資訊

netlet applet 或 jws 的用戶端記錄會顯示於用戶端的 java 主控台上。

netlet 的伺服器記錄會顯示於 /var/opt/SUNWportal/portals/<portal_ID>/logs/<INSTANCE_ID> 目錄下的 portal.0.0.log 檔案中。

在 Sun Ray 環境中執行 Netlet

如果您希望執行的應用程式將 applet 下載至 Sun Ray 環境中的用戶端機器上,您需要變更 HTML 檔。以下是一個範例檔案,您可以透過該檔案瞭解必須執行的修改。

新的 HTML 檔

<!-- @(#)citrix_start.html 2.1
98/08/17 Copyright (c) 1998 i-Planet, Inc., All rights reserved.-->
<html>
<script language="JavaScript">
var KEY_VALUES;  // KEY_VALUES[\qkey\q] = \qvalue\q;
function retrieveKeyValues() {
      KEY_VALUES = new Object();
      var queryString  = \q\q + this.location;
      queryString = unescape(queryString);
      queryString = queryString.substring((queryString.indexOf(\q?\q)) + 1);
      if (queryString.length < 1) {
          return false; }
      var keypairs = new Object();
      var numKP = 0;
      while (queryString.indexOf(\q&\q) > -1) {
        keypairs[numKP] = queryString.substring(0,queryString.indexOf(\q&\q));
        queryString = queryString.substring((queryString.indexOf(\q&\q)) + 1);
        numKP++;
      }
      // Store what\qs left in the query string as the final keypairs[] data.
      keypairs[numKP++] = queryString;
      var keyName;
      var keyValue;
      for (var i=0; i < numKP; ++i) {
        keyName = keypairs[i].substring(0,keypairs[i].indexOf(\q=\q));
        keyValue = keypairs[i].substring((keypairs[i].indexOf(\q=\q)) + 1);
        while (keyValue.indexOf(\q+\q) > -1) {
          keyValue = keyValue.substring(0,keyValue.indexOf(\q+\q)) + \q \q
           + keyValue.substring(keyValue.indexOf(\q+\q) + 1);

        }
        keyValue = unescape(keyValue);
          // Unescape non-alphanumerics
        KEY_VALUES[keyName] = keyValue;
      }
}
function getClientPort(serverPort) {
    var keyName = "clientPort[\q" + serverPort +"\q]";
    return KEY_VALUES[keyName];
}
function generateContent() {
    retrieveKeyValues();
    var newContent =
        "<html>\\n"
          + "<head></head>\\n"
          + "<body>\\n"
          + "<applet code=\\"com.citrix.JICA.class\\" archive=\\
               "JICAEngN.jar\\" width=800 height=600>\\n"
          + "<param name=\\"cabbase\\" value=\\"JICAEngM.cab\\">\\n"
          + "<param name=\\"address\\" value=\\"localhost\\">\\n"
          + "<param name=ICAPortNumber value="
          + getClientPort(\q1494\q)
          + ">\\n"
          + "</applet>\\n"
          + "</body>\\n"
          + "</html>\\n";
    document.write(newContent);
}
</script>
<body onLoad="generateContent();">
</body>
</html>

停用的 HTML 檔

<html>
<body>
<applet code="com.citrix.JICA.class" archive=
   "JICAEngN.jar" width=800 height=600>
<param name="cabbase" value="JICAEngM.cab">
<param name="address" value="localhost">
<param name=ICAPortNumber value=1494>
</applet>
</body></html>