web-dev-qa-db-ja.com

JACCプロバイダーは、デプロイされているサーバーのプリンシパルからロールへのマッピング機能をどのように使用できますか?

JACCプロバイダーを作成しています。

途中で、これは PolicyConfiguration を実装することを意味します。

PolicyConfigurationは、どのロールにどの権限が付与されるかなど、アプリケーションサーバーからの構成情報を受け入れる役割を果たします。これは Policy が後で渡されたときに承認を決定できるようにするためです 現在のユーザーに関する情報 と彼が何をしようとしているのか。

ただし、役割とその権限、およびそれらの役割に割り当てられているPolicyConfigurationの間のマッピングを維持することは、Principalsの(凶悪な)コントラクトの一部ではありません。

通常、常に、実際には、アプリケーションサーバーがこのマッピングを格納します。たとえば、Glassfishでは、Sun-web.xmlSun-ejb-jar.xmlなどをJava EEモジュールで提供します。これらのベンダー固有のファイルはたとえば、superusersは、adminsのアプリケーションロールが割り当てられるグループです)。

これらのファイルが提供する機能を再利用したいのですが、できるだけ幅広いアプリケーションサーバーで使用したいと考えています。

これが-完全に恣意的-この問題に対するIBMの見解です。これは、 私がしたいことは本質的に不可能 であるという私の疑念を確認するようです。 (この特定のJava EE契約は、それが印刷されている紙の価値がありません。)

私の質問:PolicyConfiguration内から、GlassfishとJBossをはじめに-このプリンシパルからロールへのマッピング情報を取得するにはどうすればよいですか?私が知らない標準的な方法がある場合、私はすべての耳を持っています。

154
Laird Nelson

簡単に言えば、標準的な方法はありません。

GlassfishとJBossはプリンシパルからロールへのマッピングをサポートしていますが、JACCはすべてのコンテナがそうであるとは想定していないため、これらのマッピングを保持する責任をJACCプロバイダーの実装に委任します。ドキュメントから(参照: PolicyConfiguration.addToRoleメソッド ):

ロールに追加されたすべての権限が「ロールにマップされた」プリンシパルに確実に付与されるようにするのは、ポリシープロバイダーの仕事です。

つまり、コンテナごとにJACCプロバイダー内で自分で実装する必要があります。たとえば、JBossの場合、 AbstractRolesMappingProvider のサブクラスの1つを使用できます。

3
Diego