あなたは、本質的に宣言的に指定認証と認可の要件を強制するために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でこのトピックの詳細を読むことができます。
あなたの答えをありがとう。実際に私がしたいのは、ユーザーと呼ばれる1つのグループを持つことです。そして、すべてのユーザーがこのグループの一部です。それは、私のアプリケーションからのアカウントを持っている(戦争である)誰もが、パスワードとユーザーを使って接続できることを意味します。その後、自分で管理した後、誰がアプリケーションにアクセスできるのですか。 – user789148
コードを使用する場合は、glassfish-web.xmlを私に渡してください。私のアプリケーションに接続しようとすると、次のエラーが発生します。指定されたリソースへのアクセス(要求されたリソースへのアクセスが拒否されました)は禁止されています。それは私にログイン画面を与えていません – user789148
申し訳ありません。私はそれを今得ます。私はちょうど私のユーザーからのマッピングを追加する必要があり、それは動作します:)たくさんあなたが揺れている – user789148