15.3.2. 認証メソッドの記述
components.xml 内の identity に対して指定される authenticate-method プロパティは、SeamLoginModule で使用されるメソッドを指定してユーザー認証を行います。 このメソッドはパラメータを取らないため、 認証が成功したか失敗したかを示す Boolean を返します。 ユーザー名とパスワードは Credentials.getUsername() と Credentials.getPassword() からそれぞれ取得します (credentials コンポーネントへの参照は Identity.instance().getCredentials() から 取得可能)。 ユーザーがメンバーとなるすべてのロールは Identity.addRole() で割り当ててください。 以下に POJO コンポーネント内の認証メソッドの完全な例を示します。
上記の例では、
User と UserRole はアプリケーション固有のエンティティ 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() を呼び出すと指定されたロールが直ちに現在のユーザーに付与されます。