15.3.2. 認証メソッドの記述


components.xml 内の identity に対して指定される authenticate-method プロパティは、SeamLoginModule で使用されるメソッドを指定してユーザー認証を行います。 このメソッドはパラメータを取らないため、 認証が成功したか失敗したかを示す Boolean を返します。 ユーザー名とパスワードは Credentials.getUsername()Credentials.getPassword() からそれぞれ取得します (credentials コンポーネントへの参照は Identity.instance().getCredentials() から 取得可能)。 ユーザーがメンバーとなるすべてのロールは Identity.addRole() で割り当ててください。 以下に POJO コンポーネント内の認証メソッドの完全な例を示します。
@Name("authenticator")
public class Authenticator {
  @In EntityManager entityManager;
  @In Credentials credentials;
  @In Identity identity;

  public boolean authenticate() {
    try {
      User user = (User) entityManager.createQuery(
          "from User where username = :username and password = :password")
          .setParameter("username", credentials.getUsername())
          .setParameter("password", credentials.getPassword())
          .getSingleResult();

      if (user.getRoles() != null) {
        for (UserRole mr : user.getRoles())
          identity.addRole(mr.getName());
        }

        return true;
      } catch (NoResultException ex) {
        return false;
      }

   }

}
Copy to Clipboard Toggle word wrap
上記の例では、UserUserRole はアプリケーション固有のエンティティ Bean です。 パラメータ roles はユーザーがメンバーとなるロールで埋められます。 たとえば、「admin」や「user」など Set にリテラル文字列値として追加されます。 ユーザー記録が見つからず NoResultException が送出される場合は、 認証メソッドは false を返して認証が失敗したことを示します。

注記

認証メソッドを記述する場合、副次的な影響を受けない最小限の認証メソッドにすることが重要です。 認証メソッドは 1 回の要求で複数回呼び出される可能性があるため、 認証が成功あるいは失敗した時に実行される特殊なコードには、すべてイベントオブザーバーを実装させてください。Seam Security により発生するイベントについての詳細は本章の後半 「セキュリティイベント」 を参照してください。

15.3.2.1. Identity.addRole()

Identity.addRole() メソッドの動作は現在のセッション認証により異なります。 セッションが認証されていない場合、 addRole() は認証過程でのみ呼び出されるはずです。 ここで呼び出されると、 ロール名は事前認証されたロールの一時リストに配置されます。 認証が成功したら事前認証されたロールが「実際の」ロールとなり、 これらのロールに対する Identity.hasRole() 呼び出しは true を返します。 以下のシーケンス図に、認証過程におけるその位置付けを明確にするため 1 番目のクラスオブジェクトとして事前認証されたロールリストを示します。
現在のセッションがすでに認証されている場合には、Identity.addRole() を呼び出すと指定されたロールが直ちに現在のユーザーに付与されます。
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat