ヘッダーをスキップ
Oracle® Fusion Middleware WebCenter Sites開発者ガイド
11gリリース1 (11.1.1.8.0)
E49681-03
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
次
 

31 配信システムにおけるユーザー管理

WebCenter Sitesでは、USERタグによる認証機能、DIRタグによるユーザー・プロファイル管理が用意されており、アクセス制御リスト(ACL)によりデータベース表およびレンダリングされたページのセキュリティが強化されています。これらのユーザー管理とセキュリティのメカニズムを使用して、ユーザーを管理し、配信システムおよびWebCenter Sitesの開発システムと管理システムに対する訪問者のアクセスを制御します。

この章には次の項が含まれます。

31.1 ディレクトリ・サービスAPI

ディレクトリ・サービスAPIは、WebCenter Sitesシステムで認証情報、ユーザー情報などが格納されているディレクトリ・サーバーへの接続を有効化します。

WebCenter Sitesは3つのディレクトリ・サービスのプラグインを配信しており、そのうちの1つはWebCenter Sitesシステムがインストールされたときにインストールされています。

プラグインはWebCenter Sitesシステムのインストール時にインストールされ、構成するにはdir.iniファイルでプロパティを設定します。ユーザー管理設定の構成の詳細は、『Oracle Fusion Middleware WebCenter Sites管理者ガイド』を参照してください。

この項の内容は、次のとおりです。

31.1.1 エントリ

ディレクトリのエントリは、割り当てられた属性(特にユーザーおよびグループ・タイプのエントリ)を備えた名前付きオブジェクトです。

  • ユーザー・タイプ・オブジェクトには、識別名および一連の属性として一般名、ユーザー名、パスワード、電子メールなどが備わっています。

  • WebCenter Sites ACLと同様、グループ・タイプ・オブジェクトにも識別名と一連の属性があります。

名前は関連付けられている階層を反映しています。ディレクトリ実装での移植性を確保するために、名前は不透明な文字列として処理する必要があります。

31.1.2 階層

一部のディレクトリ・データベースは、階層構造を使用してエントリを編成します。WebCenter Sitesのディレクトリ・サービスAPIでは、エントリの属性と階層内でのその場所は個別になっています。その結果、エントリの属性の取得によってその子の情報は発生しません。

階層に対するサポートは、基礎となるディレクトリの実装に応じて異なります。たとえば、LDAPディレクトリは階層構造をサポートしますが、WebCenter Sitesのネイティブ・ディレクトリ・データベースは階層構造をサポートしません。

ディレクトリ実装での移植性を確保するために、コードは階層データのサポートを想定していません。

グループ階層は、内部のWebCenter Sitesの権限に影響を及ぼしません。

31.1.3 グループ

WebCenter Sitesのディレクトリ・サービスAPIは、参照整合性を実行しません。ディレクトリ・タグを持つユーザーを削除する場合、アプリケーションでは、関連付けられたグループからの最初のユーザー削除によってグループ・メンバーシップも確実に削除される必要があります。

メンバーがグループに追加されるたびに、JNDI実装では、addmemberタグに渡される名前とは関係なく、uniquemember属性の値に対して完全に識別される名前が作成されます。

31.1.4 ディレクトリ・サービス・タグ

WebCenter Sitesでは、XMLおよびJSPの両バージョンで、ディレクトリ・サービスAPIの起動に使用できるDIRタグ・ファミリが配信されます。

DIRタグは、次のとおりです。

タグ 説明

DIR.ADDATTRS

dir:addattrs

属性を既存のエントリ(ユーザーまたはグループのいずれか)に追加します。

DIR.ADDGROUPMEMBER

dir:addgroupmember

メンバーをグループ(通常はユーザー)に追加します。

DIR.CHILDREN

dir:children

リスト変数の特定の親に対する子エントリを取得します。

DIR.CREATE

dir:create

ディレクトリ・エントリを作成します。

