- - PR -
EJBの配備記述子で指定するrole-nameはどうやって指定するのでしょうか?
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2006-02-16 01:46
EJBコンポーネントでアクセス制御を行うために、EJBの配備記述子にrole-nameを定義しますが、EJBクライアントからこのrole-nameに定義する値をどうやって指定するのでしょうか?
唯一それらしい値を渡しているところと言えば、InitialContextのコンストラクタに渡すプロパティのキー"java.naming.security.principal"の値ぐらいでしょうか。 初歩的な質問でお恥ずかしい限りですが、どなたかご存知の方がいらっしゃいましたらご教授ください。 よろしくお願いいたします。 |
|
投稿日時: 2006-02-16 05:39
role-name はエンタープライズアプリケーション内でローカルな名前になります。
なのでアプリケーション内ではハードコードして構いません。 もちろん、typoに起因するバグを防ぐため定数を定義したインターフェースなどを使うのが無難ですが。 |
|
投稿日時: 2006-02-16 08:29
インギさん、ご返答ありがとうございます。
ハードコードするということですが、実際にEJBクライアント側ではどのようなコードになるのでしょうか。 java.security.Principalにセットするのでしょうか? (その場合、どうやってPrincipalをEJBコンポーネントに渡すのでしょうか?) それとも前述のInitialContextのコンストラクタに渡すPropertyにセットするのでしょうか? 質問ばかりで恐縮ですが、よろしくお願いいたします。 |
|
投稿日時: 2006-02-16 08:49
ごめんなさい、見当違いの回答でしたね。
クライアント側では InitialContext を取得する際にプリンシパルを指定いたします。 コンテクスト取得時に渡す Map に Context.SECURITY_PRINCIPAL をキーとして格納しておきます。 http://edocs.beasys.co.jp/e-docs/wls/docs81/jndi/jndi.html#467275 |
|
投稿日時: 2006-02-16 12:21
疑問が氷解しました。本当にありがとうございます。
もう1点疑問があるのですが、InitialContextにセットするMapのキーContext.SECURITY_CREDENTIALSの値は何を指定するのでしょうか? ejb-jar.xmlでrole-nameは定義していますが、コンフィデンシャル(パスワード?)に相当する値は定義していません。 ベンダ固有の配備記述子(WebLogicならweblogic-ejb-jar.xml)でrole-nameとのマッピングを定義するのかなと思っていますが、合っていますでしょうか? 度々恐縮ですが、よろしくお願いいたします。 |
|
投稿日時: 2006-02-16 14:21
先に示したリンクに書いてありますが、大抵はパスワードを指定します。
ejb-jar.xml に指定するのは role 名です。アプリケーションサーバの DD で role が実際どのプリンシパル(ユーザとかグループとか)に対応するかを指定しているのではないでしょうか。 で、アプリケーションサーバのユーザ名とパスワードを指定すれば良いわけです。 |
|
投稿日時: 2006-02-17 02:17
なるほど、理解できました。
アプリケーションサーバに登録されているユーザ名はejb-jar.xmlとベンダ固有のDDでロール名でマッピングしているのですね。 一方パスワードはInitialContextで設定したキー"Context.SECURITY_CREDENTIALS"の値がアプリケーションサーバに登録されているユーザのパスワードとして使われるのですね。 やっと1本の線でつながりました。 今回はご親切にご回答いただき、本当にありがとうございました。>インギ様 |
|
投稿日時: 2006-02-17 03:06
その通りです。
なんでそんな回りくどいことをしているのかは、すでに推測がついているかもしれませんが複数のエンタープライズアプリケーション内で role 名が衝突しても大丈夫にするためです。 アプリケーション毎に role の意味は異なってきますが、同じ role 名に対して同じプリンシパルしか設定できないとなると困ったことになりますからね。 こんな感じになんでもかんでも遠回しに参照していくところが J2EE の嫌われるところでも、好かれるところでもあります。 |
1