SRA(Secure Remote Access)의 Rewriter 구성 요소를 통해 최종 사용자가 게이트웨이를 가리키도록 웹 페이지의 URI(Uniform Resource Identifier)를 수정하여 인트라넷을 찾아볼 수 있습니다. URI는 등록된 이름 공간에서 이름을 캡슐화하고 여기에 이름 공간으로 레이블을 설정하는 방법을 정의합니다. URI의 가장 일반적인 유형으로는 URL(Uniform Resource Locator)이 있습니다. Rewriter는 HTTP 또는 HTTPS만 지원합니다. 이러한 지원은 프로토콜에서 대소문자를 구분하지 않고 이루어집니다. Rewriter는 상대 URL의 일부인 경우에만 백슬래시를 지원합니다.
http://abc.sesta.com\\index.html이 다시 작성됩니다.
다시 작성되지 않는 URL: http:\\\\abc.sesta.com. http:/abc.com
HTTP 표준에 따르면 HTTP 헤더 또는 HTML 메타 태그에서 웹 페이지에 사용할 문자 집합을 지정해야 합니다. 하지만 이 정보를 사용할 수 없는 경우도 있습니다. 데이터의 암호화를 설정하고 만든 사람의 의도에 맞게 데이터를 표시하려면 문자 집합을 알아야 합니다.
문자 집합을 검색하려면 SUNWjchdt 패키지를 Java Enterprise System Accessory CD에서 설치하십시오. 이 제품이 설치되면 Rewriter에서 필요한 경우 이를 검색하여 사용합니다.
이 제품을 사용하면 성능이 저하될 수 있기 때문에 필요한 경우에만 설치해야 합니다. 설치, 구성 및 사용에 관한 자세한 내용은 jcharset_readme.txt를 참조하십시오.
사용자가 게이트웨이를 통해 인트라넷 웹 페이지에 액세스하려고 할 때 Rewriter가 웹 페이지를 사용할 수 있도록 해줍니다. 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에 다음과 같이 게이트웨이에 대한 참조를 갖는 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을 확인합니다. "http" 및 "/"를 검색하여 대부분의 URL이 간단하게 확인할 수 있습니다.
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입니다. 이 이름은 규칙 집합에서 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>