DIR.DELETE

dir:delete

ディレクトリ・エントリを削除します。

DIR.GETATTRS

dir:getattrs

リスト変数の特定のエントリに対する属性値を取得します。

DIR.GROUPMEMBERS

dir:groupmembers

指定されたグループのメンバーのリストを作成します。

DIR.GROUPMEMBERSHIPS

dir:groupmemberships

エントリ(グループまたはユーザーのいずれか)が属するすべてのグループのリストを作成します。

DIR.LISTUSERS

dir:listusers

ディレクトリ内のすべてのユーザーのリストを返します。

DIR.REMOVEATTRS

dir:removeattrs

エントリの属性値を削除します。

DIR.REMOVEGROUPMEMBER

dir:removegroupmember

グループのエントリを削除します。

DIR.REPLACEATTRS

dir.replaceattrs

エントリ(ユーザーまたはグループのいずれか)の属性値を置換します。

DIR.SEARCH

dir:search

指定された検索基準と一致するエントリのディレクトリを検索します。


ディレクトリがLDAP、WebCenter Sitesのみ、またはその他のディレクトリ・サーバーのいずれを実装しているかに関係なく、DIRタグで記述するコードは酷似しています。

これらのタグの詳細は、Oracle Fusion Middleware WebCenter Sitesタグ・リファレンスを参照してください。コード・サンプルは、第31.1.5.4項「ディレクトリ・サービスのコード・サンプル」を参照してください。

31.1.5 ディレクトリの操作

一部のWebCenter Sitesディレクトリ・サービスのタグは、データベースに情報を書き込みます。データベース管理者が、データベースへのユーザー情報の追加など、Webサイトへの書込み操作をすべて処理している場合、ディレクトリ・タグの使用を読取り専用の操作に制限します。
このポリシーによって、サードバーティのディレクトリ管理ツールとの同期化に関する問題が回避されます。

読取り専用操作については、この項で説明します。資格証明と現在の認証済ユーザーの読取り権限を使用して、操作を実行します。

31.1.5.1 検索

一部のディレクトリ・サーバーの制限のため、組織の最上位レベルからの検索は許可されていません。移植性の問題を回避するために、DIR.SEARCHタグのコンテキスト属性を必ず指定してください。

31.1.5.2 ルックアップ

ユーザーのルックアップには、通常、次の2つの手順を実行します。

  1. エントリ名を取得するには、useridDIR.SEARCHをコールします。

  2. 問題のユーザーの属性を取得するには、DIR.GETATTRSをコールします。

31.1.5.3 ユーザーのリスト作成

ユーザーのリストを作成するには、次の3つの方法のいずれかを使用することをお薦めします。

  • 小規模のユーザー・データベースの場合、DIR.LISTUSERSタグを使用します。これは、peopleParentプロパティに従ってすべてのユーザーのリストを再帰的に作成します。このタグの使用は、より大規模なユーザー・データベースでは非効率的です。

  • より大規模なユーザー・データベースの場合、階層の移動にはDIR.CHILDRENタグを使用します。DIR.CHILDRENタグはグループ・タイプには最適ですが、ユーザー・タイプには適していません。

  • フラットな階層を持つユーザー・データベースの場合、検索結果を絞り込みます。

31.1.5.4 ディレクトリ・サービスのコード・サンプル

次のJSPコード・サンプルは、可能なディレクトリ操作を示しています。

<%
String sMainTestUserName = "ContentServer";
String sMainTestUserPW="FutureTense";

String sPeopleParent = ics.GetProperty("peopleparent", "dir.ini", true);
String sGroupParent = ics.GetProperty("groupparent", "dir.ini", true);
String sUsername = ics.GetProperty("username", "dir.ini", true);
String sCommonName = ics.GetProperty("cn", "dir.ini", true);
IList mylist;
%>

<user:su username='<%=sMainTestUserName%>' password='<%=sMainTestUserPW%>'>

