工作流Activiti框架中的LDAP组件使用详解!实现对工作流目录信息的分布式访问及访问控制

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的管理员,用户组也一样
- 所有不匹配的组都会当做分配组,这样任务就可以进行分配
工作流Activiti框架中的LDAP组件使用详解!实现对工作流目录信息的分布式访问及访问控制的更多相关文章
- 工作流中的流程追溯!详细解析Activiti框架中的历史组件
Activit中的历史简介 历史: Activiti中的一个组件,可以捕获发生在进程执行中的信息并永久的保存.与运行时数据不同的是,当流程实例运行完成之后它还会存在于数据库中 历史实体对象有5个: H ...
- ElasticSearch中分词器组件配置详解
首先要明确一点,ElasticSearch是基于Lucene的,它的很多基础性组件,都是由Apache Lucene提供的,而es则提供了更高层次的封装以及分布式方面的增强与扩展. 所以要想熟练的掌握 ...
- Ant Design框架中不同的组件访问不同的models中的数据
Ant Design框架中不同的组件访问不同的models中的数据 本文记录了我在使用该框架的时候踩过的坑,方便以后查阅. 一.models绑定 在某个组件(控件或是页面),要想从某个models中获 ...
- 第15.18节 PyQt(Python+Qt)入门学习:Model/View架构中视图Item Views父类详解
老猿Python博文目录 老猿Python博客地址 一.概述 在PyQt图形界面中,支持采用Model/View架构实现数据和界面逻辑分离,其中Model用于处理数据存储,View用于界面数据展现,当 ...
- 【山外笔记-工具框架】iperf3网络性能测试工具详解教程
[山外笔记-工具框架]iperf3网络性能测试工具详解教程 本文下载链接 [学习笔记]iperf3网络性能测试工具.pdf 网络性能评估主要是监测网络带宽的使用率,将网络带宽利用最大化是保证网络性 ...
- Node.js中环境变量process.env详解
Node.js中环境变量process.env详解process | Node.js API 文档http://nodejs.cn/api/process.html官方解释:process 对象是一个 ...
- vue2.0 中#$emit,$on的使用详解
vue1.0中 vm.$dispatch 和 vm.$broadcast 被弃用,改用$emit,$on 1. vm.$on( event, callback ) 监听当前实例上的自定义事件.事件可以 ...
- [ 转载 ] Java开发中的23种设计模式详解(转)
Java开发中的23种设计模式详解(转) 设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类 ...
- Farseer.net轻量级开源框架 入门篇:添加数据详解
导航 目 录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 入门篇: 分类逻辑层 下一篇:Farseer.net轻量级开源框架 入门篇: 修改数据详解 ...
随机推荐
- 堆栈上的舞蹈之释放重引用(UAF) 漏洞原理实验分析
0x01 前言 释放重引用的英文名名称是 Use After Free,也就是著名的 UAF 漏洞的全称.从字面意思可以看出 After Free 就是释放后的内存空间,Use 就是使用的意思,使用释 ...
- Windows核心编程 第十五章 在应用程序中使用虚拟内存
第1 5章 在应用程序中使用虚拟内存 Wi n d o w s提供了3种进行内存管理的方法,它们是: • 虚拟内存,最适合用来管理大型对象或结构数组. • 内存映射文件,最适合用来管理大型数据流(通常 ...
- Linux安装与使用FTP服务-vsftpd
简介 vsftpd 是"very secure FTP daemon"的缩写,安全性是它的一个最大的特点.vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行 ...
- thinkphp 中区块block和模板继承extend用法举例
1.介绍 模板继承其实并不难理解,就好比类的继承一样,模板也可以定义一个基础模板(或者是布局),并且其中定义相关的区块(block),然后继承(extend)该基础模板的子模板中就可以对基础模板中定义 ...
- python分析《三国演义》,谁才是这部书的绝对主角(包含统计指定角色的方法)
前面分析统计了金庸名著<倚天屠龙记>中人物按照出现次数并排序 https://www.cnblogs.com/becks/p/11421214.html 然后使用pyecharts,统计B ...
- mybaties longtext 类型不能映射到自动生成的文件
假设数据库里有 fun_detail 这样一个字段. 使用 MyBatis Generator 生成的 XXExample 文件,发现没有 fun_detail 这个字段. 需要加一行: <co ...
- Docker系列——Grafana+Prometheus+Node-exporter服务器监控平台(一)
在最近的博文中,都是介绍监控平台的搭建,其实并不难,主要是需要自己动手操作,实践一番就会了. 有天在想,云上的服务器,是不是也可以搭建一个监控平台,所以就捣鼓了一下,不过遗憾的是,使用阿里云开源的插件 ...
- ruby基础(四)
ruby基础知识 模块 模块是ruby的特色功能之一.如果说类是事物的实体以及行为,那么模块表现的 就是事物的行为部分,模块和类有以下两点不同: 模块不能拥有实例 模块不能被继承 模块的使用方法 mo ...
- [Linux]常用命令、组合命令以及输入输出重定向
[Linux]常用命令.组合命令以及输入输出重定向 2020-03-10阅读 1580 原创文章 文章目录 0.切换目录 1.复制文件和目录`cp` 1.1.复制文件 1.2.复制目录 1.3.扩 ...
- [转载]libvirt(virsh命令总结)
libvirt(virsh命令总结) virsh回车进入交互式界面: version pwd hostname 显示本节点主机名 nodeinfo 显示节点信息 list --all 显示所有云主机 ...