2011-07-18 11 views
17

私はglassfishとjaasモジュールで作業しています。Glassfish 3.1デフォルトプリンシパルからロールへのマッピング

このようにしてweb.xmlを構成しました。

つまり、自分のWebアプリケーションにアクセスするすべてのユーザーは、グループユーザーである必要があります。私はオプションをチェックする必要がGlassFishのコンソール上で次に

: 設定 - >サーバー設定 - >セキュリティ - >デフォルトプリンシパル役割マッピングの

私は、このデフォルトの主体をチェックする必要がある理由私の質問がありますロールマッピング?そして、それをチェックするのを避けるためにweb.xmlをどのように変更することができますか?

どうもありがとう

ロイック

答えて

37

あなたは、本質的に宣言的に指定認証と認可の要件を強制するためにJAASの使用に依存宣言セキュリティを使用しているweb.xmlにおける役割と役割を指定します。

デプロイメント記述子で指定された役割は、アプリケーションで使用されている役割の単なる表現です。これらの役割は、実行時に使用されるユーザー識別データベース(または認証領域)に存在するものと同じである必要はなく、実際のユーザーとは関係なくアプリケーションの開発が行われた可能性があります。ユーザーIDデータベースに存在するグループ。

通常、コンテナ固有のデプロイメント記述子を使用して、web.xmlで指定された宣言的ロールとuser-identityデータベースに存在するプリンシパルまたはグループ間でマッピングが実行されます。 Glassfish 3,1では、これはglassfish-web.xmlというファイルです。このような各マッピングは、アプリケーションの宣言的役割を、glassfish-web.xml(WARファイルのデプロイメントの場合)またはglassfish-application.xml(EARファイルのデプロイメントの場合)またはglassfish-ejb-jar.xml(forのいずれか)のJAASレルムのプリンシパルまたはグループにマップします。 EJB JARファイルの展開):

のglassfish-web.xmlの

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd"> 
<glassfish-web-app error-url=""> 
... 
    <security-role-mapping> 
     <role-name>user</role-name> 
     <principal-name>Root</principal-name> <!-- Map a principal to the role 'user' --> 
     <group-name>Administrators</group-name> <!-- Map a group to the role 'user' --> 
    </security-role-mapping> 
... 
</glassfish-web-app> 

のglassfish-application.xmlの

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE glassfish-application PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Java EE Application 6.0//EN" "http://glassfish.org/dtds/glassfish-application_6_0-1.dtd"> 
<glassfish-application> 
... 
    <security-role-mapping> 
     <role-name>user</role-name> 
     <principal-name>Root</principal-name> <!-- Map a principal to the role 'user' --> 
     <group-name>Administrators</group-name> <!-- Map a group to the role 'user' --> 
    </security-role-mapping> 
... 
</glassfish-application> 

のGlassFish-EJB-jar.xmlの

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE glassfish-ejb-jar PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 EJB 3.1//EN" "http://glassfish.org/dtds/glassfish-ejb-jar_3_1-1.dtd"> 
<glassfish-ejb-jar> 
... 
    <security-role-mapping> 
     <role-name>user</role-name> 
     <principal-name>Root</principal-name> <!-- Map a principal to the role 'user' --> 
     <group-name>Administrators</group-name> <!-- Map a group to the role 'user' --> 
    </security-role-mapping> 
... 
</glassfish-ejb-jar> 

上記記述子は、名前Rootの個々の同一性を有するとレルムの名前Administrators持つユーザーグループにプリンシパルにロールuserをマッピングします。これらのマッピングのいずれかを省略し、プリンシパルマッピングへのロールのみ、またはグループマッピングへのロールを保持することができます。また、同じロールに複数のプリンシパルをマップしたり、同じロールにマップされた複数のグループ、または同じロールにマップされた複数のプリンシパルとグループを持つこともできます。

JAAS領域のプリンシパルとグループの概念を理解することが重要です。プリンシパルは、システム内のSubject(アプリケーションにログインしているユーザー)のIDを表し、個々のID )またはグループID(ユーザーグループ)のいずれかです。宣言的役割を実際のプリンシパルまたはグループにマッピングすることにより、任意のユーザ識別データベース(すなわち、どのレルム)に対してもweb.xmlで指定されたルールを適用し、コードベースを変更することなく動的に行うことができます。結局のところ、そのような変更は、宣言的な役割を新たなプリンシパルおよびグループのセットに、おそらく異なる領域で再マッピングする必要があります。 the chapter on security in the Java EE 6 tutorialで、Java EEセキュリティとJAASがどのように連携しているかについての基本的なチュートリアルを見つけることができます。

Glassfishでは、コンテナ固有の配備記述子(この場合はglassfish-web.xml)内のすべての宣言的ロール(この場合はglassfish-web.xml)のマッピングを実行する必要がない簡略化されたマッピングスキームが可能です。宣言的な役割は、プリンシパルまたはグループの名前に似ています。これは、プリンシパルとロールのマッピング方式のデフォルトです。あなたの場合、あなたの領域のプリンシパル/グループはweb.xmlで指定された宣言的ロールと同じであるため、ロールをプリンシパルとグループに明示的にマッピングすることは避けられます。簡単に言えば、ロールuserが、あなたのJAAS領域(および他のアイデンティティについても同様)のuserまたはユーザグループuserと同じ場合は、Glassfishのプリンシパルマッピングスキームにデフォルトロールを使用できます。あなたのweb.xmlファイル内の役割

デフォルトのプリンシパルからロールへのマッピングの配備オプションに目を向けるのを避けるには、通常は他のアプリケーションサーバーの場合と同様に、コンテナ固有の配備記述子でプリンシパル/グループマッピングにロールを指定する必要があります。

one of the posts on blogs.oracle.com that describes this feature of Glassfishでこのトピックの詳細を読むことができます。

+0

あなたの答えをありがとう。実際に私がしたいのは、ユーザーと呼ばれる1つのグループを持つことです。そして、すべてのユーザーがこのグループの一部です。それは、私のアプリケーションからのアカウントを持っている(戦争である)誰もが、パスワードとユーザーを使って接続できることを意味します。その後、自分で管理した後、誰がアプリケーションにアクセスできるのですか。 – user789148

+0

コードを使用する場合は、glassfish-web.xmlを私に渡してください。私のアプリケーションに接続しようとすると、次のエラーが発生します。指定されたリソースへのアクセス(要求されたリソースへのアクセスが拒否されました)は禁止されています。それは私にログイン画面を与えていません – user789148

+0

申し訳ありません。私はそれを今得ます。私はちょうど私のユーザーからのマッピングを追加する必要があり、それは動作します:)たくさんあなたが揺れている – user789148

関連する問題