<H2>List All Users</H2>

<ics:clearerrno/>
<dir:listusers list='mylist'/>
<br>
<b>dir:listusers errno: <ics:getvar name='errno'/></b>
<ics:listloop listname='mylist'>
<br><ics:listget listname='mylist' fieldname='NAME'/>
</ics:listloop>

<H2>Look Up the ContentServer User by Username</H2>

<ics:clearerrno/>
<dir:search list='mylist' context='<%=sPeopleParent%>'>
<dir:argument name='<%=sUsername%>' value='ContentServer'/>
</dir:search>
<br><b>dir:search errno: <ics:getvar name='errno'/></b>

<%
mylist = ics.GetList("mylist");
if(mylist.numRows() != 1) {
        out.print("<br>Error finding entry.");
}
mylist.moveTo(1);
ics.SetVar("ContentServerDn", mylist.getValue("NAME"));
%>

<H2>Show ContentServer Attributes</H2>

<ics:clearerrno/>
<dir:getattrs list='mylist' 
name='<%=ics.GetVar("ContentServerDn")%>'/>
<br><b>dir:getattrs errno: <ics:getvar name='errno'/></b>
<ics:listloop listname='mylist'>
<br>
<ics:listget listname='mylist' fieldname='NAME'/>=
<ics:listget listname='mylist' fieldname='VALUE'/>
</ics:listloop>

<H2>Show Group Memberships for ContentServer</H2>

<ics:clearerrno/>
<dir:groupmemberships name='<%=ics.GetVar("ContentServerDn")%>'
list='mylist'/>
<br><b>dir:groupmemberships errno: <ics:getvar name='errno'/></b>
<ics:listloop listname='mylist'>
<br>
<ics:listget listname='mylist' fieldname='NAME'/>
</ics:listloop>

<H2>Lookup the SiteGod Group by CommonName</H2>

<ics:clearerrno/>
<dir:search list='mylist' context='<%=sGroupParent%>'>
<dir:argument name='<%=sCommonName%>' value='SiteGod'/>
</dir:search>
<br><b>dir:search errno: <ics:getvar name='errno'/></b>

<%
mylist = ics.GetList("mylist");
if(mylist.numRows() != 1) {
        out.print("<br>Error finding entry.");
}
mylist.moveTo(1);
ics.SetVar("SiteGodDn", mylist.getValue("NAME"));
%>

<H2>Show SiteGod Attributes</H2>

<ics:clearerrno/>
<dir:getattrs list='mylist' name='<%=ics.GetVar("SiteGodDn")%>'/>
<br>
<b>dir:getattrs errno: <ics:getvar name='errno'/></b>
<ics:listloop listname='mylist'>
<br>
<ics:listget listname='mylist' fieldname='NAME'/>=
<ics:listget listname='mylist' fieldname='VALUE'/>
</ics:listloop>

<H2>Show SiteGod Group Members</H2>

<ics:clearerrno/>
<dir:groupmembers name='<%=ics.GetVar("SiteGodDn")%>' list='mylist2'/>
<br>
<b>dir:groupmembers errno: <ics:getvar name='errno'/></b>
<ics:listloop listname='mylist2'>
<br>
<ics:listget listname='mylist2' fieldname='NAME'/>
</ics:listloop>

<H2>Children of groupparent </H2>

<ics:clearerrno/>
<dir:children name='<%=sGroupParent%>' list='mylist'/>
<br>
<b>dir:children errno: <ics:getvar name='errno'/></b>
<ics:listloop listname='mylist'>
<br>
<ics:listget listname='mylist' fieldname='NAME'/>
</ics:listloop>

</user:su>

31.1.6 エラーの処理

どのディレクトリ・タグでも、設定時に様々なディレクトリ・エラーが発生する可能性があります。ディレクトリ・サービスのエラー・メッセージの包括的なリストは、Oracle Fusion Middleware WebCenter Sitesタグ・リファレンスを参照してください。

