activiti 自定义用户
https://blog.csdn.net/meng564764406/article/details/53789958
此文目的:
对网络上的关于对activiti 使用做一个总结,因为很难找到一个非常完整的代码结构。以后大家不用再东拼西凑。
本文是重写activiti的 用户部分,使用自定义管理器,也就是说不再使用act_id_*的数据库表。
一共创建或者修改6个文件。
1.CustomUserEntityManagerFactory.java
这是需要创建的第一个文件,是自定义的User的管理工厂类。
@Service
public class CustomUserEntityManagerFactory implements SessionFactory{
// 使用自定义的User管理类
@Resource
private CustomUserEntityManager customUserEntityManager;
@Override
public Class<?> getSessionType() {
//注意此处也必须为Activiti原生类
return UserIdentityManager.class;
}
@Override
public Session openSession() {
return customUserEntityManager;
}
@Autowired
public void setCustomUserEntityManager(CustomUserEntityManager customUserEntityManager) {
this.customUserEntityManager = customUserEntityManager;
}
}
2.CustomGroupEntityManagerFactory.java
这是自定义Group管理工厂,也就是我们权限中的角色类的管理了。
@Service
public class CustomGroupEntityManagerFactory implements SessionFactory{
@Resource
private CustomGroupEntityManager customGroupEntityManager;
public Class<?> getSessionType() {
// 返回原始的GroupManager类型
return GroupEntityManager.class;
}
public Session openSession() {
// 返回自定义的GroupManager实例
return customGroupEntityManager;
}
@Autowired
public void setCustomGroupEntityManager(CustomGroupEntityManager customGroupEntityManager) {
this.customGroupEntityManager = customGroupEntityManager;
}
}
3.CustomUserEntityManager.java
这是自定义用户管理类,管理用户方法。这里仅仅列举了两个方法,实际需求再去添加,具体方法进入UserEntityManager中查看。
@Component
public class CustomUserEntityManager extends UserEntityManager{
private static final Log logger = LogFactory.getLog(CustomUserEntityManager.class);
@Autowired
private UserMapper userMapper;
@Override
public UserEntity findUserById(String userId) {
UserEntity userEntity = new UserEntity();
com.mlf.activiti.entity.User cue = userMapper.getUserByUserName(userId);//这是我们的dao方法查询回来的方法,是自己定义的user
userEntity = ActivitiUserUtils.toActivitiUser(cue);//将自定义的user转化为activiti的类
return userEntity;//返回的是activiti的实体类
}
@Override
public List<Group> findGroupsByUser(final String userCode) {
if (userCode == null)
return null;
List<Role> groupIds = userMapper.getGroupIdsByUserName(userCode);
List<Group> gs = null;
gs = ActivitiUserUtils.toActivitiGroups(groupIds);
return gs;
}
}
4.CustomGroupEntityManager .java
自定义组(角色)管理,具体方法进入GroupEntityManager中查看。
@Component
public class CustomGroupEntityManager extends GroupEntityManager{
private static final Log logger = LogFactory.getLog(CustomGroupEntityManager.class);
@Autowired
private UserMapper userMapper;//用于查询实际业务中用户表、角色等表
@Override
public List<Group> findGroupsByUser(final String userCode) {
if (userCode == null)
return null;
List<Role> bGroupList = userMapper.getGroupByUserName(userCode);
List<Group> gs = new java.util.ArrayList<>();
GroupEntity g;
String roleId;
String activitRole;
for (Role bGroup : bGroupList) {
g = new GroupEntity();
g.setRevision(1);
g.setType("assignment");
roleId = String.valueOf(bGroup.getId());
// activitRole = bindGroupWithRole.get(roleId);//此处只是根据RoleId获取RoleCode, 因实际表中无RoleCode字段,暂且如此实际,此行可注释掉
g.setId(/*activitRole != null ? activitRole :*/ roleId);
g.setName(bGroup.getName());
gs.add(g);
}
return gs;
}
}
5.ActivitiUserUtils .java
这个工具类用来将业务中自己定义的用户转化为activiti中使用的user。
public class ActivitiUserUtils {
public static UserEntity toActivitiUser(User bUser){
UserEntity userEntity = new UserEntity();
userEntity.setId(bUser.getName());
userEntity.setFirstName(bUser.getUsername());
userEntity.setLastName(bUser.getName());
userEntity.setPassword(bUser.getPassword());
userEntity.setEmail(bUser.getEmail());
userEntity.setRevision(1);
return userEntity;
}
public static GroupEntity toActivitiGroup(Role sysRole){
GroupEntity groupEntity = new GroupEntity();
groupEntity.setRevision(1);
groupEntity.setType("assignment");
groupEntity.setId(sysRole.getId());
groupEntity.setName(sysRole.getName());
return groupEntity;
}
public static List<Group> toActivitiGroups(List<Role> sysRoles){
List<Group> groups = new ArrayList<Group>();
for (Role sysRole : sysRoles) {
GroupEntity groupEntity = toActivitiGroup(sysRole);
groups.add(groupEntity);
}
return groups;
}
}
6.spring-activiti.xml
这里指定定义以上的bean对象的生成,用来依赖注入。
<bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
<property name="dataSource" ref="dataSource" />
<property name="transactionManager" ref="transactionManager" />
<property name="databaseSchemaUpdate" value="true" />
<!-- 自定义用户、用户组的配置 -->
<property name="customSessionFactories">
<list>
<bean class="com.mlf.activiti.custom.CustomUserEntityManagerFactory" >
<property name="customUserEntityManager" ref="customUserEntityManager"/>
</bean>
<bean class="com.mlf.activiti.custom.CustomGroupEntityManagerFactory" >
<property name="customGroupEntityManager" ref="customGroupEntityManager"/>
</bean>
</list>
</property>
</bean>
<bean id="customUserEntityManager" class="com.mlf.activiti.custom.manager.CustomUserEntityManager"/>
<bean id="customGroupEntityManager" class="com.mlf.activiti.custom.manager.CustomGroupEntityManager"/>
7.这样基本的配置全都结束了,哪里还有不足呢,比如说,3,4,5,中Role.java需要写,这个就是一个user类换了个名字嘛,很简单;另一个是我们基本都是用mybatis的,在3,4,中使用的mapper就是我们需要自己编码的dao层接口,和对应的mapper文件。这里就不多叙述了。
在以后使用用户,或者角色,就通过我们定义的管理器来控制。
注意,有的方法我们没有实现,如果调用的话,一旦访问act_id_*的数据,会出现我们不想要的数据。
下面两篇文章可以帮助深入理解,不过具体实例还是看我的上述代码,比较好。
如有错误,欢迎指出,评论,一起探讨。欢迎各位一起交流,我的邮箱公开。
推荐文章:浅谈Activiti工作流引擎用户管理
推荐文章:《同步或者重构Activiti Identify用户数据的多种方案比较》
activiti 自定义用户的更多相关文章
- 2016.11.29 activiti实战--第19章--统一身份管理(含自定义用户与数组的实现)
学习资料:<Activiti实战> 第十九章 统一身份管理 本章讲解如何统一业务系统与activiti的用户管理系统. 第5章的时候已经讲解过activiti的用户与组.一般来说业务系统都 ...
- activiti自定义流程之整合(二):使用angular js整合ueditor创建表单
注:整体环境搭建:activiti自定义流程之整合(一):整体环境配置 基础环境搭建完毕,接下来就该正式着手代码编写了,在说代码之前,我觉得有必要先说明一下activit自定义流程的操作. 抛开自定义 ...
- activiti自定义流程之自定义表单(二):创建表单
注:环境配置:activiti自定义流程之自定义表单(一):环境配置 在上一节自定义表单环境搭建好以后,我就正式开始尝试自己创建表单,在后台的处理就比较常规,主要是针对ueditor插件的功能在前端进 ...
- activiti自定义流程之Spring整合activiti-modeler5.16实例(二):创建流程模型
注:(1)环境搭建:activiti自定义流程之Spring整合activiti-modeler5.16实例(一):环境搭建 1.maven导包,这里就没有什么多的好说了,直接代码: <depe ...
- 关于我上传的activiti自定义流程demo的说明
最近又收到了一些询问activiti的问题,其中好几个都是向我索要我上传的这个activiti自定义流程demo的数据库设计. 索要的多了,而我早就把这个库给删掉了,所以我便觉得有必要做一个说明: 我 ...
- 同步或者重构Activiti Identify用户数据的多种方案比较
http://www.kafeitu.me/activiti/2012/04/23/synchronize-or-redesign-user-and-role-for-activiti.html 如何 ...
- 基于Activiti5.15.1 自定义用户、组(User,Group)实现
基于Activiti5.15.1 自定义用户.组(User,Group)实现 本人刚接触Activiti,最近工作中需要将Activiti中原有的用户,组(ACT_ID_USER,ACT_ID_GRO ...
- openfire使用自定义用户表
转自:http://blog.csdn.net/nomousewch/article/details/7546083 在最近的项目中使用openfire服务器实现消息推送功能,如果使用openfire ...
- .NET 实现自定义ContextUser的Identity和Principal实现自定义用户信息,权限验证。
备用收藏,http://blog.csdn.net/msdnxgh/article/details/6894885 .NET 实现自定义ContextUser的Identity和Principal 在 ...
随机推荐
- Eclipse上Maven环境配置使用
1. 安装配置Maven: 1.1 从Apache网站 http://maven.apache.org/ 下载并且解压缩安装Apache Maven. Maven下载地址: http://maven. ...
- ThinkPHP支持的4种路由模式
下面这个说法和示例,比较具有总结性.
- Beta冲刺(2/7)——2019.5.23
所属课程 软件工程1916|W(福州大学) 作业要求 Beta冲刺(2/7)--2019.5.23 团队名称 待就业六人组 1.团队信息 团队名称:待就业六人组 团队描述:同舟共济扬帆起,乘风破浪万里 ...
- 当调用对象中不存的方法、属性时,__getattr__的应用场景
一.Python中创建类和实例的调用顺序 new(cls) 创建对象前调用,如果类中没定义,会一直向父类找,直到object的 new 方法创建类.cls代表类本身 init(self) 创建类实例后 ...
- Jupyter notebook 自动补全
Jupyter notebook 自动补全 Jupyter notebook使用默认的自动补全是关掉的.要打开自动补全,需修改默认配置. ipython profile create 以上命令会 ...
- BZOJ 4212: 神牛的养成计划 可持久化trie+trie
思路倒是不难,但是这题卡常啊 ~ code: #include <bits/stdc++.h> #define N 2000004 #define M 1000005 #define SI ...
- WinDbg扩展
WinDbg的扩展,也可以叫插件.它用于实现针对特定调试目标的调试功能,用于扩展某一方面的调试功能.扩展的实现是通过扩展模块(DLL)实现的.Windbg本身已经包含了很多扩展命令,这些扩展为这Win ...
- 【JZOJ6227】【20190621】ichi
题目 $n , m ,d,x\le 10^5 , $强制在线 题解 对原树做dfs,得到原树的dfs序 对kruksal重构树做dfs,得到重构树的dfs序 那么就是一个三维数点问题 强制在线并且卡空 ...
- 【loj2568】【APIO2016】【学习笔记 左偏树】烟花表演
题目 一棵树,\(n\)个非叶子节点,编号为\(1-n\),\(m\)个叶子节点,编号为\(n+1-n+m\) 每条边有边权,修改边权的代价为\(|a-b|\) ; 定义一个叶子的距离为到1(根节点) ...
- Python TIPS上一道关于人民币金额小写转大写的题
人民币金额打印 题目链接:here.我发现我写的好复杂,但万幸编码还算符合人类,看了其他答案,感觉都是天书. #!/usr/bin/env python # -*- coding: utf-8 -*- ...