1.user status 这个值是位与运算的!!!!人为可修改的值少,直接在AD页面上修改就知道能否人为修改了
account lockout是系统自身检测控制的,相关的参数不能人为修改。于是,我们自己在attribute里添加了一个extension字段,装入locked=false/true来自定义处理是否被锁,因为AD没有这个人为Lock的功能,只能符合自定义的规则才会lock!
2.AD系统维护的参数,如:parentDistributeName, DistinguishName不支持LDAP的模糊查询。但Embeded的LADP,就支持。
3. Unboudid LDAP InMemoryDirectoryServer不支持userAccountStatus的位运算查询,暂时知道Microsoft AD支持
加入下面这个搜索条件,会过滤掉disable的用户,只会查询active的用户
public static final String USER_ACCOUNT_CONTROL_FILTER_INACTIVE = "userAccountControl:1.2.840.113556.1.4.803:";
4. AD是通过User SamAccountName来作为唯一性检查的!这个名字是全局唯一的!不区分大小写!而且,全局搜索的时候,也是可以不区分大小写输入来进行搜索!如:user名为Dog.那么搜索时,输入dog,Dog,DOG都可以搜索到
5. AD连接池连接后,很久才超时,导致线程假死状态。这个是因为使用了linux firework drop的命令,这个命令丢弃所有数据包,只能超时才有返回。
AD ssl timeout问题:
配置了AD ssl,默认走下面的代码,而无法修改AD的链接超时时间,需要到操作系统设置socket。。。
相关的分析Socket笔记之深入分析java中的ConnectionTimedOut
No connection timeout for sun SSLSocketImpl, potential bug?
6. java不能直接update相应的column为空字符串,可以update为空格,但是可以直接在AD server的图形界面上删除column的值,Update为相应的空值。
7. 使用java unboundid sdk作为AD链接, AD有些字段支持search结果排序,如displayname,sn,而modifyTimeStamp不支持。查看
ldap协议些说明,不支持ordering!!
一些相关链接:
LDAP服务器的概念和原理简单介绍
Spring Boot中使用LDAP来统一管理用户信息
ldapsearch 的用法https://blog.51cto.com/koala003/1663662