ディレクトリ・サービスのコードによって、指定されたタグ・コールでリストされたそれぞれのエラー・コードが処理される必要があります。これは、J2EE JNDIインタフェースをサポートするために必要です。

31.1.7 ディレクトリ・サービス・アプリケーションのトラブルシューティング

ディレクトリ・サービス・アプリケーションのトラブルシューティングの最初の手順は、エラー・ログ(WebCenter Sitesのログ・ファイル内の)のチェックです。

ディレクトリ・サービスのロギングを有効にするには、log.filterLevelプロパティ(logging.iniプロパティ・ファイル内にある)を設定します。次のように、7レベルのエラー・メッセージがあります。

  • fatal: 致命的なレベルのメッセージのログ

  • severe: 重度および致命的なレベルのメッセージのログ

  • error: エラーおよび致命的なレベルのメッセージのログ

  • warning: 警告および致命的なレベルのメッセージのログ

  • info: 警告、エラー、重度および致命的なレベルのメッセージのログ

  • trace: トレース・メッセージのログ

  • 詳細: すべてのタイプのメッセージのログ

トラブルシューティング時には、traceが最も詳細な設定であり、そのためパフォーマンスへの影響は最も高くなります。

ディレクトリ・サービスは、エントリの使用を次の書式で記録します。

[<timestamp>][Directory-<severity>-<errno>]
[<class>:<method>][<message>][<session id>]

例:

[Jan 17, 2002 1:49:44 PM][Directory-T]
[BaseFactory:instantiateImplementation(ICS,String,Class[],
Object[])][Instantiating:com.openmarket.directory.common.Factory]
[PEccxyF1Ueh7zYvjNgg4D6bqZzf0llfWMaiBimIN9H1Z9KomDcPy]

前のメッセージはトレース(T)であるため、関連付けられたerrno値はありません。

エラー・ロギングの詳細は、第10章「エラー・ロギングおよびデバッグ」を参照してください。

LDAP実装の共通の問題は、ディレクトリ・サーバーで誤って指定される権限です。エラー・ログが権限問題を示している場合には、ディレクトリ・サーバーの権限の設定をチェックして、認証されたユーザーがリクエストされた操作を実行する権限を持っていることを確認します。ディレクトリ・サーバーに直接ログインして(WebCenter Sites外)、権限が正しく設定されていることを確認するために同じアクションを実行します。ログと権限をチェックした後は、プロパティ・ファイルを調べることで、多くの場合構成エラーを解決できます。

プロパティの説明と値は、『Oracle Fusion Middleware WebCenter Sitesプロパティ・ファイル・リファレンス』を参照してください。

31.2 訪問者のオンライン・サイトへのアクセスの制御

WebCenter Sitesは、アクセス制御リスト(ACL)でユーザーを管理します。ACLを使用すると、WebCenter Sitesデータベース内の表と、WebCenter Sitesによりサイトで処理したレンダリング済ページへのアクセスを制限できます。

訪問者がユーザー名とパスワードを使用してログインするオンライン・サイトを設計する場合、登録済訪問者を1つまたは複数のACLに関連付けることができます。

訪問者が最初にサイトを訪れると、WebCenter Sitesではセッションが作成され、その訪問者は標準デフォルト・ユーザーDefaultReaderとして暗黙的にログインされます。USER.LOGINコマンドが使用されて訪問者がパスワードで認証されると、訪問者のIDが更新されます(関連付けられたACLが有効になります)。

この項の内容は、次のとおりです。

31.2.1 ACLタグ

WebCenter Sitesには、ACLの作成に使用できる一連のアクセス制御リストのタグ(XMLおよびJSPの両バージョン)が用意されています。配信システムのWebCenter SitesインタフェースかWebCenter Sites ACLタグのいずれかを使用して、配信システムの訪問者アカウントで必要なACLを作成できます。

次の表は、ACLタグのリストです。

タグ 説明

