6.3.2 EJBクライアントアプリケーションでのセキュリティの実装
EJBクライアントアプリケーションでは,J2EEサーバで定義されたユーザとパスワードを使用してユーザを認証できます。EJBクライアントアプリケーションからユーザを認証してログインすると,セキュリティロールが設定されたEnterprise Beanのメソッドを呼び出せます。
- 〈この項の構成〉
(1) 実装手順
EJBクライアントアプリケーションでのセキュリティは,Application Serverが提供するAPIを使用して実装します。ここでは,セキュリティを実装する場合の前提条件および実装方法を示します。APIの機能と文法については,マニュアル「アプリケーションサーバ リファレンス API編」の「4. EJBクライアントアプリケーションで使用するAPI」を参照してください。
セキュリティを実装する前に,次の前提条件を満たしているか確認してください。
-
J2EEサーバ側にユーザが登録されている必要があります。
-
登録されているユーザにセキュリティロールが設定されている必要があります。
EJBクライアントアプリケーションでセキュリティを実装する手順を次に示します。
-
セキュリティAPIのパッケージをインポートします。
セキュリティAPIを利用するために,次に示すパッケージをインポートします。
import com.hitachi.software.ejb.security.base.authentication.*
-
LoginInfoManagerのオブジェクトを取得します。
Enterprise Beanのメソッドを呼び出すプログラム上でLoginInfoManagerオブジェクトを取得します。取得にはLoginInfoManagerオブジェクトに用意されているスタティックメソッドのgetLoginInfoManagerメソッドを使用します。
LoginInfoManager lm = LoginInfoManager.getLoginInfoManager();
-
ユーザ名とパスワードでログインします。
LoginInfoManagerオブジェクト取得後,loginメソッドを呼び出します。
lm.login(username, password);
-
Enterprise Beanのメソッドを呼び出します。
loginメソッド成功後,Enterprise Beanのメソッドを呼び出します。
-
ログアウトします。
Enterprise Beanのメソッド呼び出しが終了したあと,logoutメソッドでJ2EEサーバからログアウトします。
lm.logout();
- 注意事項
-
EJBクライアントアプリケーションでセキュリティを実装する場合,HiEJBClientStatic.jarをクラスパスに追加してコンパイルする必要があります。
(2) サンプルプログラム
Enterprise Bean名がaccountの場合に,getAccountIDメソッドを呼び出すサンプルプログラムを次に示します。
import com.hitachi.software.ejb.security.base.authentication.*;
:
try {
LoginInfoManager lm = LoginInfoManager.getLoginInfoManager();
String userName = System.getProperty("username");
String password = System.getProperty("password");
if(lm.login(userName , password)) {
try {
System.out.println("user:" + userName + "login success");
Context ctx = new InitialContext();
java.lang.Object obj = ctx.lookup(appUnitPath + "Account");
AccountHome aHome =
(AccountHome)PortableRemoteObject.narrow(obj,AccountHome.class);
Account account = aHome.create();
account.getAccountID();
} finally {
lm.logout();
}
}
} catch(NotFoundServerException e) {
System.out.println("not found server");
} catch(InvalidUserNameException e) {
System.out.println("invalid user name");
} catch(InvalidPasswordException e) {
System.out.println("invalid password");
} catch(Exception e) {
e.printStackTrace();
}