基于Activiti5.15.1 自定义用户、组(User,Group)实现

本人刚接触Activiti,最近工作中需要将Activiti中原有的用户,组(ACT_ID_USER,ACT_ID_GROUP,ACT_ID_MEMBERSHIP)表替换为公司已有的相关表。查看了咖啡兔论坛相关文章。今天有空整理一下。以帮助后续有此需要的初学者。

自定义Group,User工厂类,实现SessionFactory接口

1)CustomGroupEntityManagerFactory

@Service
public class CustomGroupEntityManagerFactory implements SessionFactory { private CustomGroupEntityManager customGroupEntityManager; @Override
public Class<?> getSessionType() {
     //注意此处必须为Activiti原生的类,否则自定义类不会生效
return GroupIdentityManager.class;
} @Override
public Session openSession() {
return customGroupEntityManager;
} @Autowired
public void setCustomGroupEntityManager(CustomGroupEntityManager customGroupEntityManager) {
this.customGroupEntityManager = customGroupEntityManager;
}
}

2)CustomUserEntityManagerFactory

@Service
public class CustomUserEntityManagerFactory implements SessionFactory { 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;
}
}

3)CustomGroupEntityManager

 @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.getRoleID());
activitRole = bindGroupWithRole.get(roleId);//此处只是根据RoleId获取RoleCode, 因实际表中无RoleCode字段,暂且如此实际,此行可注释掉
g.setId(activitRole != null ? activitRole : roleId);
g.setName(bGroup.getRoleName());
gs.add(g);
}
return gs;
}
}

4)CustomUserEntityManagerFactory

@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.jimubox.transformers.model.user.User cue = userMapper.getUserByUserName(userId);
ActivitiUtils.toActivitiUser(cue);
return userEntity;
} @Override
public List<Group> findGroupsByUser(final String userCode) {
if (userCode == null)
return null; List<String> groupIds = userMapper.getGroupIdsByUserName(userCode); List<Group> gs = null;
gs = Utils.toActivitiGroups(groupIds);
return gs; } }

5)applicationContext.xml

<!-- Activiti begin -->
<bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
<property name="databaseType" value="mysql"/>
<property name="dataSource" ref="dataSource"/>
<property name="transactionManager" ref="transactionManager"/>
<property name="databaseSchemaUpdate" value="true"/>
<property name="jobExecutorActivate" value="false"/>
<property name="history" value="activity"/>
<property name="processDefinitionCacheLimit" value="10"/>
<!-- JPA -->
<property name="jpaEntityManagerFactory" ref="entityManagerFactory"/>
<property name="jpaHandleTransaction" value="true"/>
<property name="jpaCloseEntityManager" value="true"/> <property name="customSessionFactories">
<list>
<bean class="com.jimubox.transformers.factory.workflow.CustomUserEntityManagerFactory">
<property name="customUserEntityManager" ref="customUserEntityManager"/>
</bean>
<bean class="com.jimubox.transformers.factory.workflow.CustomGroupEntityManagerFactory">
<property name="customGroupEntityManager" ref="customGroupEntityManager"/>
</bean>
</list>
</property> </bean>

