Activiti 集成 LDAP 简介
-
企业在 LDAP 零碎中保留了用户和群组信息,Activiti 提供了一种解决方案, 通过简略的配置就能够让 activit 连贯 LDAP
用法
-
要想在我的项目中集成 LDAP, 须要在 pom.xml 中增加 activiti-ldap 依赖:
<dependency> <groupId>org.activiti</groupId> <artifactId>activiti-ldap</artifactId> <version>latest.version</version> </dependency>
用例
-
集成 LDAP 有两大用例:
- 通过 IdentityService 进行认证: 应用 Activiti Explorer 通过 LDAP 登录
-
取得用户的组: 在查问用户能够看到哪些工作时十分重要, 比方任务分配给一个候选组
配置
- 集成 LDAP 是通过向流程引擎配置中的 configurators 注入 org.activiti.ldap.LDAPConfigurator的实例来实现的
-
这个类是高度可扩大的: 如果默认的实现不合乎用例的话, 能够很容易的重写办法, 很多依赖的 bean 都是可插拔的
<bean id="processEngineConfiguration" class="...SomeProcessEngineConfigurationClass"> ... <property name="configurators"> <list> <bean class="org.activiti.ldap.LDAPConfigurator"> <!-- Server connection params --> <property name="server" value="ldap://localhost" /> <property name="port" value="33389" /> <property name="user" value="uid=admin, ou=users, o=activiti" /> <property name="password" value="pass" /> <!-- Query params --> <property name="baseDn" value="o=activiti" /> <property name="queryUserByUserId" value="(&(objectClass=inetOrgPerson)(uid={0}))" /> <property name="queryUserByFullNameLike" value="(&(objectClass=inetOrgPerson)(|({0}=*{1}*)({2}=*{3}*)))" /> <property name="queryGroupsForUser" value="(&(objectClass=groupOfUniqueNames)(uniqueMember={0}))" /> <!-- Attribute config --> <property name="userIdAttribute" value="uid" /> <property name="userFirstNameAttribute" value="cn" /> <property name="userLastNameAttribute" value="sn" /> <property name="groupIdAttribute" value="cn" /> <property name="groupNameAttribute" value="cn" /> </bean> </list> </property> </bean>'
属性
- org.activiti.ldap.LDAPConfigurator 可配置的属性:
属性名 | 形容 | 类型 | 默认值 |
---|---|---|---|
server | LDAP 服务器地址 | String | |
port | LDAP 运行的端口 | int | |
user | 连贯 LDAP 应用的账号用户名 | String | |
password | 连贯 LDAP 应用的明码 | String | |
initialContextFactory | 连贯 LDAP 应用的 InitialContextFactory 名称 | String | com.sun.jndi.ldap.LdapCtxFactory |
securityAuthentication | 连贯 LDAP 时设置的 java.naming.security.authentication 属性值 | String | simple |
customConnectionParameters | 能够设置那些没有对应 setter 的连贯参数, 这些属性用来配置连接池, 特定的平安设置等等. 所有提供的参数都会用来创立 LDAP 连贯 | Map<String,String> | |
baseDn | 搜寻用户和组基于的 DN(显著名称) | String | |
userBaseDn | 搜寻用户基于的 DN(distinguished name). 如果没有提供, 会应用 baseDn | String | |
groupBaseDn | 搜寻群组基于的 DN. 如果没有提供, 会应用 baseDn | String | |
searchTimeLimit | 搜寻 LDAP 的超时工夫, 单位毫秒 | Long | 1 h |
queryUserByUserId | 应用用户 Id 搜寻用户的查问语句:(&(objectClass=inetOrgPerson)(uid={0})), LDAP 中所有蕴含 inetOrgPerson 类的匹配 uid 属性的值都会返回. 如果只设置一个查问无奈满足特定的 LDAP 设置, 能够抉择应用LDAPQueryBuilder, 这样就会提供比单纯应用查问减少更多功能 | String | |
queryUserByFullNameLike | 应用全名搜寻用户的查问语句:(& (objectClass=inetOrgPerson) (({0}={1})({2}={3})) ),LDAP 中所有蕴含 inetOrgPerson 类的 匹配 first name 和last name的值都会返回. 留神 {0} 会替换为 firstNameAttribute,{1} 和{3}是搜寻内容. {2}是lastNameAttribute. 如果只设置一个查问无奈满足特定的 LDAP 设置, 能够抉择应用LDAPQueryBuilder, 这样就会提供比单纯应用查问减少更多功能 | String | |
queryGroupsForUser | 应用搜寻指定用户的组的查问语句: (&(objectClass=groupOfUniqueNames)(uniqueMember={0})) ,LDAP 中所有蕴含 groupOfUniqueNames 类的提供的 DN(匹配用户的 DN)是 uniqueMember 的记录都会返回.{0}会替换为用户 Id. 如果只设置一个查问无奈满足特定的 LDAP 设置, 能够抉择应用LDAPQueryBuilder, 这样就会提供比单纯应用查问减少更多功能 | String | |
userIdAttribute | 匹配用户 Id 的属性名. 这个属性用来在查找用户对象时, 关联 LDAP 对象与 Activiti 用户对象之间的关系 | String | |
userFirstNameAttribute | 匹配 first name 的属性名. 这个属性用来在查找用户对象时, 关联 LDAP 对象与 Activiti 用户对象之间的关系 | String | |
userLastNameAttribute | 匹配 last name 的属性名. 这个属性用来在查找用户对象时, 关联 LDAP 对象与 Activiti 用户对象之间的关系 | String | |
groupIdAttribute | 匹配组 Id 的属性名. 这个属性用来在查找组对象时, 关联 LDAP 对象与 Activiti 组对象之间的关系 | String | |
groupNameAttribute | 匹配组名的属性名. 这个属性用来在查找组对象时, 关联 LDAP 对象与 Activiti 组对象之间的关系 | String | |
groupTypeAttribute | 匹配组类型的属性名. 这个属性用来在查找组对象时, 关联 LDAP 对象与 Activiti 组对象之间的关系 | String |
- 高级属性: 心愿批改默认行为或批改组缓存时应用
属性名 | 形容 | 类型 | 默认值 |
---|---|---|---|
ldapUserManagerFactory | 设置 LDAPUserManagerFactory 的自定义实例, 如果默认实现不满足需要 | LDAPUserManagerFactory 的实例 | |
ldapGroupManagerFactory | 设置 LDAPGroupManagerFactory 的自定义实例, 如果默认实现不满足需要 | LDAPGroupManagerFactory 的实例 | |
ldapMemberShipManagerFactory | 设置 LDAPMembershipManagerFactory 的自定义实例, 如果默认实现不满足需要. 不常常应用因为失常状况下 LDAP 会本人治理关联关系 | LDAPMembershipManagerFactory 的实例 | |
ldapQueryBuilder | 设置自定义查问结构器, 如果默认实现不满足需要.LDAPQueryBuilder 实例用在 LDAPUserManager 和LDAPGroupManager中, 执行对 LDAP 的查问. 默认实现会应用配置的 queryGroupsForUser 和queryUserById属性 | org.activiti.ldap.LDAPQueryBuilder 的实例 | |
groupCacheSize | 组缓存的大小. 这是一个 LRU 缓存, 用来缓存用户的组, 能够防止每次查问用户的组时, 都要拜访 LDAP. 如果值小于 0, 就不会创立缓存. 默认为 -1, 所以不会进行缓存 | int | -1 |
groupCacheExpirationTime | 设置组缓存的过期工夫, 单位为毫秒. 当获取特定用户的组时, 并且组缓存也启用, 组会保留到缓存中, 并应用这个属性设置的工夫: 当组在 00:00 被获取, 过期工夫为 30 分钟, 那么所有在 00:30 之后进行的查问都不会应用缓存, 而是再次去 LDAP 查问. 因而, 所以在 00:00-00:30 进行的查问都会应用缓存 | long | 1 h |
-
留神: 在应用流动目录 AD 时 ,InitialDirContext须要设置为 Context.REFERRAL 能够通过 customConnectionParameters 传递
Explorer 集成 LDAP
- 将 LDAP 配置增加到 activiti-standalone-context.xml 中
- 将 activiti-ldap-jar 放到 WEB-INF/lib 目录
- 删除demoDataGenerator bean, 否则会尝试插入数据, 集成 LDAP 不容许这么做
-
增加配置到 activiti-ui.context 的explorerApp bean:
<property name="adminGroups"> <list> <value>admin</value> </list> </property> <property name="userGroups"> <list> <value>user</value> </list> </property>
-
应用你自定义配置替换其中的值:
- 须要用到的数据是组的 Id, 通过 groupIdAttribute 配置
- 配置会让 admin 组下的所有用户都成为 Activiti Explorer 的管理员, 用户组也一样
- 所有不匹配的组都会当做 调配 组, 这样工作就能够进行调配