データベース認証用の JAAS カスタム・ログイン・モジュールの開発
データベースに認証するためのユーザー名とパスワードを追加するための Java™ 認証・承認サービス (JAAS) カスタム・ログイン・モジュールを開発できます。
このタスクについて
認証が必要なデータベース接続が作成されたときに呼び出せる JAAS カスタム・ログイン・モジュールを開発できます。 JAAS カスタム・ログイン・モジュールは、ユーザー名、パスワード、および管理接続ファクトリーが入ったパスワード・クレデンシャルを作成する責任を担います。 このログイン・モジュールでは、データベースへの認証に使用されるサブジェクトのプライベート・クレデンシャル・セットに、パスワード・クレデンシャルを追加する必要があります。
手順
- javax.security.auth.spi.LoginModule インターフェースを実装するクラスを作成します。
- 必要なフィールドを initialize メソッドで保存します。
以下に例を示します。
/** {@inheritDoc} */ @SuppressWarnings("unchecked") @Override public void initialize(Subject subject, CallbackHandler callbackHandler, Map<String, ?> sharedState, Map<String, ?> options) { this.callbackHandler = callbackHandler; this.subject = subject; this.sharedState = (Map<String, Object>) sharedState; this.options = options; }
- login メソッドで WSManagedConnectionFactoryCallback と
WSMappingPropertiesCallback のコールバックを処理します。
以下に例を示します。
/** {@inheritDoc} */ @Override public boolean login() throws LoginException { ... Callback callbacks[] = new Callback[2]; callbacks[0] = new WSManagedConnectionFactoryCallback("Target ManagedConnectionFactory: "); callbacks[1] = new WSMappingPropertiesCallback("Mapping Properties (HashMap): "); callbackHandler.handle(callbacks);
- login メソッドで管理接続ファクトリーとプロパティーを取得します。
以下に例を示します。
// The method getManagedConnectionFactory must be used as shown for compatibility with WebSphere traditional ManagedConnectionFactory managedConnectionFactory = ((WSManagedConnectionFactoryCallback) callbacks[0]).getManagedConnectionFacotry(); Map properties = ((WSMappingPropertiesCallback) callbacks[1]).getProperties();
- 認証データ別名またはその他の基準に基づいてユーザー名とパスワードを取得します。
以下に例を示します。
String alias = (String) properties.get(com.ibm.wsspi.security.auth.callback.Constants.MAPPING_ALIAS); String user = getUser(alias); // Implementation specific char[] password = getPassword(alias); // Implementation specific
- ユーザー名とパスワードで javax.resources.spi.PasswordCredential オブジェクトを作成し、管理接続ファクトリーを設定します。
以下に例を示します。
javax.resource.spi.security.PasswordCredential passwordCredential = new PasswordCredential(user, password); passwordCredential.setManagedConnectionFactory(managedConnectionFactory);
- commit メソッドでサブジェクトにパスワード・クレデンシャルを追加します。以下に例を示します。
/** {@inheritDoc} */ @Override public boolean commit() throws LoginException { // Verify that the login was successful before adding the PasswordCredential to the subject. subject.getPrivateCredentials().add(passwordCredential); return true; }
関連タスク:


http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twlp_dev_jaas_custom_login_module
ファイル名: twlp_dev_jaas_custom_login_module.html