本章說明 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 是一個安全的存取解決方案,使用者無需用戶端軟體就可從任何裝有啟用 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。
安全模式可讓使用者安全遠端存取需要的企業內部網路檔案系統與應用程式。
閘道位於非軍事區域 (DMZ)。閘道提供至所有企業內部網路 URL 與應用程式的單一安全存取點,如此會減少將在防火牆中被開放的連接埠數。所有其他 Portal Server 服務 (例如階段作業、認證與標準入口網站桌面) 皆位於 DMZ 之後的安全的企業內部網路中。用戶端瀏覽器至閘道的通訊將使用 HTTPS 透過安全套接層 (Secure Sockets Layer, SSL) 加密。閘道至伺服器與企業內部網路資源的通訊可使用 HTTP 或 HTTPS 加密。
在「安全模式」中,會使用 SSL 加密用戶端與閘道間的網際網路連線。SSL 也可以用於加密閘道與伺服器之間的連線。企業內部網路與網際網路之間的閘道將延伸用戶端與 Portal Server 之間的安全路徑。
可以新增其他伺服器與閘道以擴大網站。Secure Remote Access 軟體可以基於業務需求用不同方式配置。如需如何滿足業務需求的詳細資訊,請參閱「Sun Java System Portal Server 7.2 Deployment Planning Guide」。
Secure Remote Access 軟體具有五個主要元件:
閘道
SRA 閘道在源自網際網路的遠端使用者階段作業與您的企業內部網路之間提供了介面與安全的屏障。閘道可透過單一介面,將來自內部 Web 伺服器和應用程式伺服器的內容安全地顯示給遠端使用者。
Web 伺服器使用以 Web 為基礎的資源 (例如 HTML、JavaScript 與 XML) 以在用戶端與閘道之間進行通訊。Rewriter 是用於使 Web 內容可用的閘道元件。
應用程式伺服器會使用二進制通訊協定例如 telnet 與 FTP 以在用戶端與閘道之間進行通訊。位於閘道的 Netlet 就是基於這個目的而使用。請參閱第 2 章, 使用閘道以取得詳細資訊。
Rewriter
Rewriter 會讓一般使用者可以瀏覽企業內部網路並使得那些頁面的連結與其他 URL 參照正確作業。Rewriter 會在 Web 瀏覽器位置欄位中前置閘道 URL,藉此經由閘道重新導向內容請求。請參閱第 4 章, 使用 Rewriter以取得詳細資訊。
Netfile
NetFile 是一個檔案管理應用程式,可遠端存取與操作檔案系統和目錄。NetFile 包括以 Java 為基礎的使用者介面。請參閱第 5 章, 使用 NetFile以取得詳細資訊。
Netlet
Netlet 能更方便地以安全方式在遠端桌面執行熱門應用程式與公司特定應用程式。在網站實施 Netlet 之後,使用者可以安全執行共用的 TCP/IP 服務,例如 Telnet 與 SMTP,和以 HTTP 為基礎的應用程式例如 pcANYWHERE 或 Lotus Notes。請參閱第 6 章, 使用 Netlet以取得詳細資訊。
Proxylet
Proxylet 是一個在用戶端機器上執行的動態代理伺服器。Proxylet 讀取並修改用戶端機器上瀏覽器的代理伺服器設定使其指向本地代理伺服器或 Proxylet,從而將 URL 重新導向至閘道。
您可在 Portal Server 管理主控台中使用下列服務配置 Secure Remote Access 屬性:
存取控制
這個服務可讓您允許或拒絕存取特定的 URL 並管理單次登入功能。如需詳細資訊,請參閱第 7 章, 配置 Secure Remote Access 伺服器存取控制。
閘道
設定檔 (閘道實例)。此服務可讓您配置所有與閘道相關的屬性,例如啟用元件、Cookie 管理、代理伺服器管理、安全性設定、效能調校、Rewriter 對映管理等。如需詳細資訊,請參閱第 8 章, 配置 Secure Remote Access 閘道。
NetFile
這個服務可讓您配置所有與 NetFile 相關的屬性,例如共用主機、MIME 類型並存取不同類型的主機。如需詳細資訊,請參閱第 14 章, 配置 NetFile。
Netlet
這個服務可讓您配置所有與 Netlet 相關的屬性,例如 Netlet 規則、存取需要的規則、組織與主機以及預設演算法。如需詳細資訊,請參閱第 11 章, 配置 Netlet。
Rewriter
此服務可讓您下載、上傳與刪除所有 Rewriter 規則集。
Proxylet
此服務能夠讓您配置 Proxylet 相關的屬性,例如 Proxylet Applet 連結 IP 位址與連接埠號。如需詳細資訊,請參閱第 13 章, 配置 Proxylet。
閘道在執行時不會接收屬性變更的通知。重新啟動閘道,以讓更新的設定檔屬性 (屬於閘道或其他任何服務) 生效。如需詳細資訊,請參閱使用指令行選項配置閘道屬性。
登入 Portal Server 管理主控台。
選取 [Secure Remote Access] 標籤,並按一下必要的服務標籤:Netlet、Netfile 或 Proxylet。
從 [選取 DN] 下拉式功能表選取 [組織] 或 [角色]。
從 [COS 優先順序] 下拉式方塊中,選取必要的 [衝突解決層級]。
按一下 [儲存] 完成作業。
SRA 支援下列應用程式:
使用 PortalServer_base/psadmin switch-sra-status -u amadmin -f <passwordfile> on 指令切換 SRA 狀態。
使用 PortalServer_base/psadmin provision-sra -u amadmin -f <passwordfile> -p <portal-id> --gateway-profile <profile-name> --enable 指令佈建 SRA 狀態。
本章說明與閘道相關的概念。如需管理閘道的資訊,請參閱第 16 章, 管理閘道。如需配置閘道的資訊,請參閱第 8 章, 配置 Secure Remote Access 閘道。
本章涵蓋下列主題:
閘道在源自網際網路的遠端使用者階段作業與您的企業內部網路之間提供了介面與安全的屏障。透過單一介面至遠端使用者,閘道可經由內部 Web 伺服器和應用程式伺服器安全地顯示內容。
針對每個閘道實例,您必須完成下列工作:
其他與閘道相關的主題包含:
閘道設定檔包含與閘道配置相關的所有資訊,如閘道偵聽的連接埠、SSL 選項及代理伺服器選項。安裝閘道時,如果選擇預設值,則會建立稱為「default」的預設閘道。與預設設定檔對應的配置檔會出現在:/etc/opt/SUNWportal/platform.conf.default。
其中 /etc/opt/SUNWportal 是所有 platform.conf.* 檔案的預設位置。如需 platform.conf 檔案的詳細資訊,請參閱了解 platform.conf 檔案。
使用設定檔時,您可執行下列作業:
建立多個設定檔,定義每個設定檔的屬性,並視需要指定這些設定檔給不同的閘道。
在不同的機器上指定單一設定檔給閘道安裝。
指定不同的設定檔給在相同機器上執行的單一閘道實例。
不要指定相同的設定檔給在相同機器上執行的閘道不同實例。該設定將會造成衝突,因為連接埠號碼相同。
不要在不同的設定檔 (建立給相同的閘道) 中指定相同的連接埠號碼。以同樣的連接埠執行相同閘道的多重實例會造成衝突。
多重介面閘道實例是一個 Portal Server 上的多重閘道。要建立這些實例,請將 platform.conf 檔案修改如下:
gatewaybindipaddress = 0.0.0.0
如果您建立的是使用相同 LDAP 的多重閘道實例,在所有隨後的閘道上建立第一個閘道之後:
在 /etc/opt/SUNWam/config/ 中,修改 AMConfig-instance-name.properties 的下列區域,使其與第一個安裝的閘道實例一致。
一般而言,您不需要重新啟動閘道。只有發生下列事件時,才需要重新啟動閘道:
您已經建立新的設定檔並且需要指定此新的設定檔給閘道。
您已經在現有的設定檔中修改一些屬性,並且需要變更以使其生效。
閘道由於出現錯誤 (如記憶體不足) 而當機。
閘道停止回應,且不服務任何請求。
您可以配置監視程式監視閘道狀態的時間間隔。要啟動或停止監視程式,請執行 ./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 位址。
您可以指定閘道用以連絡部署在 Portal Server 上的 SRA 核心支援 (RemoteConfigServlet) 的代理伺服器主機。閘道使用此代理伺服器連絡 Portal Server 與 Access Manager。請參閱指定代理伺服器。
預設情況下,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 檔案特性
您可以使用協力廠商 Web 代理伺服器配置閘道以連絡 HTTP 資源。Web 代理伺服器位於客戶端與網際網路之間。
不同的代理伺服器可能用於不同的網域和子網域。這些項目告訴閘道在特定的網域中,應該使用哪個代理伺服器以連絡特定的子網域。指定在閘道中的代理伺服器配置運作方式如下:
在閘道服務中,建立一個清單,其中包含網域和子網域,以及 [網域與子網域的代理伺服器] 欄位中必要的代理伺服器。
當 [使用代理伺服器] 選項啟用時:
在 [網域與子網域的代理伺服器] 欄位所指定的代理伺服器會用於指定的主機。
要在網域和子網域 (在 [網域與子網域的代理伺服器] 清單中指定的) 中啟用某些 URL 的直接連線,請在 [請勿使用 Web 代理伺服器 URL] 欄位中指定這些 URL。
當 [使用代理伺服器] 選項停用時:
要確認在網域和子網域 (在 [網域與子網域的代理伺服器] 欄位中指定的) 中某些 URL 使用代理伺服器,請在 [使用網路代理伺服器的 URL] 清單中指定這些 URL。
雖然停用 [使用代理伺服器] 功能但仍可使用代理伺服器連接到列於 [使用 Web 代理伺服器] 清單下的 URL。這些 URL 的代理伺服器是從 [網域與子網域的代理伺服器] 清單中取得。
下列圖例顯示如何以閘道服務中的代理伺服器配置為基礎來解決 Web 代理伺服器的訊息。
在Web 代理伺服器配置中,如果啟用了 [使用代理伺服器],且所需的 URL 列於 [請勿使用 Web 代理伺服器 URL] 清單中,則閘道會直接連到目標主機。
如果 [使用代理伺服器] 是啟用的,且要求的 URL 未列於 [請勿使用 Web 代理伺服器 URL] 清單中,則閘道會透過指定的代理伺服器連到目標主機。此代理伺服器 (如果有指定) 可以從 [網域與子網域的代理伺服器] 清單中查看。
如果 [使用代理伺服器] 停用,且請求的 URL 有列於 [使用 Web 代理伺服器] 清單中,則閘道會使用列在 [網域與子網域的代理伺服器] 清單中的代理伺服器資訊連接目標主機。
如果 [使用代理伺服器] 是停用的,且要求的 URL 未列於 [請勿使用 Web 代理伺服器 URL] 清單中,則閘道會直接連線到目標主機。
如果您的情況不符合上述任何一項,且無法使用直接連線,閘道會顯示一個錯誤,說明連線無法使用。
如果您正透過標準入口網站桌面的 [書籤通道] 存取該 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。會依序進行下列搜尋,直到找到符合的結果。
會掃描 host1.sesta.com 的網域和子網域的代理伺服器。如果找到符合的項目,指定給此項目的代理伺服器會用來連接此主機。
否則,會掃描清單中的 *.sesta.com。如果找到符合的項目,會使用對應的代理伺服器。
否則,會尋找清單中的 sesta.com。如果找到符合的項目,會使用對應的代理伺服器。
否則,會尋找清單中的 *.com。如果找到符合的項目,會使用對應的代理伺服器。
否則,會尋找清單中的 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 在 [網域與子網域的代理伺服器] 清單中的對映項目
編號 |
[網域與子網域的代理伺服器] 清單中的項目 |
代理伺服器 |
描述 |
---|---|---|---|
1 |
com |
p1 |
指定於清單中。 |
2 |
host1.com |
p2 |
指定於清單中。 |
3 |
host2.com |
p1 |
由於沒有為 host2 指定代理伺服器,會使用網域的代理伺服器。 |
4 |
*.com |
p3 |
指定於清單中。 |
5 |
sesta.com |
p4 |
指定於清單中。 |
6 |
host5.sesta.com |
p5 |
指定於清單中。 |
7 |
*.sesta.com |
p6 |
指定於清單中。 |
8 |
florizon.com |
直接 |
如需詳細資訊,請參閱第 14 項的描述。 |
9 |
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 網域下,所有主機 (host7 和 host8 除外) 都會使用 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) 檔案時:
Portal Server、閘道、Netlet 與 Proxylet 使用 Rhino 軟體來剖析 PAC 檔案。您可以從 Java Enterprise System Accessory CD 安裝 SUNWrhino 套裝軟體。
此套裝軟體包含 js.jar 檔案,其必須位於 /usr/share/lib 目錄。將此目錄新增到閘道和 Portal Server 機器上的 webserver/appserver 類別路徑,否則 Portal Server、閘道、Netlet 以及 Proxylet 無法剖析 PAC 檔案。
js.jar 必須位於閘道機器上的 $JRE_HOME/lib/ext 目錄中,否則閘道無法剖析 PAC 檔案。
啟動時,閘道從閘道設定檔的「自動代理伺服器配置檔案」位置欄位中指定的位置取得 PAC 檔案。
閘道使用 URLConnection API 到達此位置。如果需要配置代理伺服器以到達閘道,必須以下列方式配置代理伺服器:
從指令行中,編輯下列檔案:
/etc/opt/SUNWportal/platform.conf.gateway-profile-name
新增下列項目:
http.proxyHost= web-proxy-hostname
http.proxyPort= web-proxy-port
http.proxySet=true
重新啟動閘道以使用指定的代理伺服器:
./psadmin start-sra-instance –u amadmin – f <password file> –N <profile name>– t <gateway>
如果 PAC 檔案初始化失敗,閘道會使用 [網域與子網域的代理伺服器] 清單中的資訊。
如果從 PAC 檔案傳回「」空字串或「null」,閘道會假設該主機不屬於此企業內部網路。這與不在 [網域與子網域的代理伺服器] 清單中之主機的情況類似。
如果您想要閘道使用直接連線連到主機,請返回到「DIRECT」。請參閱含有傳回 DIRECT 或 NULL 的範例。
當指定多個代理伺服器時,閘道僅使用第一個返回的代理伺服器。閘道不會在指定給主機的多個代理伺服器之間嘗試修復錯誤或負載平衡。
閘道忽略 SOCKS 代理伺服器並嘗試直接連線,同時假設該主機是企業內部網路的一部分。
要指定代理伺服器,讓其通往任何不屬於內部企業網路的主機,請使用代理伺服器類型 STARPROXY。此代理伺服器類型是 PAC 檔案格式的延伸,與在閘道設定檔的 [網域與子網域的代理伺服器] 部分中的 * proxyHost:port 項目相似。請參閱含有傳回 STARPROXY 的範例。
下列範例顯示列在 [網域與子網域的代理伺服器] 清單中的 URL 和對應的 PAC 檔案。
如果將這些代理伺服器用於網域與子網域:
*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 |
如果將這些代理伺服器用於網域與子網域:
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 檔案位於 Web 伺服器上,則 PAC URL 為:
http://hostname/pacfile_name .pac
如果 PAC 檔案是本機檔案 (例如,c:\\pacfile\\sample.pac),則在 java 1.4.1_x 中,PAC URL 的輸入格式為:
file://c:/pacfile/sample.pac
如果 PAC 檔案是本機檔案 (例如,c:\\pacfile\\sample.pac),則在 java 1.4.2_x 中,PAC URL 的輸入格式為:
file:///c:/pacfile/sample.pac
當在個別階段作業中新增 Portal Server 服務時:
在 Portal Server 管理主控台中的 [閘道] > [核心] 下列出 Portal Server。
在 [閘道] > [安全性] 下的 [非認證 URL] 中列出 Portal Server URL。
Netlet 封包在閘道是解密的,並會傳送到目標伺服器。然而,閘道需要透過非軍事區 (DMZ) 和企業內部網路之間的防火牆,存取所有的 Netlet 目的地主機。此設定需要在防火牆中開啟大量的連接埠。Netlet 代理伺服器可用於最小化在防火牆中開啟的連接埠數目。
藉由延伸用戶端的安全通道,透過閘道到存在於企業內部網路的 Netlet 代理伺服器,Netlet 強化閘道和企業內部網路之間的安全性。使用代理伺服器,Netlet 封包會由代理伺服器解密,之後會傳送至目的地。
新增額外的安全性層級。
在大規模的部署環境中,最大程度減少閘道透過內部防火牆使用額外 IP 位址和連接埠的情況。
限制閘道和入口伺服器之間開啟的連接埠數目為 1。此連接埠號碼可在安裝期間配置。
延伸客戶端和閘道之間的安全通道,最多可延伸到 Portal Server,如使用 Netlet 代理伺服器中的 [包含配置的 Netlet 代理伺服器] 部分所示。透過資料加密,Netlet 代理伺服器提供強化的安全益處,但可能會增加系統資源的使用。如需安裝 Netlet 代理伺服器的資訊,請參閱「Sun Java System 安裝指南」。
您可執行下列作業:
在 Portal Server 節點上或個別節點上安裝 Netle 代理伺服器。
使用管理主控台安裝多個 Netlet 代理伺服器並配置給單一閘道。這對負載平衡很有用。
在單一機器上配置多個 Netlet 代理伺服器實例。
將閘道的多重實例指向 Netlet 代理伺服器的單一安裝。
通道 Netlet 會透過 Web 代理伺服器。
顯示在有和沒有安裝 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 代理伺服器伺服器。
您可使用 Portal Server 管理主控台透過閘道服務啟用 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 代理伺服器之間,另一個在閘道與 Portal Server 之間。
在閘道和企業內部網路間的 HTTP 流量很安全,即使目標伺服器僅支援 HTTP 通訊協定 (不支援 HTTPS)。
如果您沒有指定 Rewriter 代理伺服器,當使用者嘗試存取企業內部網路的其中一台電腦,閘道元件會直接連線至企業內部網路的電腦。
如果您使用 Rewriter 代理伺服器作為負載平衡器,請確定 Rewriter 的 platform.conf.instance_name 指向負載平衡器 URL。在 Portal Server 清單中指定負載平衡器主機。
如果每個閘道實例 (不一定要在入口節點上) 都有 Rewriter 代理伺服器的多個實例,請在 platform.conf 檔案中以 host-name:port 格式來提供每個 Rewriter 代理伺服器的詳細資訊,而非 Rewriter 代理伺服器的單一連接埠項目。
使用 rwpmultiinstance 程序檔,在 Portal Server 節點上建立 Rewriter 代理伺服器的新實例。請在建立閘道設定檔之後執行此程序檔。
在 Access Manager 管理主控台中,在「SRA 配置」下透過閘道服務啟用 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 標頭中的訊息
認證鏈接提供比一般機制更高層級的安全性。您可以讓使用者認證一個以上的認證機制。
此處的程序說明僅適用於在閘道同時啟用認證鏈接與「個人數位憑證」(Personal Digital Certificate, PDC) 認證。如需在閘道上沒有 PDC 認證的認證鏈接的資訊,請參閱「Access Manager 管理指南」。
例如,如果您取得 PDC 和 Radius 認證模組,使用者將必須認證這三個模組以存取標準入口網站桌面。
請參閱新增認證模組到現有 PDC 實例以取得步驟。
如果啟用 PDC,它永遠都是第一個顯示在使用者面前的認證模組。
萬用字元憑證接受含有萬用字元的單一憑證,該憑證必須位於擁有完全合格 DNS 名稱的主機中。
使用憑證可以在相同網域中維護多個主機的安全性。例如,*.domain.com 的憑證可以用於 abc.domain.com 和 abc1.domain.com。事實上,此憑證對於在 domain.com 網域中的任何主機都有效。
由於可透過閘道元件僅使用 Web 瀏覽器從任何地方安全地存取後端公司資料,因此用戶端不應該在本機對資訊進行快取。
您可以修改指定閘道在 platform.conf 中檔案的屬性,以停用透過閘道快取重新導向的頁面。
停用此選項對閘道效能有影響。每次標準入口網站桌面更新時,閘道必須擷取頁面參照的每個東西,例如先前瀏覽器已經快取過的影像。然而,啟用這個功能後,遠端存取安全的內容將不會在用戶端網站留下快取過的痕跡。如果是從網咖或類似的遠端位置 (不在企業 IT 的控制下) 存取企業網路,此因素可能比效能問題更為重要。
請參閱停用瀏覽器快取。
本節討論可以編輯的各種閘道特性檔案。
因下列用途您可以編輯此檔案:
自訂在閘道執行時可能會出現的錯誤訊息。
HTML-CharSets=ISO-8859-1 指定用於建立此檔案的字元集。
在大括號中的數字 (例如,{0}) 表示在執行期間顯示的值。您可以變更和此數字有關的標籤,或視需要重新整理標籤。請確定標籤和將顯示的訊息對應,因為數字是和訊息相關聯的。
自訂記錄資訊。
在預設情況下,srapGateway.properties 檔案位於 portal-server-install-root /SUNWportal/locale 目錄中。所有出現在閘道機器上的訊息都在此檔案中,無論訊息的語言為何。
要變更出現在用戶端標準入口網站桌面上之訊息的語言,請將此檔案複製到對應語言環境的目錄中,例如 portal-server-install-root/SUNWportal/locale_en_US。
因下列原因您可以編輯此檔案:
自訂出現在管理主控台上閘道服務之按紐的標籤。
自訂當您配置閘道時,會出現的狀態訊息和錯誤訊息。
當 Portal Server 及 Access Manager 伺服器的兩個實例共用相同的 LDAP 目錄時,所有後續的 Portal Server、Access Manager 及閘道的實例都會共用相同的 LDAP 目錄。請參閱共用 LDAP 目錄。
本章說明可讓使用者透過閘道而非剖析網頁來存取企業內部網路網頁的 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,它會針對用戶端機器檢查下列資訊:
適當的瀏覽器權限
瀏覽器是否為 IE 6.0 sp2、IE 7 與 Firefox 2.0
機器或裝置是否可執行伺服器應用程式
如果滿足所有的要求,就會下載 applet 並在用戶端機器上啟動它。如果用戶端沒有安裝 JRE 1.4.2 或更新版本,當您具有網際網路連線及管理權限時,用戶端就會透過 Proxylet 自動下載 JRE。
使用 Proxylet 時,它會從自動代理程式配置 (Proxy Auto Configuration, PAC) 檔案或代理程式配置清單中擷取代理程式設定。
確定使用者瞭解必須在使用 Proxylet applet 時,停用瀏覽器快顯式阻擋程式。
Proxylet 支援 HTTPS,可完成以下作業:
在用戶端伺服器完成解密。
可存取在 SSL 模式下執行的目標伺服器。
直接將用戶端憑證提供給目標伺服器。
閘道不支援基本驗證單次登入 (SSO)。(閘道無法將單次登入資訊插入 http 標頭)。
不支援基於 URL 的存取控制,僅支援基於主機的存取控制。
目前不支援在閘道前方設置外部加速器和外部反向代理伺服器。
如果 Portal Server 使用 HTTPS,則不支援 Proxylet。
不同於 Rewriter,Proxylet 安裝後很少需要或不需要變更。與協力廠商軟體 (例如 Microsoft Exchange Server) 的整合也非常容易。由於 Proxylet 不會接觸 Web 內容,閘道的效能也有所增加。因為 Proxylet 不會修改內容或變更資料,使用者可以下載任何類型的內容,例如 tar 與 gzip 檔案。
如需啟用與配置 Proxylet 的詳細資訊,請參閱第 13 章, 配置 Proxylet。
如果使用者沒有用來執行 Proxylet 的適當 Java Virtual Machine (JVM),請用瀏覽器連線至 Sun 網站下載 Java Runtime Environment。如果使用者的瀏覽器設定並未包含正確的值,或如果使用者在使用直接代理伺服器而未存取至網際網路,則無法下載 Proxylet。
Secure Remote Access 的 Rewriter 元件可讓使用者透過剖析網頁,經由閘道來存取企業內部網路的網頁。
本章涵蓋下列主題:
Secure Remote Access 的 Rewriter 元件能讓一般使用者利用修改網頁上的統一資源識別碼 (Uniform Resource Identifier, URI) 參照,以指向閘道從而瀏覽企業內部網路。URI 可定義於任何已註冊名稱空間內封裝名稱的方法,並以該名稱空間為其加標記。最常見的 URI 類別為單一資源定址器 (Uniform Resource Locator, URL)。Rewriter 僅支援 HTTP 或 HTTPS。不論協定的大小寫為何都支援。Rewriter 僅支援相對 URL 中包含反斜線符號。
http://abc.sesta.com\\index.html 會被重新寫入。
這些 URL 不會被重新寫入:http:\\\\abc.sesta.com。 http:/abc.com
HTTP 標準需要 HTTP 標頭或 HTML 中繼標記為網頁指定字元集。但是有時候此資訊沒有辦法使用。字元集必須為已知,如此資料編碼的設定以及資料的顯示才會依照建立的想法進行。
要偵測字元集,請從 Java Enterprise System Accessory CD 安裝 SUNWjchdt 套裝軟體。如果已安裝此產品,Rewriter 將會偵測到它並在需要時使用。
使用此產品將會影響效能,因此應該只在需要時才安裝此產品。如需安裝、配置與用法的詳細資訊,請參閱 jcharset_readme.txt。
使用者試圖經由閘道存取企業內部網路網頁時,即可使用 Rewriter 來順利存取網頁。URLScraper 與閘道會使用 Rewriter。
URL Scraper 提供者會從配置的 URI 取得內容。將這些 URI 傳送至瀏覽器前,它會將所有相對 URI 展開為絕對 URI。
例如,如果使用者嘗試用下列方式存取網站:
<a href="../mypage.html">
Rewriter 會將此轉譯為:
<a href="http://yahoo.com/mypage.html">
其中 http://yahoo.com/test/ 是網頁的基準 URL。
如需 URLScraper 提供者的詳細資訊,請參閱「Sun Java System Portal Server 管理指南」。
閘道從網際網路入口網站獲取內容。將內容傳送至瀏覽器前,它會將閘道 URI 置於目前的 URI 之前,如此來自瀏覽器的後續 URI 請求都可到達閘道。
例如,如果使用者試圖用以下方式存取網際網路機器上的 HTML 網頁:
<a href="http://mymachine.intranet.com/mypage.html>"
Rewriter 會引用閘道置於這個 URL 之前,如下所示:
<a href="https://gateway.company.com/http://mymachine.intranet.com/ mypage.html>"
使用者點選與此控點相關的連結時,瀏覽器便會連絡閘道。閘道會從 mymachine.intranet.com 取得 mypage.html 的內容。
閘道使用多種規則來判定是否需重新寫入取得網頁中的元素。
如需定義規則集的詳細資訊,請參閱「Portal Server 管理指南」。在建立新規則集後,您必須定義必要的規則。
本節涵蓋下列主題:
規則集 DTD:
<?xml version="1.0" encoding="UTF-8"?> <!-- The following constraints are not represented in DTD, but taken care of programmatically 1. In a Rule, All Mandatory attributes cannot be "*". 2. Only one instance of the below elements is allowed, but in any order. 1)HTMLRules 2)JSRules 3)XMLRules 3. ID should always be in lower case. --> <!ENTITY % eURL ’URL’> <!ENTITY % eEXPRESSION ’EXPRESSION’> <!ENTITY % eDHTML ’DHTML’> <!ENTITY % eDJS ’DJS’> <!ENTITY % eSYSTEM ’SYSTEM’> <!ENTITY % ruleSetElements ’(HTMLRules | JSRules | XMLRules)?’> <!ENTITY % htmlElements ’(Form | Applet | Attribute)*’> <!ENTITY % jsElements ’(Variable | Function)*’> <!ENTITY % xmlElements ’(Attribute | TagText)*’> <!ELEMENT RuleSet (%ruleSetElements;,%ruleSetElements;,%ruleSetElements;)> <!ATTLIST RuleSet id ID #REQUIRED extends CDATA "none" > <!-- Rules for identifying rules in HTML content --> <!ELEMENT HTMLRules (%htmlElements;)> <!ELEMENT Form EMPTY> <!ATTLIST Form name CDATA #REQUIRED field CDATA #REQUIRED valuePatterns CDATA "" source CDATA "*" > <!ELEMENT Applet EMPTY> <!ATTLIST Applet code CDATA #REQUIRED param CDATA "*" valuePatterns CDATA "" source CDATA "*" > <!-- Rules for identifying rules in JS content --> <!ELEMENT JSRules (%jsElements;)> <!ELEMENT Variable EMPTY> <!ATTLIST Variable name CDATA #REQUIRED type (%eURL; | %eEXPRESSION; | %eDHTML; | %eDJS; | %eSYSTEM;) "EXPRESSION" source CDATA "*" > <!ELEMENT Function EMPTY> <!ATTLIST Function name CDATA #REQUIRED paramPatterns CDATA #REQUIRED type (%eURL; | %eEXPRESSION; | %eDHTML; | %eDJS;) "EXPRESSION" source CDATA "*" > <!-- Rules for identifying rules in XML content --> <!ELEMENT XMLRules (%xmlElements;)> <!ELEMENT TagText EMPTY> <!ATTLIST TagText tag CDATA #REQUIRED attributePatterns CDATA "" source CDATA "*" > <!ELEMENT Attribute EMPTY> <!ATTLIST Attribute name CDATA #REQUIRED tag CDATA "*" valuePatterns CDATA "" type (%eURL; | %eDHTML; | %eDJS; ) "URL" source CDATA "*" >
除必要的屬性值不能只有 * 之外,您可使用 * 做為規則值的一部分。會忽略這類規則,但是訊息會記錄在 RuleSetInfo 記錄檔中。如需此記錄檔的資訊,請參閱除錯檔案名稱。
本節包含一範例規則集。我們使用第 140 頁的「案例研究」來說明 Rewriter 解譯這些規則的方式。
<?xml version="1.0" encoding="ISO-8859-1"?> <!-- Rules for integrating a mail client with the gateway. --> <!DOCTYPE RuleSet SYSTEM "jar://rewriter.jar/resources/RuleSet.dtd"> <RuleSet type="GROUPED" id="owa"> <HTMLRules> <Attribute name="action" /> <Attribute name="background" /> <Attribute name="codebase" /> <Attribute name="href" /> <Attribute name="src" /> <Attribute name="lowsrc" /> <Attribute name="imagePath" /> <Attribute name="viewClass" /> <Attribute name="emptyURL" /> <Attribute name="draftsURL" /> <Attribute name="folderURL" /> <Attribute name="prevMonthImage" /> <Attribute name="nextMonthImage" /> <Attribute name="style" /> <Attribute name="content" tag="meta" /> </HTMLRules> <JSRules> <!-- Rules for Rewriting JavaScript variables in URLs --> <Variable name="URL"> _fr.location </Variable> <Variable name="URL"> g_szUserBase </Variable> <Variable name="URL"> g_szPublicFolderUrl </Variable> <Variable name="URL"> g_szExWebDir </Variable> <Variable name="URL"> g_szViewClassURL </Variable> <Variable name="URL"> g_szVirtualRoot </Variable> <Variable name="URL"> g_szBaseURL </Variable> <Variable name="URL"> g_szURL </Variable> <Function name="EXPRESSION" name="NavigateTo" paramPatterns="y"/> </JSRules> <XMLRules> <Attribute name="xmlns"/> <Attribute name="href" tag="a"/> <TagText tag="baseroot" /> <TagText tag="prop2" /> <TagText tag="prop1" /> <TagText tag="img" /> <TagText tag="xsl:attribute" attributePatterns="name=src" /> </XMLRules> </RuleSet>
撰寫規則的一般程序如下:
識別出含有需重新寫入內容之 HTML 網頁的目錄。
在這些目錄中,識別出需要重新寫入的網頁。
識別出各網頁上需重新寫入的 URL。識別出多數 URL 的簡易方法就是搜尋 "http" 與 "/"。
識別出 URL 的內容類型:HTML、JavaScript 或 XML。
在 Access Manager 管理主控台「Portal Server 配置」下的「Rewriter 服務」中編輯需要的規則集,以撰寫重新寫入各個 URL 所需的規則。
將所有規則合併到該網域的規則集中。
建立規則集時,請記住:
特定主機的優先順序是根據最長的 URI 符合。以下列的規則集為例
mail1.central.abc.com|iplanet_mail_ruleset *.sfbay.abc.com|sfbay_ruleset *.abc.com|generic_ruleset
使用的會是 sfbay_ruleset,因為它的符合內容最長。
規則集中的規則會依順序套用至網頁中的所有陳述式,直到有一個規則與特定陳述式相符。
撰寫規則時,請牢記規則的順序。規則會以出現在規則集中的順序,套用至網頁中的陳述式。若您有特定規則,及包含 "*" 的一般規則,請先定義該特定規則,然後再定義一般規則。否則,在套用特定規則之前就會先套用一般規則至所有陳述式。
所有的規則都必須包含在 <RuleSet> </RuleSet> 標記內。
將所有需重新寫入 HTML 內容的規則納入規則集的 <HTMLRules> </HTMLRules> 區段。
將所有需重新寫入 JavaScript 內容的規則納入規則集的 <JSRules> </JSRules> 區段。
將所有需重新寫入 XML 內容的規則納入規則集的 <XMLRules> </XMLRules> 區段。
請在您的企業內部網路網頁中,識別出需重新寫入的 URL,然後將所需規則納入規則集的相應區段 (HTML、JSRules 或 XMLRules)。
將規則集指派至所需網域。
重新啟動閘道以使變更產生作用:
gateway-install-root/SUNWportal/bin/gateway -n gateway-profile-name start
規則集根元素具有兩種屬性:
RuleSetName,例如,default_ruleset。會在 RuleSet 至 URI 的對映中參照此名稱。
Extends。此屬性指的是規則集的繼承特性。值會指向您欲從中導出規則集的規則集。
使用值 none 以表示此新的獨立規則集不依附於任何其他的規則集,或指定 RuleSetName 以表示您的規則集依附於其他規則集。
Rewriter 使用遞迴功能在符合的字串式樣的結尾搜尋是否有相同的式樣。
例如,當 Rewriter 剖析下列字串時:
<a href="src=abc.jpg,src=bcd.jpg,src=xyz.jpg>
規則
<Attribute name="href" valuePatterns="*src=**"/>
僅會重寫第一個出現的式樣,其形式如下:
<a href="src=http://jane.sun.com/abc.jpg>
如果您使用遞迴選項
<Attribute name="href" valuePatterns="REC:*src=**"/>;
Rewriter 會搜尋相同的式樣,直至符合字串式樣的結尾,因此輸出將會是:
<a href="src=http://jane.sun.com/abc.jpg,src=http://jane.sun.com/bcd.jpg,src=http://jane.sun.com/xyz.jpg>
規則以下列語言為基礎:
HTML
JavaScript
XML
可進一步將網頁上的 HTML 內容分類為屬性、表單或 Applet。同樣地,HTML 內容的規則可分類為:
此規則可識別需重新寫入值的標籤屬性。屬性值可為簡單的 URL、JavaScript 或 DHTML 內容。例如:
「img」標籤中指向某個影像位置的 src 屬性 (簡單 URL)
href 屬性中處理按一下連結時的動作的 onClick 屬性 (DJS)
此部分說明下列內容:
<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。
假設此網頁的基準 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 網頁可能包含表單。某些表單元素可能會將 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 後面的所有內容。請參閱在規則中與式樣相符。
單一網頁可以包含許多 Applet,而每個 Applet 則可以包含許多參數。Rewriter 會利用 Applet 的 HTML 定義與規則中指定的值相符,然後修改作為 Applet 參數定義一部分呈現的 URL 值。此取代動作會在伺服器上進行,而非在使用者瀏覽特定網頁時進行。此規則可識別並重新寫入 HTML 內容中的 Applet 及物件標籤的參數。
本節分為下列部分:
<Applet code="ApplicationClassName/ObjectID " param="parametername" [valuePatterns="" source="*"] />
其中
code 是 Applet 或物件類別的名稱 (必須的)
param 是值需要重新寫入的參數的名稱 (必須的)
valuePatterns 請參閱在規則中與式樣相符。
source 是包含 Applet 定義的網頁的 URL (可選,預設為 *,表示在任何網頁中)
假設此網頁的基準 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 之後的內容 (可選,預設為 "",表示需重新寫入完整值)
您可以透過以反斜線退出特殊化字元的方式來指定它們。例如:
<Form source="*/source.html " name="form1" field=" visit" [valuePatterns="0|1234| \\;original text|changed text"]/>
您可使用萬用字元星號 (*) 字元來完成用於重新寫入的式樣相符。
在 valuePatterns 欄位中,您不能僅指定一個 *。因為 * 表示包含所有文字的符合結果,這樣 valuePattern 後沒有文字。因此,Rewriter 沒有可重新寫入的文字。您必須利用其他字串與 * 連用,如 *abc。在這種情況下,即會重新寫入所有位於 *abc 之後的內容。
規則中的任何欄位皆可使用萬用字元星號 (*)。但是規則中所有的欄位不能都包含 *。若所有欄位皆包含 *,則會忽略此規則。不會顯示任何的錯誤訊息。
您可以利用 * 或 ** 與顯示在原始陳述式中的分隔字元 (分號或逗號) 連用,以分隔多個欄位。一個星號 (*) 會與所有不需重新寫入的欄位相符,而兩個星號 (**) 則會與所有需重新寫入的欄位相符。
在 valuePatterns 中使用萬用字元列出 * 萬用字元的某些用法範例。
表 4–1 * 萬用字元的使用範例
URL |
valuePatterns |
描述 |
---|---|---|
url1, url2, url3, url4 |
valuePatterns = "**, *, **, *" |
會重新寫入 url1 與 url3,因為 ** 會指出待重新寫入的部分 |
XYZABChttp://host1.sesta.com/dir1.html |
valuePatterns = "*ABC" |
僅會重新寫入 http://host1.sesta.com/dir1.html 部分。所有位於 *ABC 之後的項目皆需重新寫入。 |
"0|dir1|dir2|dir3|dir4|test|url1 |
valuePatterns = "*|*|**|*|**|*|" |
會重新寫入 dir2、dir4 與 url1。需重新寫入的最後一個欄位不必以 ** 表示。 |
JavaScript 可在多個位置包含 URL。Rewriter 無法直接剖析 JavaScript 與確定 URL 部分。必須撰寫特定規則集以協助 JavaScript 處理器識別及轉譯 URL。
具有 URL 類型的 JavaScript 元素分類如下:
<Variable name="variableName" [type="URL|EXPRESSION|DHTML|DJS|SYSTEM" source="*"]>
視其所持有的值類型而定,JavaScript 變數可細分為 5 種:
變數值是一個可視為 URL 的簡單字串。
本節分為下列部分:
<Variable name="variableName" type="URL" [source="*"]>
其中
variableName 為變數名稱。將會重新寫入 variableName 的值 (必須的)
type 為 URL 變數 (必須的,且值必須為 URL)
source 是此 JavaScript 變數所在的網頁的 URI (可選,預設為 *,表示在任何網頁中)
假設基準 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 變數的右側會有一個表示式。此表示式會產生一個 URL。Rewriter 會將 JavaScript 函數 (psSRAPRewriter_convert_expression) 附加至 HTML 網頁,因為其無法在伺服器上計算這類表示式的值。此函數會將表示式視為參數,並在用戶端瀏覽器中計算所需 URL 值。
若您不確定陳述式包含的是簡單 URL 或 EXPRESSION URL,請使用 EXPRESSION 規則,因為其可處理兩種情況。
本節分為下列部分:
<Variable name="variableName" [type="EXPRESSION" source="*"]/>
其中
variableName 是 JavaScript 變數的名稱,其值為表示式 (必須的)
type 是 JavaScript 變數的類型 (可選,預設為 EXPRESSION)
source 是網頁的 URI (可選,預設為 *,表示任何來源)
假設此網頁的基準 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。
這些是含有 HTML 內容的 JavaScript 變數。
本節分為下列部分:
<Variable name="variableName" type="DHTML" [source="*"]/>
其中
variableName 是含有 DHTML 內容的 JavaScript 變數的名稱 (必須的)
type 是變數的類型 (必須的,此值必須為 DHTML)
source 是網頁的 URL (可選,預設為 *,表示在任何網頁中)
假設此網頁的基準 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 會被重新寫入。
這些是含有 JavaScript 內容的 JavaScript 變數。
本節分為下列部分:
<Variable name="variableName" type="DJS" [source="*"]/>
其中
variable 是 JavaScript 變數,其值為 javascript。
假設此網頁的基準 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 變數的值。
這些變數並非由使用者公佈且支援有限。這些變數可用作 JavaScript 標準的一部分。例如,window.location.pathname。
本節分為下列部分:
<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 (可選,預設為 *,表示在任何網頁中)
假設此網頁的基準 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。
本節分為下列部分:
<Function name="functionName" paramPatterns="y,," type="URL" [source="*"]/>
其中
name 是含有 URL 類型參數的函數名稱 (必須的)
paramPatterns 指出需重新寫入的參數 (必須的)
y y 的位置會指出需重新寫入的參數。例如,在此語法中,需要重新寫入第一個參數,但第二個參數則不應重新寫入
type 是函數的類型 (必須的,此值必須為 URL)
source 是具有此函數呼叫之網頁的 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。
這些參數採用表示式值,即 URL 中的計算結果。
本節分為下列部分:
<Function name="functionName" paramPatterns="y" [type="EXPRESSION" source="*"]/>
其中
name 為函數名稱 (必須的)
paramPatterns 指出需重新寫入的參數 (必須的)
y y 的位置會指出需重新寫入的函數參數。上列語法中,僅會重新寫入第一個參數
type 指定 EXPRESSION 值 (可選)
source 是呼叫此函數的網頁的 URI
假設此網頁的基準 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 的函數規則負責執行重新寫入。
其值為 HTML 的函數參數
本機 JavaScript 方法,如會以動態的方式產生 HTML 網頁的 document.write(),歸屬於此種類。
本節分為下列部分:
<Function name="functionName" paramPatterns="y" type="DHTML" [source="*"]/>
其中
name 是函數名稱
paramPatterns 指出需重新寫入的參數 (必須的)
y y 的位置會指出需重新寫入的函數參數。上列語法中,僅會重新寫入第一個參數
假設此網頁的基準 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 屬性規則,以實際重新寫入識別出的參數。
其值為 JavaScript 的函數參數。
本節分為下列部分:
<Function name="functionName" paramPatterns="y" type="DJS" [source="*"]/>
其中
name 是含有一個 DJS 參數的函數名稱 (必須的)
paramPatterns 指出上列函數中哪一個參數是 DJS (必須的)
y y 的位置會指出需重新寫入的函數參數。上列語法中,僅會重新寫入第一個參數
type 是 DJS (必須的)
source 是網頁的 URI (可選,預設為 *,表示任何 URI)
假設此網頁的基準 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 內容,其因此可包含 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>
描述
上列範例中,僅重新寫入第四行,因為其符合規則中所指定的所有條件。請參閱在規則中與式樣相符。
HTML 網頁中的 Cascading Style Sheet (包含 CCS2) 會被轉譯。沒有任何針對此轉譯而定義的規則,因為 URL 僅出現在 CSS 的 url() 函數與匯入語法中。
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 無法復原的錯誤。
警告 – 不會對 Rewriter 的運作造成重大影響的警告。Rewriter 可從此類型的錯誤中復原,但可能會或不會造成不當行為。有些出現在警告中的訊息僅是告知性的。例如「Not rewriting image content」(未重新寫入影像內容) 被記錄為警告訊息。這個情況並不會造成重大影響,因為 Rewriter 並不會用於重新寫入影像。
訊息 – 這是 Rewriter 所提供最高層級的資訊。
以超級使用者身份登入閘道機器,然後編輯下列檔案:
gateway-install-root/SUNWam/config/AMConfig-instance-name.properties |
設定除錯層級:
com.iplanet.services.debug.level= |
除錯層級為:
error - 只會在除錯檔案中記錄嚴重錯誤。在此種錯誤發生時,Rewriter 通常會停止運作。
warning - 會記錄警告訊息。
message - 會記錄所有的除錯訊息。
off - 不會記錄任何除錯訊息。
在 AMConfig-instance-name .properties 檔案的下列特性中,指定除錯檔案目錄:
com.iplanet.services.debug.directory=/var/opt/SUNWam/debug |
其中 /var/opt/SUNWam/debug 是預設的除錯目錄。
從終端機視窗重新啟動閘道:
./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 會產生一個用於未留存於上述檔案中的其他除錯訊息的檔案。檔案名稱包括兩個部分:第一部分為 pwRewriter 或 psSRARewriter,第二部分則為使用 portal 或 gateway-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
本節包括:
含需重新寫入之內容的簡單 HTML
重新寫入內容所需的規則
已重新寫入的相應 HTML 網頁
這些頁面範例位於 portal-server-URL /rewriter 目錄下。您可在套用規則前瀏覽整個頁面,然後經由您的閘道檢視含已重新寫入之輸出的檔案,以查看規則的套用結果。在某些範例中,規則已經是 default_gateway_ruleset 的一部分。在某些範例中,您必須將規則納入 default_gateway_ruleset 中。這一點會在適當之處提及。
某些以粗體顯示的陳述式表示其已被重新寫入。
可用的範例如下:
HTML
JavaScript
函數
XML
XML 屬性範例
您可自下列路徑存取此範例:
portal-server-URL /rewriter/HTML/attrib/attribute.html
請確定您已於閘道服務的 [網域與子網域的代理伺服器] 清單中定義 abc.sesta.com 與 host1.siroe.com 。
若未定義,則會採用直接連接,且不前置閘道 URL。
您不需將此範例中指定的規則新增至 default_gateway_ruleset 中,因為規則已完成定義。
<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> 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 記號範例
您可自下列路徑存取此範例:
portal-server-URL /rewriter/HTML/jstokens/JStokens.html
將此範例中指定的規則新增至 [重新寫入 JavaScript 來源的規則] 部分的 default_gateway_ruleset 中。
在 Portal Server 管理主控台的 Portal Server 配置下,編輯 Rewriter 服務中的 default_gateway_ruleset。
從終端機視窗重新啟動閘道:
./psadmin start-sra-instance –u amadmin – f <password file> –N <profile name>– t <gateway> |
<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> <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。這是因為 onAbort、onBlur、onFocus、onChange 與 onClick 的規則都已在 default_gateway_ruleset 檔案中定義。Rewriter 會偵測 JavaScript 記號,並將之傳送至 JavaScript 函數規則中以便進行進一步的處理。此範例中的第二個規則會告知 Rewriter 該重新寫入哪一個參數。
</body> <br>
Rewriting ends
</html>
您可自下列路徑存取表單範例:
portal-server-URL/rewriter/HTML/forms/formrule.html
請確定您已於閘道服務的 [網域與子網域的代理伺服器] 清單中定義 abc.sesta.com。
若未定義,則會採用直接連接,且不前置閘道 URL。
將此範例中指定的規則新增至 [重新寫入 HTML 屬性的規則] 部分的 default_gateway_ruleset 中。
在 Portal Server 管理主控台的 Portal Server 配置下,編輯 Rewriter 服務中的 default_gateway_ruleset。
從終端機視窗重新啟動閘道:
./psadmin start-sra-instance –u amadmin – f <password file> –N <profile name>– t <gateway> |
<!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> <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。上述名稱與規則中指定的表單名稱與欄位名稱相符。規則指出 valuePatterns 為 0|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>
請取得 Applet 類別檔案。RewriteURLinApplet.class 檔案位於下列位置:
portal-server-URL/rewriter/HTML/applet/appletcode
出現 Applet 代碼之網頁的基準 URL 為:
portal-server-URL/rewriter/HTML/applet/rule1.html
將此範例中指定的規則新增至 [重新寫入 HTML 屬性的規則] 部分的 default_gateway_ruleset 中。
在 Portal Server 管理主控台的 Portal Server 配置下,編輯 Rewriter 服務中的 default_gateway_ruleset。
重新啟動閘道:
./psadmin start-sra-instance –u amadmin – f <password file> –N <profile name>– t <gateway> |
<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> 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>
您可自下列路徑存取此範例:
portal-server-URL /rewriter/JavaScript/variables/url/js_urls.html
請確定您已於閘道服務的 [網域與子網域的代理伺服器] 清單中定義 abc.sesta.com。
若未定義,則會採用直接連接,且不前置閘道 URL。
將此範例中指定的規則新增至 [重新寫入 JavaScript 來源的規則] 部分的 default_gateway_ruleset 中。
在 Portal Server 管理主控台的 Portal Server 配置下,編輯 Rewriter 服務中的 default_gateway_ruleset。
若您新增此規則,請重新啟動閘道:
./psadmin start-sra-instance –u amadmin – f <password file> –N <profile name>– t <gateway> |
<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> 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>
您可自下列路徑存取此範例:
portal-server-URL /rewriter/JavaScript/variables/expr/expr.html
將此範例中指定的規則新增 (若尚不存在) 至 [重新寫入 JavaScript 來源的規則] 部分的 default_gateway_ruleset 中。
在 Portal Server 管理主控台的 Portal Server 配置下,編輯 Rewriter 服務中的 default_gateway_ruleset。
若您新增此規則,請重新啟動閘道:
./psadmin start-sra-instance –u amadmin – f <password file> –N <profile name>– t <gateway> |
<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> <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>
您可自下列路徑存取此範例:
portal-server-URL /rewriter/JavaScript/variables/dhtml/dhtml.html
請確定您已於閘道服務的 [網域與子網域的代理伺服器] 清單中定義 abc.sesta.com。若未定義,則會採用直接連接,且不前置閘道 URL。
將此範例中指定的規則新增 (若尚不存在) 至 [重新寫入 JavaScript 來源的規則] 部分的 default_gateway_ruleset 中。在 Portal Server 管理主控台的 Portal Server 配置下,編輯 Rewriter 服務中的 default_gateway_ruleset。
若您新增此規則,請重新啟動閘道:
./psadmin start-sra-instance –u amadmin – f <password file> –N <profile name>– t <gateway> |
<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> <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>
您可自下列路徑存取此範例:
portal-server-URL /rewriter/JavaScript/variables/djs/djs.html
請確定您已於閘道服務的 [網域與子網域的代理伺服器] 清單中定義 abc.sesta.com。若未定義,則會採用直接連接,且不前置閘道 URL。
將此範例中指定的兩個規則新增 (若尚不存在) 至 [重新寫入 JavaScript 來源的規則] 部分的 default_gateway_ruleset 中。在 Portal Server 管理主控台的 Portal Server 配置下,編輯 Rewriter 服務中的 default_gateway_ruleset。
重新啟動閘道:
./psadmin start-sra-instance –u amadmin – f <password file> –N <profile name>– t <gateway> |
<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> <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>
您可自下列路徑存取此範例:
portal-server-URL /rewriter/JavaScript/variables/system/system.html
將此範例中指定的規則新增 (若尚不存在) 至 [重新寫入 JavaScript 來源的規則] 部分的 default_gateway_ruleset 中。
在 Portal Server 管理主控台的 Portal Server 配置下,編輯 Rewriter 服務中的 default_gateway_ruleset。
重新啟動閘道:
./psadmin start-sra-instance –u amadmin – f <password file> –N <profile name>– t <gateway> |
<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> <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>
您可自下列路徑存取此範例:
portal-server-URL /rewriter/JavaScript/functions/url/url.html
將此範例中指定的規則新增 (若尚不存在) 至 [重新寫入 JavaScript 來源的規則] 部分的 default_gateway_ruleset 中。在 Portal Server 管理主控台的 Portal Server 配置下,編輯 Rewriter 服務中的 default_gateway_ruleset。
重新啟動閘道:
./psadmin start-sra-instance –u amadmin – f <password file> –N <profile name>– t <gateway> |
<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> <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>
您可自下列路徑存取此範例:
<portal-install-location>/SUNWportal/samples/rewriter
將此範例中指定的規則新增 (若尚不存在) 至重新寫入 JavaScript 來源的規則部分的 default_gateway_ruleset 中。
使用 Portal Server 管理主控台中的 Rewriter 服務來編輯 default_gateway_ruleset。
重新啟動閘道:
./psadmin start-sra-instance –u amadmin – f <password file> –N <profile name>– t <gateway> |
<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> <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>
您可自下列路徑存取此範例:
portal-server-URL /rewriter/JavaScript/functions/dhtml/dhtml.html
將此範例中指定的規則新增 (若尚不存在) 至 [重新寫入 JavaScript 來源的規則] 部分的 default_gateway_ruleset 中。
在 Portal Server 管理主控台的 Portal Server 配置下,編輯 Rewriter 服務中的 default_gateway_ruleset。
重新啟動閘道:
./psadmin start-sra-instance –u amadmin – f <password file> –N <profile name>– t <gateway> |
<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> <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.write 與 document.writeln,但上述陳述式並未重新寫入。這是因為這個情況下的第一個參數並非簡單 HTML。其可能是任何字串而 Rewriter 不知如何將之重新寫入。
//--> </SCRIPT> </head> <body BGCOLOR=white> <br><br> Testing document.write and document.writeln </body> </html>
您可自下列路徑存取此範例:
portal-server-URL /rewriter/JavaScript/functions/djs/djs.html
請確定您已於閘道服務的 [網域與子網域的代理伺服器] 清單中定義 abc.sesta.com。
若未定義,則會採用直接連接,且不前置閘道 URL。
將此範例中指定的規則新增 (若尚不存在) 至 [重新寫入 JavaScript 來源的規則] 部分的 default_gateway_ruleset 中。在 Portal Server 管理主控台的 Portal Server 配置下,編輯 Rewriter 服務中的 default_gateway_ruleset。
重新啟動閘道:
./psadmin start-sra-instance –u amadmin – f <password file> –N <profile name>– t <gateway> |
<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> 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>
您可自下列路徑存取此範例:
portal-server-URL /rewriter/XML/attrib.html
將此範例中指定的規則新增 (若尚不存在) 至 [重新寫入 XML 來源的規則] 部分的 default_gateway_ruleset 中。
在 Portal Server 管理主控台的 Portal Server 配置下,編輯 Rewriter 服務中的 default_gateway_ruleset。
重新啟動閘道:
./psadmin start-sra-instance –u amadmin – f <password file> –N <profile name>– t <gateway> |
<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> Rewriting starts <br> <br> <body> <xml><baseroot href="/root.html"/></xml> <xml><img href="image.html"/></xml> <xml><string href="1234|substring.html"/></xml> <xml><check href="1234|gateway-URL/portal-server-URL /rewriter/XML/string.html"/></xml>
// 重新寫入此陳述式是因為其符合規則中所指定的條件。Attribute name 是 href,tag 是 check 而 valuePatterns 是 1234。valuePatterns 之後所接的字串會被重新寫入。請參閱在規則中與式樣相符以取得 valuePatterns 的詳細資訊。
</body> Rewriting ends </html>
本節包括某範例郵件用戶端的來源 HTML 網頁。此案例研究並未囊括所有可能的情況與規則。這只是一個範例規則集,用以幫助您為自己的企業內部網路網頁收集規則。
針對此案例研究訂出下列假設狀態:
郵件用戶端的基準 URL 假設為 abc.siroe.com
閘道 URL 假設為 gateway.sesta.com
位於閘道服務的 [網域與子網域的代理伺服器] 清單中的相關項目
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <!-- saved from url=(0053)http://abc.siroe.com/mailclient/destin/?Cmd=navbar --> <HTML XMLNS:WM><HEAD> <META http-equiv=Content-Type content="text/html; CHARSET=utf-8"> <META http-equiv=Pragma content=no-cache> <META http-equiv=Expires content=0><!--Copyright (c) 2000 Microsoft Corporation. All rights reserved.--><!--CURRENT FILE== "IE5" "WIN32" navbar --> <STYLE>WM\\:DROPMENU { BEHAVIOR: url(http://abc.siroe.com/mailweb/controls/dropmenu.htc) } </STYLE> <LINK href="destin_files/navbar.css" type=text/css rel=stylesheet> <SCRIPT language=javascript> var g_szUserBase= "http://abc.siroe.com/mailclient/destin"+"/"; var g_szFolder= "."; var g_szVirtualRoot= "http://abc.siroe.com/mailweb"; var g_szImagePath= g_szVirtualRoot + "/img/"; </SCRIPT> <SCRIPT src="/destin_files/navbar.js"></SCRIPT> <META content="MSHTML 6.00.2600.0" name=GENERATOR></HEAD> <BODY oncontextmenu=return(event.ctrlKey); onselectstart=return(false); id=outbar_mainbody style="BACKGROUND-COLOR: appworkspace" leftMargin=0 topMargin=0 scroll=no> <TABLE class=nbTableMain id=nbTableMain style="HEIGHT: 100%" cellSpacing=0 cols=1 cellPadding=0 rows="2"> <TBODY> <TR> <TD class=treeBrand> <DIV class=treeOFLOW><IMG style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; PADDING-BOTTOM: 0px; PADDING-TOP: 0px" src="/destin_files/logo-ie5.gif" border=0></DIV></TD></TR> <TR height="100%"> <TD> <TABLE class=nbTable cellSpacing=0 cols=1 cellPadding=0 rows="4"> <TBODY> <TR> <TD class=nbFlybar id=show_navbar onkeydown=flybar_keydown() onclick=ToggleTab(this.id) tabIndex=0 noWrap> <DIV class=treeOFLOW>Shortcuts</DIV></TD></TR> <TR style="HEIGHT: 100%"> <TD id=idOutbarpane style="TEXT-ALIGN: center" vAlign=top><A id=inbox href="http://abc.siroe.com/mailclient/destin/Inbox/?Cmd=contents&Page=1" target=viewer alt="Go to inbox"><IMG class=nbImage alt="Go to inbox" src="destin_files/navbar-inbox.gif"></A> <DIV class=nbLabel>Inbox</DIV><BR><A id=calendar href="http://abc.siroe.com/mailclient/destin/Calendar/?Cmd=contents" target=viewer alt="Go to calendar"><IMG class=nbImage alt="Go to calendar" src="destin_files/navbar-calendar.gif"></A> <DIV class=nbLabel>Calendar</DIV><BR><A id=contacts href="http://abc.siroe.com/mailclient/destin/Contacts/?Cmd=contents" target=viewer alt="Go to contacts"><IMG class=nbImage alt="Go to contacts" src="destin_files/navbar-contacts.gif"></A> <DIV class=nbLabel>Contacts</DIV><BR><A id=options href="http://abc.siroe.com/mailclient/destin/?Cmd=options" target=viewer alt="Go to options"><IMG class=nbImage alt="Go to options" src="destin_files/navbar-options.gif"></A> <DIV class=nbLabel>Options</DIV></TD></TR> <TR style="HEIGHT: 1.5em"> <TD class=nbFlybar id=show_folders onkeydown=flybar_keydown() onclick=ToggleTab(this.id) tabIndex=0 noWrap> <DIV class=treeOFLOW>Folders</DIV></TD></TR> <TR> <TD class=nbTreeProgress id=treeProgress style="DISPLAY: none" vAlign=top noWrap><SPAN id=idLoading style="OVERFLOW: hidden">Loading...</SPAN> </TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE> </BODY></HTML>
描述顯示範例規則集與案例研究之間的對應關係。
表 4–3 範例規則集與案例研究之間的對映
套用規則集的優先順序為 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 中的頁面。
按一下 [儲存] 完成作業。
從終端機視窗重新啟動閘道:
./psadmin start-sra-instance –u amadmin – f <password file> –N <profile name>– t <gateway> |
Secure Remote Access 伺服器支援 Sun Java System Web Server 和 IBM 應用程式伺服器上 Outlook Web Access (OWA) 的 MS Exchange 2000 SP3 以及 MS Exchange 2003 安裝。
以管理員身份登入 Portal Server 管理主控台。
選取 [Secure Remote Access] 標籤,並選取要設定屬性的閘道設定檔。
在 [對映 URI 至規則集] 欄位中,輸入安裝 Exchange 2000 的服務其名稱,隨後輸入 Exchange 2000 Service Pack 4 OWA 規則集。
例如:
exchange.domain.com|exchange_2000sp3_owa_ruleset. |
在 Exchange 端,「公用資料夾」被配置為使用 NTLM 授權。必須將它變更為使用 HTTP Basic Authorization。
要執行此作業,請至 Exchange 伺服器,選取 [控制台] -->[系統管理工具],然後開啟 [網際網路資訊服務]。
在 [預設網站] 下,有一個名為 [公用] 的「公用資料夾」標籤。按一下滑鼠右鍵,然後選取 [內容]。按一下 [目錄安全性] 標籤。在 [匿名存取及認證] 控制台上,選取 [編輯...]。消取選取所有其他選項,僅勾選 [Basic Authentication]。
下表列出 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 程序檔 |
本章說明 NetFile 及其作業。要配置 NetFile,請參閱第 14 章, 配置 NetFile。
NetFile 是一個檔案管理應用程式,可以讓使用者存取並操作遠端檔案系統和目錄。
Secure Remote Access 的 NetFile 元件以 Java2 Applet 的形式提供。Java2 applet 有比較好的介面,同時新增了存取的便利性。
NetFile 提供了下列的主要功能:
便於新增或移除共享或資料夾
檔案上傳與下載
搜尋檔案和資料夾
使用 GZIP 和 ZIP 壓縮檔案
在 NetFile 環境中的郵件功能
儲存目前 NetFile 階段作業的資訊
檔案的「拖放」
NetFile 允許使用 FTP, NFS 與 jCIFS (Microsoft Windows) 協定存取遠端系統。其中包含下列檔案存取協定功能:
如果伺服器在非標準的連接埠上執行,連線會失敗。
NetFile 能讓使用者任意選擇檔案伺服器和協定。
支援這些協定的平台列於下表。
檔案系統/協定 |
平台 |
---|---|
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 網路協定的「開放原始碼」的用戶端程式庫。
以管理員身份登入 Portal 管理主控台。
選取 [Secure Remote Access] 標籤並選取 [NetFile] 標籤。
從 [選取 DN] 下拉式方塊中選取 [組織]/[角色]/[使用者]。
將權限設定為存取/拒絕主機與服務。
按一下 [儲存]。
重新啟動閘道。
本章會介紹如何使用 Netlet 在使用者遠端桌面以及在您的企業內部網路中執行應用程式的伺服器之間,以安全的方式執行應用程式。要配置 Netlet,請參閱第 11 章, 配置 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 applet 偵聽的連接埠。用戶端機器為 localhost。
Netlet applet 負責在遠端用戶端機器和企業內部應用程式 (例如 Telnet、Graphon 或 Citrix) 之間設定加密的 TCP/IP 通道。Applet 會將封包加密並將它們傳送至閘道,並將來自閘道的回應封包解密,然後將它們傳送至本機的應用程式。
對於靜態規則,當使用者登入入口網站時,會自動下載 Netlet applet。對於動態規則,會在使用者在相對應的動態規則連結上按一下時,下載 applet。請參閱規則類型以取得靜態與動態規則的詳細資訊。
要在 Sun Ray 環境中執行 Netlet,請參閱在 Sun Ray 環境中執行 Netlet。
Netlet 規則會將需要在用戶端機器上執行的應用程式映射至相應的目標主機。這表示 Netlet 只會在已傳送至連接埠 (於 Netlet 規則中定義) 的封包上運作。這可確保取得較大的安全性。
作為管理員,您需要為 Netlet 的功能運作配置一些規則。這些規則指定了各種詳細信息,例如要使用的加密、要呼叫的 URL、要下載的 applet、目標連接埠以及目標主機。當用戶端機器上的使用者透過 Netlet 提出請求時,這些規則會協助確定如何建立連線。請參閱定義 Netlet 規則以取得詳細資訊。
此為 Netlet 的 UI 元件。提供者允許使用者透過 Portal Server 桌面配置必要的應用程式。會在提供者中建立連結,而使用者按一下連結以執行必要的應用程式。使用者也可以將桌面中動態規則的目標主機指定為 Netlet 提供者。請參閱定義 Netlet 規則。
閘道可確保為遠端用戶端機器以及閘道之間提供一條安全通道。Netlet 代理伺服器為選用選項,您可以在安裝時選擇不安裝此代理伺服器。如需 Netlet 代理伺服器的資訊,請參閱使用 Netlet 代理伺服器。
使用 Netlet 將會順序發生下列事件:
遠端使用者登入至 Portal Server 桌面。
如果已經為使用者、角色或組織定義靜態 Netlet 規則,則將會自動下載 Netlet applet 至遠端用戶端。
如果已經為使用者、角色或組織定義動態規則,則使用者需要在 Netlet 提供者中配置必要的應用程式。當使用者按一下 Netlet 提供者中的應用程式連結時,將會下載 Netlet applet。請參閱定義 Netlet 規則以取得靜態與動態規則的詳細資訊。
Netlet 會偵聽在 Netlet 規則中定義的本機連接埠。
Netlet 會通過 Netlet 規則中指定的連接埠,設定遠端用戶端與主機之間的通道。
為了使 Netlet 在運作時能夠符合不同組織中各種使用者的需要,您必須執行下列動作:
依據使用者需求確定是否需要建立靜態或動態規則。請參閱規則類型。
從 Portal Server 管理主控台配置 Netlet 服務的選項。如需配置 Netlet 的資訊,請參閱第 11 章, 配置 Netlet。
確定規則是否以組織、角色或使用者為基礎,並視需要在每個層級中做出修改。如需組織、角色和使用者的詳細資訊,請參閱「Portal Server 管理指南」。
請勿本地化在 srapNetletServlet.properties 檔案中的框架集參數的值。
偶爾 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 規則所定義的,這些規則使用 [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。 |
|
啟用延伸階段作業 |
此將控制 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 在此會嘗試依序使用 port1、port2 和 port3 連接至指定的第一台目標主機。如果此項操作失敗,Netlet 會嘗試以 port4 和 port5 依次連接至第二台主機。 您只可以為靜態規則配置多個連接埠。 |
閘道要從 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 |
|
您可以為靜態規則配置多個目標主機和連接埠。請參閱包含多個主機連線的靜態規則以取得範例。
在動態規則中,不會將目標主機指定為規則的一部分。使用者可以在 Netlet 提供者中指定必要的目標主機。在下列範例中,TARGET 為目標主機的萬用字元。
規則名稱 |
加密密碼 |
遠端應用程式 URL |
啟用下載 Applet |
啟用延伸階段作業 |
將本機連接埠對映至目標伺服器連接埠 |
---|---|---|---|---|---|
ftpdynamic |
SSL_RSA_WIT H_RC4_128_MD5 |
空 |
選取核取方塊 |
選取核取方塊 |
|
根據加密密碼,可進一步將 Netlet 規則依如下分類:
使用者可配置的密碼規則 - 在此規則中,您可指定使用者可從中選擇的密碼清單。這些選擇性密碼會在 Netlet 提供者中以清單的形式出現。使用者可以從清單中選擇必要的密碼。在下列範例中,使用者可以從多個密碼中作出選擇。
規則名稱 |
加密密碼 |
遠端應用程式 URL |
啟用下載 Applet |
啟用延伸階段作業 |
將本機連接埠對映至目標伺服器連接埠 |
---|---|---|---|---|---|
Telnet |
SSL_RSA_WITH_RC4 _128_SHA |
空 |
選取核取方塊 |
選取核取方塊 |
|
SSL_RSA_WITH_RC4 _128_MD5 |
雖然 Portal Server 主機可能已經啟用不同的密碼,但是使用者僅能從配置為 Netlet 規則部分的清單中選擇。
請參閱支援的密碼以取得 Netlet 所支援的密碼的清單。
規則名稱 |
加密密碼 |
遠端應用程式 URL |
啟用下載 Applet |
啟用延伸階段作業 |
將本機連接埠對映至目標伺服器連接埠 |
---|---|---|---|---|---|
Telnet |
SSL_RSA_WITH_RC4_128_MD5 |
空 |
選取核取方塊 |
選取核取方塊 |
|
請參閱支援的密碼以取得 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 |
請勿選取核取方塊 |
選取核取方塊 |
|
將被解譯為:
規則名稱 |
加密密碼 |
遠端應用程式 URL |
啟用下載 Applet |
啟用延伸階段作業 |
將本機連接埠對映至目標伺服器連接埠 |
---|---|---|---|---|---|
Telnet |
預設密碼 |
telnet://localhost:30000 |
請勿選取核取方塊 |
選取核取方塊 |
|
這類似於 [加密密碼] 欄位已選擇為 [預設] 的 [管理員配置的規則]。
Netlet 規則無法包含任何大於 64000 的連接埠號碼。
本節包括一些 Netlet 規則的範例,以說明 Netlet 的語法。
本規則支援從用戶端至機器 sesta 的 Telnet 連線。
規則名稱 |
加密密碼 |
遠端應用程式 URL |
下載 Applet |
延伸式階段作業 |
將本機連接埠對映至目標伺服器連接埠 |
---|---|---|---|---|---|
myrule |
SSL_RSA_WITH_RC4_128_MD5 |
空 |
請勿選取核取方塊 |
true |
|
其中
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 |
本規則支援從用戶端至兩台機器,即 sesta 和 siroe 的 Telnet 連線。
規則名稱 |
加密密碼 |
遠端應用程式 URL |
啟用下載 Applet |
啟用延伸階段作業 |
將本機連接埠對映至目標伺服器連接埠 |
---|---|---|---|---|---|
myrule |
SSL_RSA_WITH_RC4_128_MD5 |
空 |
請選取核取方塊 |
選取核取方塊 |
|
其中
23 是目標主機上用於連線的連接埠號碼 – Telnet 的保留連接埠。
1111 為用戶端上的連接埠,Netlet 會在此偵聽來自第一個目標主機 sesta 的連線請求。
1234 為用戶端上的連接埠,Netlet 會在此偵聽來自第二個目標主機 siroe 的連線請求。
此規則中的前六個欄位與基本靜態規則中的相同。差別在於有三個欄位用於識別第二個目標主機。
當您新增其他目標至規則時,必須為每個新目標主機新增三個欄位:local port、destination host 與 destination port。
您可以有多組此三個欄位,以描述與每個目標主機的連線。如果遠端用戶端是以 UNIX 為基礎,則不可以使用低於 2048 的偵聽連接埠號,原因是數字較低的連接埠將會受到限制,並且您必須是超級使用者才能夠啟動偵聽程式。
此規則的作用與先前的規則相同。Netlet 提供者並不顯示任何連結,但是 Netlet 會自動在指定的兩個連接埠 (1111 和 1234) 上啟動與偵聽。使用者必須啟動用戶端軟體 (在此案例中是連線至連接埠 1111 上的 localhost,或連接埠 1234 上的 localhost 的 Telnet 階段作業) 以連線至第二個範例中的主機。
使用此規則以指定多個替代主機。如果與規則中第一個主機的連線失敗,Netlet 會嘗試連接指定的第二個主機,以此類推。
其中
10491 為用戶端上的連接埠,Netlet 會在此偵聽來自目標主機的連線請求。
Netlet 會嘗試以相同順序連線至連接埠 35、26 和 491 上的 siroe,視何者可用而定。
如果無法建立與 siroe 的連線,Netlet 會嘗試以相同順序連線至連接埠 35 和 491 上的 sesta。
主機之間的加號 (+) 表示替代的主機。
連接埠號之間的加號 (+) 指出用於單一目標主機的替代連接埠。
連接埠號之間的減號 (-) 為不同目標主機連接埠號的分隔符號。
會按次序連線至鏈接中所提供的主機。例如,如果規則是 siroe+ sesta,則會先嘗試 siroe。如果連線失敗,則會嘗試連線至 sesta。如果規則中先列出的主機無法在使用中的網路實際使用,則連線至下一個可用主機的時間會隨著規則中的不可用主機數增加而增加。
此規則可以讓使用者配置必要的目標主機,讓使用者可以通過 Netlet 遠程登入不同主機。
規則名稱 |
加密密碼 |
遠端應用程式 URL |
啟用下載 Applet |
啟用延伸階段作業 |
將本機連接埠對映至目標伺服器連接埠 |
---|---|---|---|---|---|
myrule |
SSL_RSA_WITH_RC4_128_MD5 |
telnet://localhost:30000 |
請勿選取核取方塊 |
選取核取方塊 |
|
其中
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 連接埠。
在新增規則之後,使用者必須完成某些步驟,使得 Netlet 能夠如預期般執行。使用者需要在用戶端執行下列動作:
在標準 Portal Server 桌面的 Netlet 提供者區段中,按一下 [編輯]。
新的 Netlet 規則會列在 [新增新目標] 區段中的 [規則名稱] 底下。
變更規則名稱,然後鍵入目標主機的名稱。
儲存變更。
使用者會返回桌面,此時您可以在 Netlet 提供者區段中看見此新連結。
按一下新連結。
會啟動一個新的瀏覽器,並進至 Netlet 規則中所提供的 URL。
透過重複上述步驟,您可以在相同的規則中新增一個以上的目標主機。只有最後選取的連結為使用中。
本規則定義從用戶端至動態配置的主機之間的連線。規則會從 applet 所在的伺服器上將 GO-Joe applet 下載至用戶端。
規則名稱 |
加密密碼 |
遠端應用程式 URL |
啟用下載 Applet |
延伸式階段作業 |
將本機連接埠對映至目標伺服器連接埠 |
---|---|---|---|---|---|
gojoe |
SSL_RSA_WITH_RC4_128_MD5 |
/gojoe.html |
|
選取核取方塊 |
|
其中
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 規則。
表格中有 7 欄,與 Netlet 規則的下列欄位相對應。規則名稱、URL、下載 Applet、本機連接埠、目標主機、目標連接埠。最後一欄包含規則的說明。
Netlet 規則範例不會列出 Netlet 規則的 [密碼] 與 [延伸階段作業] 欄位。假設提供的範例中這兩個欄位是「SSL_RSA_WITH_RC4_128_MD5」和「true」。
netlet applet 或 jws 的用戶端記錄會顯示於用戶端的 java 主控台上。
netlet 的伺服器記錄會顯示於 /var/opt/SUNWportal/portals/<portal_ID>/logs/<INSTANCE_ID> 目錄下的 portal.0.0.log 檔案中。
如果您希望執行的應用程式將 applet 下載至 Sun Ray 環境中的用戶端機器上,您需要變更 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> <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>