[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 メーリングリストの案内