Cosminexus 機能解説

[目次][用語][索引][前へ][次へ]

13.8.3 ユーザ属性の取得(APIを使用する場合)

ユーザ属性を取得するには,ログイン時に取得したい属性の一覧を指定する必要があります。次に,ユーザ属性の一覧を指定する場合のログイン処理の実装例を示します。

<%@ page import="com.cosminexus.admin.auth.callback.WebPasswordHandler" %>
<%@ page import="com.cosminexus.admin.auth.AttributeEntry" %>
<%@ page import="javax.security.auth.login.LoginContext" %>
...
<%
  AttributeEntry[] attributes = new AttributeEntry[2];
  attributes[0] = new AttributeEntry("cn", "full name", null);
  attributes[1] = new AttributeEntry("employeeNumber", "employee ID", null);
  LoginContext lc = new LoginContext("Portal",
    new WebPasswordHandler(request, response, attributes, "login.html", true));
  try { lc.login(); } catch (LoginException e) { ... }
%>
...

属性の一覧に従って属性をリポジトリから取得し,UserAttributesオブジェクトに設定します。取得した属性は,java.lang.Object型として管理されています。使用するには,UserAttributesオブジェクトのメソッドを使用して,目的の属性を取得するところから始めます。

LoginContext lc = new ...              // LoginContextクラスのインスタンス化
...
Subject subject  = lc.getSubject();
Iterator it = subject.getPublicCredentials().iterator();
UserAttributes ua= (UserAttributes)it.next();   // uaにUserAttributesの
...                                             // リファレンスが格納される。

属性の値を参照するには,UserAttributesオブジェクトに対して,次に示すgetAttributeメソッドを使用します(String型の場合)。

String role = (String)ua.getAttribute("Portal Role");

getAttributeメソッドでユーザ属性を取得する場合の実装例を次に示します。

<%@ page import="com.cosminexus.admin.auth.UserAttributes" %>
<%@ page import="javax.security.auth.Subject" %>
...
<%
  ...
  Subject subject = lc.getSubject();
  UserAttributes attrs = (UserAttributes)subject.getPublicCredentials().iterator().next();
  String fullname = (String)attrs.getAttribute("full name");
  String eid = (String)attrs.getAttribute("employee ID");
%>
...

ユーザ情報参照,取得時の注意事項
  • UserAttributesの値は参照専用です。内容を変更してもリポジトリには反映されません。また,ユーザ認証ライブラリでは,取得した属性について何も加工しません。
  • 登録されている属性は,String型だけです。
  • 属性の一覧で指定された属性がない場合は,nullが設定されます。