[Seasar-user:14683] Re: [S2Directory]passwordObjectの取得方法

小林正和 [E-MAIL ADDRESS DELETED]
2008年 6月 13日 (金) 13:47:00 JST


小林です。

ふたがわさん、回答ありがとうございます。

教えていただいた 0.7 の SNAPSHOT をダウンロードして directory.dicon も教えていただいた
内容に変更して実行してみた。

若干進展しました。

1)
以下のコードを実行した場合には、 passwordObject は null が返ってきてしまいます。

Person person = personDirectoryDao.getByUid("masapon1967");
PasswordObject passwordObject =
passwordObjectDirectoryDao.getByDn(person.getDn());

以下は、その時のログです。

DEBUG 2008-06-13 13:00:52,344 [http-8080-2] BEGIN
exmaple.directorydao.PasswordObjectDirectoryDao#getByDn(uid=masapon1967,ou=People,o=foo.com,o=isp)
DEBUG 2008-06-13 13:00:52,344 [http-8080-2] Filter:
(&(objectclass=PasswordObject)(dn=uid=masapon1967,ou=People,o=foo.com,o=isp))
DEBUG 2008-06-13 13:00:52,359 [http-8080-2] END
example.directorydao.PasswordObjectDirectoryDao#getByDn(uid=masapon1967,ou=People,o=foo.com,o=isp)
: null

修正した directory.dicon は以下のようになっています。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
	"http://www.seasar.org/dtd/components24.dtd">
<components namespace="directory">
    <component name="directoryControlProperty"
        class="org.seasar.directory.impl.DirectoryControlPropertyImpl"
        instance="prototype">
        <property name="initialContextFactory">
            "com.sun.jndi.ldap.LdapCtxFactory"
        </property>
        <property name="url">
            "ldap://localhost:389"
        </property>
        <property name="baseDn">"o=foo.com,o=isp"</property>
        <property name="bindDn">"cn=Directory Manager"</property>
        <property name="password">"password"</property>
        <property name="userSuffix">"ou=People"</property>
        <property name="userAttributeName">"uid"</property>
        <property name="passwordAlgorithm">"SSHA"</property>
        <property name="groupSuffix">"ou=Groups"</property>
        <property name="groupAttributeName">"cn"</property>
        <property name="multipleValueDelimiter">","</property>
    </component>
</components>

2)
次に、PasswordObject をフィルタとして実行するコードを実行したところ passwordObject
が null 以外で返ってきました。以下はその時のコードです。

Person person = personDirectoryDao.getByUid("masapon1967");
PasswordObject filter = new PasswordObject();
filter.setDn(person.getDn());
PasswordObject passwordObject =
passwordObjectDirectoryDao.getPasswordObject(filter);

しかし、passwordExpirationTime が null になっています。実際には パスワード有効期限が
入っていることは Apache LDAP Studio で確認しています。

以下はその時のログです。
DEBUG 2008-06-13 13:16:28,046 [http-8080-2] BEGIN
example.directorydao.PasswordObjectDirectoryDao#getPasswordObject(DN:
dn=uid=masapon1967,ou=People,o=foo.com,o=isp, MAY:
passwordExpirationTime=null, passwordExpWarned=null,
passwordRetryCount=null, retryCountResetTime=null,
accountUnlockTime=null, passwordHistory=null,
passwordAllowChangeTime=null)
DEBUG 2008-06-13 13:16:28,046 [http-8080-2] Filter:
uid=masapon1967,ou=People,o=foo.com,o=isp [DN]
DEBUG 2008-06-13 13:16:28,077 [http-8080-2] END
example.directorydao.PasswordObjectDirectoryDao#getPasswordObject(DN:
dn=uid=masapon1967,ou=People,o=foo.com,o=isp, MAY:
passwordExpirationTime=null, passwordExpWarned=null,
passwordRetryCount=null, retryCountResetTime=null,
accountUnlockTime=null, passwordHistory=null,
passwordAllowChangeTime=null) : DN:
dn=uid=masapon1967,ou=People,o=foo.com,o=isp, MAY:
passwordExpirationTime=null, passwordExpWarned=null,
passwordRetryCount=null, retryCountResetTime=null,
accountUnlockTime=null, passwordHistory=null,
passwordAllowChangeTime=null

ちなみにふたがわさんがおっしゃっていた、
> 逆に Person エンティティ に オブジェクトクラス PasswordObject が持つ属性用の
> プロパティを足しても構いません。
という件ですが、PasswordObject エンティティに Person エンティティの
プロパティ uid を設定しましたが、そのプロパティにちゃんと値が入っていました。
しかし、Person エンティティに追加した、passwordExpirationTime プロパティにも
null が設定されています。

ということで、一歩前進しました。

-- 
----------------------------------------------
Masakazu Kobayashi


Seasar-user メーリングリストの案内