基于Activiti5.15.1 自定义用户、组(User,Group)实现的更多相关文章

  1. 基于 HTML5 的 WebGL 自定义 3D 摄像头监控模型

    前言 随着视频监控联网系统的不断普及和发展, 网络摄像机更多的应用于监控系统中,尤其是高清时代的来临,更加快了网络摄像机的发展和应用. 在监控摄像机数量的不断庞大的同时,在监控系统中面临着严峻的现状问 ...

  2. 第2章 细说Linux系统用户/组管理(1)

    2.1 用户和组的基本概念 用户和组是操作系统中一种身份认证资源. 每个用户都有用户名.用户的唯一编号uid(user id).所属组及其默认的shell,可能还有密码.家目录.附属组.注释信息等. ...

  3. 基于SpringSecurity和JWT的用户访问认证和授权

    发布时间:2018-12-03   技术:springsecurity+jwt+java+jpa+mysql+mysql workBench   概述 基于SpringSecurity和JWT的用户访 ...

  4. Django自定义用户认证系统之自定义用户模型

    参考文档:http://python.usyiyi.cn/django/topics/auth/customizing.html Django 自带的认证系统足够应付大多数情况,但你或许不打算使用现成 ...

  5. 工程师技术(一):启用SELinux保护、自定义用户环境、配置IPv6地址、配置聚合连接、配置firewalld防火墙

    一.启用SELinux保护 目标: 本例要求为虚拟机 server0.desktop0 配置SELinux: 确保 SELinux 处于强制启用模式 在每次重新开机后,此设置必须仍然有效 方案: SE ...

  6. (九)ASP.NET自定义用户控件(2)

    http://www.cnblogs.com/SkySoot/archive/2012/09/04/2670678.html 用户控件 在 .NET 里,可以通过两种方式把自己的控件插入到 Web 窗 ...

  7. asp.net core利用DI实现自定义用户系统,脱离ControllerBase.User

    前言 很多时候其实我们并不需要asp.net core自带的那么复杂的用户系统,基于角色,各种概念,还得用EF Core,而且在web应用中都是把信息存储到cookie中进行通讯(我不喜欢放cooki ...

  8. Sqlserver如何递归查询层级数据将父级字段和本级某个字段合并?如何自定义用户函数并调用?

    开门见山,首先说下遇到的问题:前期系统地区字典表中,每个省市县只存了本级名称,没存完整的字段.如:肥西县隶属安徽省合肥市,表中就存了一个肥西县.现有需求需要将完整字段显示,由于系统已在线上运营,无法做 ...

  9. Linux的用户(组),权限,文件精妙的三角关系,和强大的帮助系统

    在linux中一切都是文件(文件夹和硬件外设是特殊的文件),如果有可能尽量使用文本文件.文本文件是人和机器能理解的文件,也成为人和机器进行 交流的最好途径.由于所有的配置文件都是文本,所以你只需要一个 ...

随机推荐

  1. 第3章 编写ROS程序-1

    1.创建工作区和功能包 在我们写任何程序之前,第一步是创建一个容纳我们的功能包的工作区,然后再创建功能包本身. 创建工作区  使用标准的mkdir命令行去创建一个目录,我们将把这个新的目录称作工作区目 ...

  2. php中使用mysqli和pdo扩展,测试连接mysql数据库的效率。

    <?php /** * 测试pdo和mysqli的连接效率,各连接100次mysql数据库 */ header("Content-type:text/html;charset=utf8 ...

  3. ubuntu: 终端全屏快捷键

    ubuntu12.04终端全屏 (2012-06-08 19:49:04) 转载▼ 进入终端全屏: ctrl+alt+f1 ctrl+alt+f2 ctrl+alt+f3 ctrl+alt+f4 ct ...

  4. JS Guid生成

    function numToGuid(uid) { var str = "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"; var l = uid.to ...

  5. 黑科技抢先尝(续) - Windows terminal中WSL Linux 终端的极简美化指南

    目录 修改默认源,为apt-get安装提速 安装python 和 python pip 安装 zsh 安装powerline-font中的特定字体 安装powerline-shell 修改~目录下的配 ...

  6. poj1088滑雪最短路径

    滑雪 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 97281   Accepted: 36886 Description ...

  7. es6 reduce的用法

    一.forEach回调函数参数,item(数组元素).index(序列).arr(数组本身)循环数组,无返回值,不改变原数组不支持return操作输出,return只用于控制循环是否跳出当前循环 二. ...

  8. 51nod1108(曼哈顿距离)

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1108 题意:中文题诶- 思路:曼哈顿距离,题目没要求所求点要在 ...

  9. codevs2924 数独挑战

    2924 数独挑战 时间限制: 1 s 空间限制: 1000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description "芬兰数学家因卡拉,花费3个月时间设计出了世界 ...

  10. HTTP2 Sampler for JMeter

    今天开发大大说能不能帮忙压一下HTTP2的链接,便去查了一下相关的东西. HTTP 2.0 的出现,相比于 HTTP 1.x ,大幅度的提升了 web 性能.在与 HTTP/1.1 完全语义兼容的基础 ...