一、首先要说下遇到的问题
问题一来自于OpenDJ,在安装OpenDJ3.0的第五步里面,图中红圈标记的地方,对于初次接触LDAP服务器的人来说,这里真的是一个概念巨坑。
记住这个选项“Leave Database Empty”
因为这个配置,导致我后面进入Manage Entries面板看不到dc=qthings,dc=com这个域。由于安装过程不再演示,但这个创建过程和下图创建是一个道理。
建好之后,进入到Manage Entries面板,可以看到,Base DN的下拉框有这个DN,但是下面左边栏没有相应的内容
选进来后显示没有任何东西,这是使用Entries下拉框中的“New from LDIF...”是没有办法新建objectclass: person的entry的。
直到我选择Only Create Base Entry选项创建了Base DN后,我才终于看到了什么叫Base Entry。
原来就是要在dc=qthings,dc=com的DN下创建一个objectclass: domain的entry就可以了。
这里耗费我不少时间,所以建议创建Base DN时直接选择Only Create Base Entry选项,避免绕弯路。
二、建立基于spring ldap框架的项目
【1】使用的maven配置(pom.xml内对于ldap需要使用的依赖)
【2】实体类注解说明
java实体类部分截图,对应于LDAP的内容
这里主要做下注解的解释,spring官网也有相应的描述。
@Entry
这个注解里面含有两个属性:objectClass和base
objectClass即OpenDJ中出现的objectclass,这是一个数组。而base即Base DN
base这个属性也可以配置在spring-ldap.xml中,这样实体类中就不需要写这个属性了,注意的是不能同时配置,会出问题:在创建这个实体entry时,dn中会出现两次dc=a,dc=com
@Id
This annotation marks a Java field as containing the Distinguished Name of an LDAP Entry.
The marked field must be of type {@link javax.naming.Name} and must not
be annotated {@link Attribute}.
这个都标注在Name上,很像数据库表中的主键意思,唯一性(本来就是差不多意思)
@Transient
This annotation identifies a field in an {@link Entry} annotated class that
should not be persisted to LDAP.
不会被持久化的字段
@Attribute和@DnAttribute
这里着重说区别,@DnAttribute有两个属性value和index,这里是指下图标出的部分
其中value指cn=wanda中的“cn”而index表示在dn中的位置。
@Attribute有3个属性name、type、syntax,其中name最容易理解——属性名,type默认是String的,还可以是byte[]。
至于syntax(语法),没用过,有spring的注释:
【3】DAO内部使用
这里只放了一个插入的写法,其他的写法spring官网都有提供,配置文件上面已经贴过了。
更多spring的实例参考:https://github.com/spring-projects/spring-ldap/tree/master/samples/odm