ACL.CREATE

acl:create

ACLを作成します

ACL.DELETE

acl:delete

ACLを削除します

ACL.GATHER

acl:delete

ACLにフィールドを収集します

ACL.GET

acl:get

ACLからフィールドをコピーします

ACL.LIST

acl:list

ACLのリストを取得します

ACL.LOAD

acl:load

ACLをロードします

ACL.SAVE

acl:save

ACLを保存します

ACL.SCATTER

acl:scatter

ACLからフィールドを散布します

ACL.SET

acl:set

ACL内のフィールドを設定します


詳細の参照先:

  • ACLタグ: Oracle Fusion Middleware WebCenter Sitesタグ・リファレンスを参照してください。

  • ACL全般: 『Oracle Fusion Middleware WebCenter Sites管理者ガイド』を参照してください。

31.2.2 USERタグ

WebCenter Sitesでは、ページでユーザーのログインおよびログアウトに使用する、次のUSERタグ(XMLおよびJSPの両バージョン)タグも用意されています。

USERタグは、次のとおりです。

タグ 説明

USER.LOGIN

user:login

ユーザーをログインさせます。

USER.LOGOUT

user:logout

ユーザーをログアウトさせます。

USER.SU

user:su

アカウント作成、ユーザー・プロファイルの編集などの操作を実行するために、特定のユーザーとしてユーザーをログインさせます。


これらのタグの詳細は、Oracle Fusion Middleware WebCenter Sitesタグ・リファレンスを参照してください。

31.2.3 WebCenter Sitesおよび暗号化

WebCenter Sitesには、パスワードやその他の機密関係の情報を暗号化するデフォルト・キーが用意されています。独自の暗号化キーを指定するには、UtilitiesクラスのencryptStringメソッドを使用します。暗号化を処理するJavaメソッドの情報は、Oracle Fusion Middleware WebCenter Sites Java APIリファレンスを参照してください。

また、WebCenter SitesではSecure Sockets Layer (SSL)もサポートされており、これによってWebサーバーを出入りする情報の暗号化が許可されます。WebCenter SitesおよびSSLの詳細は、『Oracle Fusion Middleware WebCenter Sites管理者ガイド』を参照してください。

31.3 ログイン・フォームの作成

この項では、訪問者にログインをプロンプトしてユーザー名とパスワードを認証するログイン・フォームのコード化の方法を示す、簡単なコード・サンプルについて説明します。

この例は、次のエレメントのコードを示しています。

この項の内容は、次のとおりです。

31.3.1 ログインのプロンプト(PromptForLogin.xml)

PromptForLoginエレメントは、訪問者にユーザー名とパスワードという2つの情報の入力を求めるフォームを表示します。

フォームを作成するコードは、次のとおりです。

<DIV ALIGN="center">
<FORM ACTION="ContentServer" METHOD="post">
<INPUT TYPE="hidden" NAME="pagename" VALUE="CSGuide/Security/Login"/>

<TABLE CELLPADDING="5" CELLSPACING="5">

<TR>
<TH ALIGN="right">Name</TH>
<TD><INPUT TYPE="text" NAME="username" SIZE="16"/></TD>
</TR>

<TR>
<TH ALIGN="right">Password</TH>
<TD><INPUT TYPE="password" NAME="password" SIZE="16"/></TD>
</TR>

<TR>
<TD>&nbsp;</TD>
<TD ALIGN="center"><INPUT TYPE="submit" NAME="doit" VALUE="Login"/></TD>
</TR>

</TABLE>

</FORM>
</DIV>

訪問者はフォームに記入して、「送信」ボタンをクリックします。フォームとLoginページ(前述の最初のinput type文を参照)のページ名で収集された情報がブラウザに送信されます。ブラウザからWebCenter Sitesにページ名が送信されると、WebCenter Sitesはその名前をSiteCatalog表で検索し、そのページ・エントリのルート・エレメントを起動します。

