2013年2月2日土曜日

JdbcSimpleUserDAOにおけるグループ操作の実装

現状のOpenAM最新版(10.0.0)において、MySQLへアクセスするDAOクラス「JdbcSimpleUserDAO」では、グループ操作に関するメソッドが未実装である。
本稿では、グループ関連のメソッドを実装する。
  • 「JdbcSimpleUserDAO」において、グループ操作に関するメソッドとしては以下のメソッドがある。
---------------------------------------------------------------------------
    public Set<String> getMembers(String groupName, String membershipIdAttributeName) {
        return Collections.EMPTY_SET;
    }
   
    public Set<String> getMemberships(String userName, String membershipIdAttributeName) {
        return Collections.EMPTY_SET;
    }
 
    public void deleteGroup(String groupName, String membershipIdAttributeName) {      
    }
 
    public void createGroup(String groupName, String membershipIdAttributeName){
    }
 
    public void deleteMembersFromGroup(Set<String> members, String groupName, String membershipIdAttributeName) {
    }
 
    public void addMembersToGroup(Set<String> members, String groupName, String membershipIdAttributeName) {
    }
 
    public Map<String, Map<String, Set<String>>>  searchForGroups(
            String membershipIdAttributeName, int limit, String idPattern,
            Set<String> attributesToFetch, String filterOperand,
            Map<String, Set<String>> avPairs) {
     
        return Collections.EMPTY_MAP;
    }
 
    public Map<String, Set<String>> getGroupAttributes(String groupName,
            String membershipIdAttributeName, Set<String> attributesToFetch) {
        return Collections.EMPTY_MAP;
    }
---------------------------------------------------------------------------
  •  グループおよびユーザのテーブルにおける関係は、以下を想定する。

<テーブル作成コマンド>
mysql> create table groups(group_name varchar(50), cn varchar(50), primary key(g
roup_name));
Query OK, 0 rows affected (0.04 sec)
mysql> create table usergroupmapping(group_name varchar(50), uid varchar(50), pr
imary key(group_name, uid), foreign key(uid) references users(uid) ON UPDATE CAS
CADE ON DELETE CASCADE,  foreign key(group_name) references groups(group_name) ON UPDATE CASCADE ON DELETE CASCADE) engine=innodb;
Query OK, 0 rows affected (0.01 sec)

<開発内容>
  • 既存の「com.sun.identity.idm.plugins.database.JdbcSimpleUserDAO」クラスを継承し、「JdbcUserGrourpDAO」クラスを新規に作成する。
  • 開発環境はEclipseを使用する。Eclipseには、予めamserver.jarおよびopensso-sharedlib.jarへのクラスパスを通りしておく。

①Eclipse環境において、以下のような「JdbcUserGrourpDAO」クラスを作成する。

   【ソース公開先】
   https://docs.google.com/file/d/0Bwo1aq16K4DXVUxBZTdsR3VEQzA/edit

②Explise上でjarファイルを作成し、以下の格納場所に配備する。
(またはWebサーバ上のクラスパスに設定する)

D:\glassfish\domains\domain1\applications\j2ee-modules\opensso\WEB-INF\lib\customdbdao.jar


③glassfishを再起動する。

④OpenAMの管理コンソールにログインする。「アクセス制御」タブ→「/(最上位のレルム)」→「データストア」タブを押下する。

⑤データベースのリポジトリを選択し、「データベースのデータアクセスオブジェクトプラグインのクラス名:」にカスタムしたDAOクラスを設定する。「保存」ボタンを押下する。

⑥glassfishを再起動する。

⑦OpenAMの管理コンソール上からグループを操作(作成・ユーザの追加/削除)し、正常に動作することを確認する。

















0 件のコメント: