Cosminexus システム構築ガイド
セッションフェイルオーバ用フィルタを有効にするには,次の設定が必要です。
ここでは,セッションフェイルオーバ用フィルタのWebアプリケーションへの組み込みについて説明します。
セッション情報の引き継ぎを行うWebアプリケーションへのフィルタの組み込みには,サーバ管理コマンドを使用した属性ファイルの編集による方法と,Server Plug-inを使用する方法と,WebアプリケーションのDD(web.xml)の直接編集による方法の3種類があります。ここでは,サーバ管理コマンドで属性ファイルを編集してフィルタを組み込む方法について説明します。Server Plug-inを使用したフィルタの組み込みについては,マニュアル「Cosminexus アプリケーション設定操作ガイド」を参照してください。また,WebアプリケーションのDD(web.xml)の直接編集によるフィルタの組み込みについては,マニュアル「Cosminexus 機能解説」のセッションフェイルオーバ機能を使用するアプリケーションの実装に関する説明を参照してください。
Webアプリケーションにセッションフェイルオーバ用フィルタを組み込むために,フィルタ属性ファイルおよびWAR属性ファイルに設定する内容を次の表に示します。なお,属性ファイルの取得,編集した属性ファイルの設定の手順については,「9.7.1(2) built-inフィルタの組み込み手順」を参照してください。
表9-14 属性ファイルでの設定内容(セッションフェイルオーバ用フィルタ)
| 設定項目 | 属性ファイル名 | タグ名 | 設定内容 |
|---|---|---|---|
| フィルタ定義 | フィルタ属性ファイル | <filter-name>タグ | 追加するフィルタ名称を指定します。設定値は,固定値です。
|
| <filter-class>タグ | 追加するフィルタのクラス名を指定します。設定値は,固定値です。
|
||
| セッション情報の引き継ぎの定義 | <init-param>タグ内の<param-name>タグおよび<param-value>タグ | 初期化パラメタの名称および初期化パラメタの値を指定します。セッション情報の引き継ぎに設定する項目については,表9-15および表9-16を参照してください。 | |
| フィルタマッピング定義※ | WAR属性ファイル | <filter-mapping>タグ内の<filter-name>タグ | フィルタ名称を指定します。設定値は,固定値です。
|
| <filter-mapping>タグ内の<url-pattern>タグ | URLパターンやサーブレットクラスと,セッションフェイルオーバ用フィルタのマッピングを指定します。 セッションフェイルオーバ用フィルタでは,すべてのWebアプリケーションに対してセッションフェイルオーバ用フィルタをマッピングするため,「/*」を指定してください。 設定値は,固定値です。
|
注※ フィルタマッピングを定義する場合,次の点に注意してください。
セッション情報の引き継ぎに設定する項目と<param-name>タグに指定する初期化パラメタの対応について次の表に指定します。
表9-15 セッション情報の引き継ぎに設定する項目と<param-name>タグに指定する初期化パラメタの対応
| 設定項目 | <param-name>タグに指定する初期化パラメタ | <param-value>タグに指定する内容の参照先 | |
|---|---|---|---|
| グローバルセッション情報 | 書き換え可能な情報 | GSInfoKey-RW | 9.7.2(2) |
| 読み取り専用の情報 | GSInfoKey-R | ||
| グローバルセッション情報の最大サイズ | GSInfosLengthMax | 9.7.2(3) | |
| グローバルセッション情報を格納するSFOサーバの名称 | SFOServerName | 9.7.2(4) | |
| グローバルセッションの制御方法 | GSessionControl | 9.7.2(5) | |
| グローバルセッションIDの送信に使用するCookieの名称 | GIDCookieName | 9.7.2(6) | |
| グローバルセッションIDの送信に使用するURLのパスパラメタ名 | GIDURLParamName | 9.7.2(7) | |
| グローバルセッション情報のロック待ちタイムアウト | LockTimeout | 9.7.2(8) | |
| byte型配列であるセッション情報の引き継ぎ許可 | GSInfoTypeByteArrayEnable | 9.7.2(9) | |
| 直列化可能クラスのオブジェクトであるセッション情報の引き継ぎ許可 | GSInfoTypeSerializableEnable | 9.7.2(10) | |
これらのパラメタは,使用する機能によって設定するかどうかが異なります。使用する機能ごとの<param-name>タグに指定する初期化パラメタの設定要否を次の表に示します。
表9-16 使用する機能ごとの<param-name>タグに指定する初期化パラメタの設定要否
| <param-name>タグに指定する初期化パラメタ | 使用する機能 | |
|---|---|---|
| セッションフェイルオーバ機能の設定要否 | グローバルセッション情報のサイズ見積もり機能の設定要否 | |
| GSInfoKey-RW | 任意※1 | 任意※1 |
| GSInfoKey-R | 任意※1 | 任意※1 |
| GSInfosLengthMax | 任意 | 無効※2 |
| SFOServerName | 任意 | 無効※3 |
| GSessionControl | 任意 | 任意 |
| GIDCookieName | 任意 | 任意 |
| GIDURLParamName | 任意 | 任意 |
| LockTimeout | 任意 | 無効※2 |
| GSInfoTypeByteArrayEnable | 任意 | 任意 |
| GSInfoTypeSerializableEnable | 任意 | 任意 |
注※1 GSInfoKey-RWとGSInfoKey-Rの両方を省略することはできません。
注※2 パラメタに不正な値を指定した場合はエラーとなり,Webアプリケーションは開始できません。
注※3 指定したSFOサーバ名が,簡易構築定義ファイルで指定されているSFOフィルタのサーバ定義名にない場合もエラーになりません。SFOフィルタのサーバ定義名は,簡易構築定義ファイルの論理J2EEサーバ(j2ee-server)の<configuration>タグ内に,webserver.sfo.sfo_serversパラメタで指定します。
(省略) : <init-param> <param-name>LockTimeout</param-name> <param-value></param-value> </init-param> : (省略) |
HTTPセッションに登録されるセッション情報の中から,グローバルセッション情報として,SFOサーバに引き継ぐセッション情報を選択します。また,グローバルセッション情報には,書き換え可能な情報と読み取り専用の情報の2種類があるため,グローバルセッション情報の種別を指定します。
グローバルセッション情報の設定に使用する初期化パラメタは,GSInfoKey-RWパラメタ(書き換え可能な場合)またはGSInfoKey-Rパラメタ(読み取り専用の場合)です。GSInfoKey-RWパラメタおよびGSInfoKey-Rパラメタには同じ値を指定しないでください。同じ値を指定した場合,Webアプリケーションの開始時にエラーとなり,Webアプリケーションは開始できません。また,GSInfoKey-RWパラメタおよびGSInfoKey-Rパラメタの両方を省略することはできません。
グローバルセッション情報として指定できるセッション情報と,セッション情報のデータ型,グローバルセッション情報の種別について説明します。なお,統合ユーザ管理機能を使用する場合には,セッション情報の種別,およびパラメタの設定値が決まっています。詳細については,「(d) 統合ユーザ管理機能を使用する場合のグローバルセッション情報」を参照してください。
HTTPセッションに登録されるセッション情報の中から,グローバルセッション情報として,SFOサーバに引き継ぐセッション情報を選択します。
グローバルセッション情報として指定できるセッション情報は,HTTPセッションに登録された一部,またはすべてです。HTTPセッションに登録される一部のセッション情報をグローバルセッション情報として指定する場合は,GSInfoKey-RWパラメタまたはGSInfoKey-Rパラメタで,SFOサーバに引き継ぐセッション情報のキー名称を指定します。HTTPセッションに登録されるすべてのセッション情報をグローバルセッション情報として指定する場合は,GSInfoKey-RWパラメタまたはGSInfoKey-Rパラメタで,*(半角アスタリスク)を指定します。
グローバルセッション情報を選択するときの留意事項を次に示します。
グローバルセッション情報として指定できるセッション情報には,次のデータ型が指定できます。
データ型にjava.lang.Stringクラスのオブジェクト以外を指定する場合は,どのデータ型のセッション情報に対して引き継ぎを許可するかを,GSInfoTypeByteArrayEnableパラメタまたはGSInfoTypeSerializableEnableパラメタで設定します。
グローバルセッション情報として,指定したデータ型以外のオブジェクトがHTTPセッションに登録されると,SFOサーバへのセッション情報の引き継ぎでエラーが発生し,セッション情報は保持されません。引き継ぎ対象外のオブジェクトがHTTPセッションに登録された場合の,引き継ぎ対象外のオブジェクトの扱いについては,マニュアル「Cosminexus 機能解説」を参照してください。
グローバルセッション情報のデータ型を指定するときの留意事項を次に示します。
グローバルセッション情報として選択したセッション情報を書き換え可能な情報とするか,または読み取り専用の情報とするか,どちらかを選択します。
なお,複数のグローバルセッション情報を選択した場合,それぞれのグローバルセッション情報に対して種別を指定してください。
グローバルセッション情報の種別の選択基準を次に示します。
統合ユーザ管理機能を使用する場合のセッション情報は,HTTPセッションに登録したあと変更が必要になるため,書き換え可能なグローバルセッション情報(GSInfoKey-RWパラメタ)を選択してください。また,GSInfoKey-RWパラメタには,「com.cosminexus.admin.auth.user_data」を設定してください。
SFOサーバに格納するグローバルセッション情報の一つ当たりの最大サイズを指定します。SFOサーバで冗長化できるグローバルセッション情報のサイズは,デフォルトでは1,024バイトまでです。冗長化するグローバルセッション情報の文字数がこの値を超える場合は,設定を変更する必要があります。グローバルセッション情報の最大サイズの設定に使用する初期化パラメタは,GSInfosLengthMaxパラメタです。
なお,グローバルセッション情報の最大サイズを小さくすることにより,SFOサーバのメモリの消費量を削減できます。ご使用の環境に応じて,グローバルセッション情報の最大サイズに適切な値を設定してください。
グローバルセッション情報の最大サイズの見積もり式は,統合ユーザ管理機能を使用する場合と使用しない場合とで異なります。それぞれの場合の見積もり式について説明します。
統合ユーザ管理機能を使用しない場合のグローバルセッション情報の最大サイズの見積もり式を次に示します。直列化可能クラスのオブジェクトであるセッション情報の引き継ぎを許可しているかどうか(GSInfoTypeSerializableEnableパラメタの指定)によって,見積もり式が異なります。
グローバルセッション情報の最大サイズ =各グローバルセッション情報のキー※1の文字列長の合計 +HTTPセッションに登録されたオブジェクトのサイズの最大長※2の合計 +区切り文字数※3 +HTTPセッションの有効期間情報※4 |
表9-17 文字種ごとのURLエンコード後の文字列長
| 項番 | 文字種 | 文字列長(バイト) | |
|---|---|---|---|
| 1 | ASCII文字 | 英数字(0〜9およびa〜Z)および次に示す特殊文字
|
1 |
| 上記以外のASCII文字 | 3 | ||
| 2 | JIS X 0201のすべての非ASCII文字 | 6または9 | |
| 3 | JIS X 0208のすべての非ASCII文字 | 6または9 | |
| 4 | JIS X 0212のすべての非ASCII文字 | 6または9 | |
| 5 | Windows-31Jの拡張文字 | 9 | |
| 6 | Unicodeの補助文字(基本多言語面以外の文字) | 12 | |
| 7 | JIS X 0213の第3,第4水準漢字 | 9または12 | |
グローバルセッション情報の最大サイズ =グローバルセッション情報1のキーの文字数 +グローバルセッション情報2のキーの文字数 : +グローバルセッション情報nのキーの文字数 +HTTPセッションに登録されたオブジェクト1の最大サイズ長 +HTTPセッションに登録されたオブジェクト2の最大サイズ長 : +HTTPセッションに登録されたオブジェクトnの最大サイズ長 +(2n-1) +4 |
グローバルセッション情報の最大サイズ =各グローバルセッション情報のキー※1のシリアライズ後のバイト数合計 +各HTTPセッションに登録されたオブジェクトのシリアライズ後のバイト数合計 +HTTPセッションの有効期間情報※2 |
グローバルセッション情報の最大サイズ =グローバルセッション情報1のキーのシリアライズ後のバイト数 +グローバルセッション情報2のキーのシリアライズ後のバイト数 : +グローバルセッション情報nのキーのシリアライズ後のバイト数 +HTTPセッションに登録されたオブジェクト1のシリアライズ後のバイト数 +HTTPセッションに登録されたオブジェクト2のシリアライズ後のバイト数 : +HTTPセッションに登録されたオブジェクトnのシリアライズ後のバイト数 +4 |
統合ユーザ管理機能を使用する場合のグローバルセッション情報の最大サイズの見積もり式を次に示します。
グローバルセッション情報の最大サイズ =統合ユーザ管理で使用する値 +ユーザアプリケーションで使用する値 |
統合ユーザ管理で使用する値は,統合ユーザ管理フレームワークのAPIを使用する場合とタグライブラリを使用する場合で異なります。また,パスワード保存機能を使用するかどうかによっても異なります。それぞれの場合の統合ユーザ管理で使用する値の計算式を次に示します。
統合ユーザ管理で使用する値 ={1,500+(レルム名の長さ+ユーザ名の最大長+パスワードの最大長 +1,200)×レルム数}×2 |
統合ユーザ管理で使用する値 ={1,500+(レルム名の長さ+ユーザ名の最大長+1,200)×レルム数}×2 |
統合ユーザ管理で使用する値 ={1,500+(レルム名の長さ+ユーザ名の最大長 +loginタグのid属性値の長さ+loginタグのentry属性値の長さ +パスワードの最大長+1,200)×レルム数}×2 |
統合ユーザ管理で使用する値 ={1,500+(レルム名の長さ+ユーザ名の最大長 +loginタグのid属性値の長さ+loginタグのentry属性値の長さ +1,200)×レルム数}×2 |
グローバルセッション情報を格納するSFOサーバの名称を指定します。SFOサーバの名称の設定に使用する初期化パラメタは,SFOServerNameパラメタです。
グローバルセッション情報を格納するSFOサーバは,Webアプリケーションが配置されているJ2EEサーバのグローバルセッション情報を格納するSFOサーバから選択します。
J2EEサーバのグローバルセッション情報を格納するSFOサーバは,Smart Composer機能の簡易構築定義ファイルのsfo-tierで定義します。グローバルセッション情報を格納するSFOサーバの設定については,「6.2.3 セッション情報の引き継ぎを行うJ2EEサーバの設定」を参照してください。
グローバルセッションの制御方法を指定します。グローバルセッションの制御方法の設定に使用する初期化パラメタは,GSessionControlパラメタです。
GSessionControlパラメタに指定した値に応じて,Webクライアントに対するグローバルセッションIDの送信方法,およびWebクライアントからのグローバルセッションIDの受信方法が決まります。
GSessionControlパラメタに指定できる値と意味を次の表に示します。
表9-18 GsessionControlパラメタの指定値と意味
| 指定値 | 意味 |
|---|---|
| cookie | グローバルセッション情報の制御にHTTP Cookieを使用します。 |
| url-rewriting | グローバルセッション情報の制御にURL書き換えを使用します。 |
| both | グローバルセッション情報の制御にHTTP CookieおよびURL書き換えの両方を使用します。 WebクライアントがHTTP Cookieをサポートしているかどうかを判別して,必要に応じてHTTP Cookieによる制御とURL書き換えによる制御を切り替えます。 |
HTTP Cookieを使用してグローバルセッションを制御している場合,グローバルセッションIDは,HTTPレスポンスヘッダのSet-Cookieヘッダに設定されて,Webクライアント(ブラウザなど)に送信されます。
グローバルセッションIDを設定するCookieに任意の名称を指定します。Cookieの名称の設定に使用する初期化パラメタは,GIDCookieNameパラメタです。
Cookieの名称は,Webアプリケーション単位に指定できます。ただし,次に示すCookieの名称と同じ値を指定することはできません。
なお,グローバルセッションIDの送信に使用するCookieの名称が,上記のCookieの名称と重複した場合,Webアプリケーションに定義したセッションフェイルオーバ用フィルタ(J2EE仕様で規定されたjavax.servlet.Filterインタフェースを実装したクラス)の開始処理でエラーとなり,Webアプリケーションを実行できません。
グローバルセッションIDの送信に使用するURLのパスパラメタ名を指定します。URLのパスパラメタ名の設定に使用する初期化パラメタは,GIDURLParamNameパラメタです。
GSessionControlパラメタに「cookie」を指定した場合,GIDURLParamNameパラメタに設定した値は無効になります。なお,GSessionControlパラメタに「cookie」を指定した場合,GIDURLParamNameパラメタに設定した値はチェックされません。このため,GIDURLParamNameパラメタに不正な値を設定した場合も,検出はされません。
すでにロックされた状態のセッションに対して,別のJ2EEサーバからロック要求があった場合に,ロック解除待ちがタイムアウトになるまでの時間を設定します。グローバルセッション情報のロック待ちタイムアウトの設定に使用する初期化パラメタは,LockTimeoutパラメタです。
J2EEサーバからSFOサーバに対してグローバルセッション情報のロック取得要求をしたあとでJ2EEサーバに障害が発生して停止した場合,SFOサーバ上のグローバルセッション情報がロックされたままの状態になってしまうおそれがあります。グローバルセッション情報のロック待ちタイムアウト時間は,このような場合に,J2EEサーバに障害が発生したと判断するために使用される時間です。このタイムアウト時間を超えると,SFOサーバ上のロックは解除されます。
また,次のような場合にロックされたままの状態になったときにも,このタイムアウト時間が有効になります。これらの状態は,負荷分散機を利用している環境で発生することがあります。
なお,クライアントから同時に実行されることが想定されるWebアプリケーションがある場合,その処理に要する時間を考慮して,グローバルセッション情報のロック待ちタイムアウト時間を指定してください。
byte型配列であるセッション情報を引き継ぎ対象とするかどうかを指定します。
GSInfoTypeByteArrayEnableパラメタにtrueを指定した場合には,byte型配列のセッション情報は引き継ぎ対象となります。
GSInfoTypeByteArrayEnableパラメタにfalseを指定した場合には,byte型配列のセッション情報は引き継ぎ対象となりません。このため,byte型配列のセッション情報の場合は,グローバルセッション情報の更新時にエラーとなります。
直列化可能クラスのオブジェクトであるセッション情報を引き継ぎ対象とするかどうかを指定します。
GSInfoTypeSerializableEnableパラメタにtrueを指定した場合には,直列化可能クラスのオブジェクトであるセッション情報は引き継ぎ対象となります。
GSInfoTypeSerializableEnableパラメタにfalseを指定した場合には,直列化可能クラスのオブジェクトであるセッション情報は引き継ぎ対象となりません。
属性ファイルの記述例を示します。
統合ユーザ管理機能を使用しない場合の属性ファイルの記述例を次に示します。この例は,HTTP Cookieを使用してグローバルセッションを制御し,byte型配列のセッション情報を引き継ぐ場合の例です。
(省略)
:
<filter>
<filter-name>com.hitachi.software.was.sfo.web.SFOFilter</filter-name>
<filter-class>com.hitachi.software.was.sfo.web.SFOFilter</filter-class>
<init-param>
<param-name>GSInfoKey-RW</param-name>
<param-value>page</param-value>
</init-param>
<init-param>
<param-name>GSInfoKey-R</param-name>
<param-value>userId;roll</param-value>
</init-param>
<init-param>
<param-name>GSInfosLengthMax</param-name>
<param-value>44</param-value>
</init-param>
<init-param>
<param-name>SFOServerName</param-name>
<param-value>sfo_server1</param-value>
</init-param>
<init-param>
<param-name>GSessionControl</param-name>
<param-value>cookie</param-value>
</init-param>
<init-param>
<param-name>GIDCookieName</param-name>
<param-value>SFOSESSIONID</param-value>
</init-param>
<init-param>
<param-name>LockTimeout</param-name>
<param-value>180</param-value>
</init-param>
<init-param>
<param-name>GSInfoTypeByteArrayEnable</param-name>
<param-value>true</param-value>
</init-param>
:
(省略)
|
(省略)
:
<filter-mapping>
<filter-name>com.hitachi.software.was.sfo.web.SFOFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
:
(省略)
|
この記述例で設定される内容は,次のとおりです。
統合ユーザ管理機能を使用する場合の属性ファイルの記述例を次に示します。この例は,HTTP Cookieを使用してグローバルセッションを制御している場合の例です。
(省略)
:
<filter>
<filter-name>com.hitachi.software.was.sfo.web.SFOFilter</filter-name>
<filter-class>com.hitachi.software.was.sfo.web.SFOFilter</filter-class>
<init-param>
<param-name>GSInfoKey-RW</param-name>
<param-value>com.cosminexus.admin.auth.user_data</param-value>
</init-param>
<init-param>
<param-name>GSInfoKey-R</param-name>
<param-value></param-value>
</init-param>
<init-param>
<param-name>GSInfosLengthMax</param-name>
<param-value>10380</param-value>
</init-param>
<init-param>
<param-name>SFOServerName</param-name>
<param-value>sfo_server1</param-value>
</init-param>
<init-param>
<param-name>GSessionControl</param-name>
<param-value>cookie</param-value>
</init-param>
<init-param>
<param-name>GIDCookieName</param-name>
<param-value>GSESSIONID</param-value>
</init-param>
<init-param>
<param-name>LockTimeout</param-name>
<param-value>30</param-value>
</init-param>
<init-param>
<param-name>GSInfoTypeByteArrayEnable</param-name>
<param-value>false</param-value>
</init-param>
</filter>
:
(省略)
|
(省略)
:
<filter-mapping>
<filter-name>com.hitachi.software.was.sfo.web.SFOFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
:
(省略)
|
この記述例で設定される内容は,次のとおりです。
All Rights Reserved. Copyright (C) 2006, 2007, Hitachi, Ltd.