31.3.2 ログイン・ページのルート・エレメント

WebCenter Sitesページのルート・エレメントは1つ(つまり、SiteCatalog表内のエントリ)のみです。Login pageのルート・エレメントは、Login.xmlエレメントです。

Loginエレメントは訪問者のログインを試行し、次に訪問者がいずれかの必須ACLを持っているかどうかを確認するUSERISMEMBERタグを使用して、訪問者を認証します。

このエレメントは、次の操作を実行します。

  • USER.LOGINタグで訪問者をログインさせ、エラーがなかったかチェックします。

  • ACLのリストを保持する変数リストを設定し、訪問者の資格証明を比較します。

  • リスト変数に対する訪問者のACL割当てを、USERISMEMBERタグを使用してチェックします。

次のサンプル・コードは、訪問者を認証します。

<SETVAR NAME="errno" VALUE="0"/>

<USER.LOGIN USERNAME="Variables.username" PASSWORD="Variables.password"/>

<IF COND="Variables.errno=0">
                <THEN>
                <H3>Welcome <CSVAR NAME="Variables.username"/></H3>

<!-- Next, create a variable named aclToCheck and set it to hold the ACLs that the visitor needs to progress any further on the site. This variable can be set to one ACL or to a comma-separated list of ACLs, as in this example-->

<SETVAR NAME="aclToCheck" VALUE="ContentCustomer,SiteGod"/>
<SETVAR NAME="errno" VALUE="0"/>

<USERISMEMBER GROUP="Variables.aclToCheck"/>
<IF COND="Variables.errno=1">
        <THEN>
        <P>You are a member of the at least one of the following acls:       
        <CSVAR NAME="Variables.aclToCheck"/></P>
        </THEN>
    <ELSE>
                        <P>Sorry, you are not a member of any of the following acls:
                        <CSVAR NAME="Variables.aclToCheck"/></P>
    </ELSE>
    </IF>

</THEN>
<ELSE>

    <H3>Sorry, can't find your credentials.</H3>

</ELSE>
</IF>

31.4 ユーザー・アカウント作成フォームの作成

この項では、訪問者に登録するようプロンプトするフォームのコード化の方法を示す簡単なコード・サンプルについて説明します。

この例は、次のエレメントのコードを示しています。

この項の内容は、次のとおりです。

31.4.1 PromptForNewAccount

PromptForNewAccountエレメントは、ユーザー名とパスワードの入力と確認のためのパスワードの再入力を訪問者に求めるフォームを表示します。

フォームを作成するコードは、次のとおりです。

<div align="center">
<h3>Create a New Account</h3>
<FORM ACTION="ContentServer" METHOD="post">
<input type="hidden" name="pagename" value="CSGuide/Security/CreateAccount"/>

<table cellpadding="5" cellspacing="5">

<tr>
<th align="right">Pick a username</th>
<td><input type="text" name="username" size="16"/></td>
</tr>

<tr>
<th align="right">Pick a password</th>
<td><input type="password" name="password" size="16"/></td>
</tr>

<tr>
<th align="right">Confirm your new password</th>
<td><input type="password" name="confirm_password" size="16"/></td>
</tr>

<tr>
<td>&nbsp;</td>
<td><input type="submit" name="doit" value="Create Account"/></td>
</tr>
</table>

</FORM>
</div>

訪問者はフォームに記入して、「送信」ボタンをクリックします。フォームとCreateAccountページ(前述の最初のinput type文を参照)のページ名で収集された情報がブラウザに送信されます。

ブラウザからWebCenter Sitesにページ名が送信されると、WebCenter Sitesはその名前をSiteCatalog表で検索し、そのページ・エントリのルート・エレメントを起動します。

31.4.2 CreateAccount Pageのルート・エレメント

WebCenter Sitesページのルート・エレメントは1つ(つまり、SiteCatalog表内のエントリ)のみです。CreateAccount pageのルート・エレメントは、CreateAccount.jspエレメントです。

