7

Glassfish 3 で JavaEE 6 Web アプリケーションを実行しています。jdbcRealm とデフォルトのプリンシパルからロールへのマッピングで JAAS を使用しています。私のデータベースには、ユーザー名をロールにマッピングするためのテーブルがあります。

 username | role
----------+-------
 john     | admin
 mary     | user

なぜこれらのロールを再度リストに記載する必要があるのweb.xmlですか?

<security-role>
  <role-name>admin</role-name>
</security-role>
<security-role>
  <role-name>user</role-name>
</security-role>

それがなければ、isUserInRole()常に を返しますfalse

4

1 に答える 1

8

でセキュリティ ロールを再定義しませんweb.xml。それらをリストして、アプリケーションサーバーがコードでの使用を認識できるようにします。

保護されたアプリケーションをデプロイすると、アプリケーション サーバーはデプロイメント記述子を読み取り、セキュリティ コンフィグレーションに関する情報を要求します。アプリケーションで使用されるロールを認識します。その後、アプリケーションはロールを使用し、アプリケーション サーバーがロールをユーザーおよびグループにマップできることを期待できます (ユーザーはセキュリティで最も優れた構成要素であるため、最終的にはユーザーに再度解決されます)。

ユーザーへのロールのマッピングと言えば、レルムの出番です。レルムはマッピングを提供するため、デプロイメント記述子のロール X がデータベースのロール X にマップされ、ユーザー A と B にマップされることがわかります。

そうは言っても、jdbcRealm で使用されるデータベースにはまったく同じ役割があります。これらの役割は、アプリケーション サーバーがアプリケーション内の役割にマップする必要があるユーザーへのキーだからです。

コードとデプロイメント記述子で使用するのは、jdbcRealm によって提供されるマッピングを介して実際のユーザーに解決されるユーザー グループの論理名です。

于 2013-03-06T04:38:44.983 に答える