オプションを指定して、Java スレッド ID とオペレーティング・システム・スレッド ID を同期することができます。
Enterprise JavaBeans (EJB) は、EJB メソッド呼び出しと Java 2 Platform、Enterprise Edition (J2EE) 役割を
関連付ける、メソッド・レベルの RunAs 役割の指定をサポートします。
EJB メソッドは、指定されたセキュリティー役割と関連する権限を使用して実行します。
権限は、ユーザー ID を使用して指定された役割にマップされます。
通常、この ID は Web ベースおよび J2EE のランタイムで認識され、
現行のディスパッチ・スレッドに関連付けられます。
この ID は、
J2EE セキュリティーの対象となるリソースおよび機能へのアクセスのみを管理します。実際の OS スレッド ID は、
EJB RunAs 役割選択から影響を受けることはなく、通常、サーバーの ID です。
OS ID スレッドを設定すると、J2EE 役割 ID と OS スレッド (SyncToOSThread) を同期化します。これは、
OS スレッド ID が EJB メソッド呼び出しの継続時間中に J2EE 役割 ID と関連することを意味しています
(アプリケーション・アセンブラーおよびデプロイヤーは、特定の Bean メソッド の RunAs ID にスレッド ID を指定することによって、RunAs ID をオペレーティング・システム・スレッドと関連付けます)。
この関連とは、(サーバー領域識別ではなく) 呼び出し元またはセキュリティー役割識別が、
ファイルおよびデータベース管理システムへのアクセスなどの、z/OS システム・サービス要求に使用されるということです。
WebSphere Application Server for z/OS J2EE サーバーは、この関連 (または同期) が使用可能または使用不可になるように構成できます。
デフォルトの設定では、インストール済みアプリケーションのデプロイメント記述子で設定されている RunAs ID に対する OS スレッド ID に関係なく、オペレーティング・システム・スレッドで ID を変更する機能を使用不可にします。
アプリケーション・インストーラーが同期化を使用不可にしている場合は、
オペレーティング・システム・スレッドに RunAs ID を設定するメソッドはすべて no_permission エラーで失敗します。
管理コンソールを使用すると、スレッド ID 同期化のオプションを指定できます。
- OS スレッドの同期サポート
- アプリケーション SynchToOSThread が許可されているかどうかを指定します。このセキュリティー・オプションが選択されると (つまり、true が指定されます)、
EJB および Web アプリケーション SyncToOSThread 仕様が示すとおり、
アプリケーション指定の SyncToOSThread が使用され、続いて EJB および Web コンテナーによって実行されます。
デフォルトは、false または使用不可です。
- Connection Manager Sync to OS Thread
- 接続が res-auth=container を指定するリソース参照から取得される場合、
接続マネージャーが現行の J2EE プリンシパルを OS スレッドに同期化するかどうかを指定します。
デフォルトは、false または使用不可です。
Enterprise JavaBeans (EJB) のメソッド・レベルの拡張デプロイメント記述子 (XDD) を使用して SyncToOSThread サポートを選択することもできます。EJB または Web アプリケーション標準デプロイメント記述子で定義される、識別された環境エントリーを使用して、
このサポートを使用可能にします。
アセンブリーまたはデプロイメント中に、次のように指定して、値をこの変数にバインドします。
- True と指定すると、J2EE プリンシパルまたは ID が EJB または Web アプリケーションで呼び出されるすべての要求の OS スレッドに同期化されます。
- False と指定すると、J2EE プリンシパル・アプリケーション
または ID は、EJB または Web アプリケーションで呼び出される、
いずれの要求の OS スレッドにも同期化されません。
この値がデフォルトです。
要求を処理すると、Web コンテナーは入力 URL によって表されるコンポーネントにアクセスするのに必要な役割を (あれば) 理解します。
このコンテナーは、要求側の認証を検証し、認証済みユーザーに必要な役割に対する許可が与えられているかを検証します。
この Web コンテナーは、この検証を実行するために、同じ SAF ベースのユーザー・レジストリーおよび EJB 役割プロファイルを EJB コンテナーとして使用します。
このため、エンタープライズ Bean および J2EE サービスに使用するように、Web アプリケーションの管理に同じユーザー・レジストリー
および役割プロファイルを使用できます。スレッド ID を設定する場合は、
考えられるアクティブ・ユーザー・レジストリーは以下のものを含みます。
スレッド ID 値を変更するアプリケーション・イベントは以下のものを含みます。
- 最初のメソッドが設定されたときの初期値
- デフォルトでは、サーブレット・サービス・メソッドおよび EJB ビジネス・メソッドの呼び出しは、ポリシーの属性の「Run as」フィールドに他の設定が指定されていない限り、
暗黙的に呼び出し元として実行されます (RunAsCaller)。EJB クライアント・アプリケーションは、
常にサーバーとして実行されます (RunAsServer)。Web アプリケーションの場合、セキュリティー制約が指定されていないと、
アプリケーションは、非認証ユーザー ID で実行されることがあります。
- メソッド代行が J2EE ID に変更される (RunAs Specified)
- 接続マネージャーは、コンテナー管理リソース許可 (res-auth=container) を持つリソース参照から
アプリケーションを取得する際に、OS スレッドで現行 J2EE ID を同期化します。
SynchToOSThread でマークされた EJB メソッドによって、J2EE 役割 ID を OS スレッドに同期化します。
- WSSubject.doAs()
- この設定によって、サブジェクトをリモート・アクションに関連付けるのに WSSubject.doAs() を実行する必要なく、スレッド上のリモート呼び出しにサブジェクトを関連付ける際に柔軟性を与えます。
スレッド ID は、次の状態のときに一時的にサーバーでリセットされます。
- JavaServer Pages (JSP) コンパイル
- Web コンテナー JSP コンパイルは、SyncToOSThread がサーバーに使用可能な場合 (security_EnableSyncToOSThread=1)、サーバーの ID を変更します。
- ステートフル補助記憶装置のアクセス
- EJB コンテナー・ステートフル・セッションの活動化は、SyncToOSThread が使用可能な場合、サーバーの ID を変更します。常にサーバーの ID を使用して EJB ステートフル・セッション補助記憶装置にアクセスします。
- Web アプリケーションの再ロード
- Web コンテナーが Web アプリケーションを再ロードすると、SyncToOSThread が Web アプリケーションに使用可能な場合、サーバー ID を変更します。
- 接続マネージャーの要求
- リソース参照が res-auth=application を指定すると、
スレッド ID は一時的にサーバーの ID に設定されます。
注: 管理セキュリティー を使用可能にして実行する場合は、Java 2 セキュリティーを使用可能にすることをお勧めします。
このサポートを使用可能にする場合は、注意が必要です。
その理由は、汎用の z/OS システム・リソース (ファイルやソケットなど) が、
J2EE アプリケーションを介して確立された ID にアクセスできる WebSphere Application Server ランタイムおよびこれらのシステム・リソース管理によって制御できなくなるためです。