SiteGodまたはContentEditor ACLを持つユーザーのみが、新規ユーザー・アカウントを作成できます。この制限があるため、CreateAccountエレメントは次の操作を実行します。

  • 訪問者に気付かれずに、権限を持つユーザーとして訪問者をログインさせます。

  • アカウントを作成します。

  • 新規ユーザーに適切なACLを割り当てます(どのユーザーも最低1つのACLに属す必要があります)

新規ユーザー・アカウントを作成するコードは、次のとおりです。

<SETVAR NAME="errno" VALUE="0"/>

<!-- switch temporarily to a privileged user -->
<!-- The username and password for the privileged user should be encrypted in a property file. You should obtain them from the property file, decrypt them, then pass them it. For this example, they are hard-coded. -->

<USER.SU USERNAME="jumpstart" PASSWORD="jumpstart">

<USERISMEMBER GROUP="UserEditor"/>
<IF COND="Variables.errno!=1">
<THEN>
        <h3>An error has occurred creating the account (no UserEditor
        privs).  Contact the webmaster</h3>
</THEN>
<ELSE>
    <IF COND="Variables.password!=Variables.confirm_password">
        <THEN>
        <h3>Your passwords do not match. Click the Back button and 
        try again.</h3>
        </THEN>
        <ELSE>

<!-- Get the parameters from the property file -->

                <ics.getproperty name="username" file="dir.ini"
                output="unameattr"/>
                <ics.getproperty name="password" file="dir.ini"
                output="passattr"/>

<!-- create the user's name in the right format for the dir tags -->

                <ics.getproperty name="peopleparent" file="dir.ini"
                output="namebase"/>
                <name.makechild context="Variables.namebase" output="iname">
                        <name.argument name="Variables.unameattr"
                        value="Variables.username"/>
                </name.makechild>
        
<!-- create the user -->

                <dir.create name="Variables.iname">
                <dir.argument name="Variables.unameattr"
                value="Variables.username"/>
                <dir.argument name="Variables.passattr"
                value="Variables.password"/>

<!-- additional parameters can be added here but for the example we won't -->
<!-- In particular, if you are using LDAP, you will have to spin through and set the values of the properties in the property requiredPeopleAttrs in dir.ini. -->

        </dir.create>

        <IF COND="Variables.errno=0">
        <THEN>

<!-- give the new user an acl and format it correctly for dir.addgroupmember -->

                        <ics.getproperty name="groupparent" file="dir.ini"
                        output="groupparent"/>
                        <ics.getproperty name="cn" file="dir.ini" output="cn"/>
                        <name.makechild context="Variables.groupparent"
                        output="groupid">
                                <name.argument name="Variables.cn" value="Browser"/>
                        </name.makechild>

<!-- add the acl -->

                        <dir.addgroupmember name="Variables.groupid"
                        member="Variables.iname"/>

                        <IF COND="Variables.errno=0">
                                <THEN>
                <h3>Success!</h3>
                                </THEN>
                                <ELSE>
                                        <h3>User created but error adding user to group. 
                                        Contact the webmaster</h3>
                                </ELSE>
                        </IF>

                </THEN>
                <ELSE>
                        <h3>Error creating user!  Contact the webmaster.</h3>
                </ELSE>
        </IF> <!-- create success check -->

        </ELSE>
</IF> <!-- passwords match -->

</ELSE>
</IF> 

</USER.SU>

31.5 Burlington Financialサンプル・サイトにおける訪問者のアクセス

Burlington Financialサンプル・サイトには、新規メンバーのサインアップおよび既存メンバーのログインを実行するエレメントを使用するメンバーシップ・コンポーネントが用意されています。

