私は春とLDAPに慣れていないので、我慢してください。
LDAPサーバーからPersonJavaオブジェクトにユーザーをマップする場合、LDAPサーバーからのクエリにオブジェクトクラスが含まれているかどうかは重要ですか?
私の理解では、オブジェクトクラスは、「person」、「organizationalPerson」、「inetOrgPerson」など、ldapが事前定義したものにすることができます。Ldapはカスタム定義のオブジェクトクラスを保持することもできます。objectclass = personが定義されている場合、「cn」、「sn」などが定義されることが保証されます。
以下の変更されたサンプルコードは、ldap属性をjavaPersonオブジェクトにマップすることになっています。
private static class PersonContextMapper
implements ContextMapper {
public Object mapFromContext(Object ctx) {
DirContextAdapter context = (DirContextAdapter)ctx;
Person p = new Person();
if (context.getStringAttribute("cn") != null)
p.setFullName(context.getStringAttribute("cn"));
if (context.getStringAtribute("sn") != null)
p.setLastName(context.getStringAttribute("sn"));
return p;
}
}
ここでは、objectclass = personを参照していませんが、objectclass=personが確実に設定されているかのように属性を検索します。このldapディレクトリのユーザーがobjectclass=CustomPersonの一部でもあり、属性「goals」、「salary」が定義されている場合はどうなりますか?
次に、このユーザーがobjectclass = CustomPersonでもあるかどうかを知らなくても、次のようなチェックを追加するのと同じくらい簡単でしょうか。
if (context.getStringAttribute("goals") != null)
p.setGoals(context.getStringAttribute("goals"));
または、このユーザーがobjectclass = CustomPersonの一部であり、objectclass=personではない場合はどうなりますか。では、「目標」と「給与」しか定義されていないので、「cn」と「sn」を探しても意味がありませんか?
何かが足りないのでしょうか、それともユーザー属性が事前にわかっていると想定されているので、ldapユーザーとjava Personオブジェクトの間のマッピングをハードコーディングできますか?