これらの訪問者登録エレメントは、実際のWebサイトで使用できるほど強力ではありませんが、独自のデザインの開始ポイントとして使用できます。たとえば、Burlington Financialには訪問者アカウントのサンプル画面があり、これを使用すると、訪問者はそれぞれのプリファレンスを登録して設定できます。ただし、この情報を使用して、特定のWebページに対する訪問者のアクセスを制限したり、メンバーのプロファイルに基づいて推奨したりすることはありません。

この項の内容は、次のとおりです。

31.5.1 メンバーシップ表

Burlington Financialでは、bfmembersという名前の表を使用して、メンバーシップ・コンポーネントを実装します。(この表は、インストール時にサンプル・サイトに対して作成されたものです。WebCenter Sitesモジュールや製品によってこの表が使用されることはありません。)メンバーシップ・エレメントによって、新規登録のメンバーのプロファイル情報ごとに行がbfmembersデータベース表に追加されますが、SystemUsers表には行が追加されません。

31.5.2 ユーザーとパスワード

すべてのBurlington Financialメンバーに対して1人の一般ユーザー(BFUser)がいます。名前とパスワードは同じもの(BFUser/BFUser)であり、変更できません。Burlington Financialのメンバー・ログイン・コードは訪問者のセッション変数を設定し、その訪問者の識別に使用されます。

Burlington Financialはサンプル・サイトのため、メンバーのパスワードはbfmembers表にプレーン・テキストとして保存されます。実際のWebサイトでは、パスワードは暗号化された形式で保存されます。Burlingtonでは、訪問者、BFメンバーおよびブラウザACLの権限がbfmembers表に追加されたエントリに付与されます。

31.5.3 メンバー・アカウント

現在は、Burlington Financialアカウントを管理するエレメントは存在しません。メンバーのアカウントの編集や削除を試行する場合には、Oracle WebCenter Sites Explorerを使用してbfmembers表を変更します。

31.5.4 メンバーシップ処理エレメント

Burlington Financialメンバーへの処理リクエストに対応するエレメントが複数あります。Burlington Financialサンプル・サイトをインストールしてあれば、Oracle WebCenter Sites Explorerを使用して開き、調べることができます。1つを除いて、すべてが次の場所にあります。

ElementCatalog/BurlingtonFinancial/Util/Account

AccountAccessScriptエレメントは、次の場所にあります。

ElementCatalog/BurlingtonFinancial/Util

AccountAccess.xml

これは、ヘッダー、フッター、ナビゲーション・メニューおよびアカウント・コンテンツのページレット・エレメントをコールするページ・テンプレートです。

AccountAccessScript.xml

このファイルには3つのJavaScriptルーチン(checkSignupFormcheckProfileFormおよびcheckLoginForm)が含まれており、HTMLアカウント・フォームで基本エラー・チェックを実行します。これは、Login.xmlエレメント、Profile.xmlエレメントおよびSignUp.xmlエレメントからコールされます。

Benefits.xml

このページは、Block.xml記事テンプレートをコールし、Burlington Financialサイトに関するテキストの記事をレンダリングします。実際のWebサイトでは、記事には役立つ情報が掲載されます。

Login.xml

このページでは、登録されたメンバーのログイン画面が表示され、ログイン・フォーム入力を処理するLoginPost.xmlがコールされます。また、Benefits.xmlをコールし、メンバー以外にはSignUp.xmlをコールします。

LoginPost.xml

このページレット・エレメントはProcessLogin.xmlをコールして、ログイン・メッセージを表示します。

Profile.xml

訪問者が登録されていれば、このページに編集可能なプロファイル・フォームが表示され、訪問者が未登録の場合はSignUp.xmlがコールされます。

ProcessLogin.xml

このページレット・エレメントは、フォームを送信した訪問者が登録済メンバーかどうかに応じて、適切なログイン・メッセージを表示します。

SignUp.xml

このページでは、未登録訪問者向けサインアップ画面が表示され、the catalogmanagerがコールされ、新規ユーザーに対してはbfmembers表に行が追加され、既存ユーザーに対してはbfmembers表が更新されます。