基于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. centos6.5安装gtk开发环境

    0.说明 由于 centos 默认的桌面是 gnome 的,我们知道gnome 的依赖库就是 gtk,而 gtk 各个版本的差异性还是很大的,所以我们需要根据 centos 的不同版本选择和 cent ...

  2. 32.Docker安装MongoDb

    从hub.docker.com上去找镜像 阿里云的国内的镜像地址 填上去之后,然后重启下docker就可以了 docker images列出本地的镜像 拉取mango的镜像 运行这个镜像 docker ...

  3. JavaWeb_tomcat设置默认应用

    在tomcat的server.xml文件中设置默认应用. 在tomcat文件目录里面的conf/server.xml文件中,在<Engine>...</Engine>中再增加一 ...

  4. 7.13实习培训日志 Docker

    静态博客github地址 静态博客github地址轻量版 Docker Docker镜像 Docker镜像概念 Docker镜像下载时的分层体现:一层层下载,下载过程中给出了每一层的 ID 的前 12 ...

  5. linux jar 后台运行

    在linux系统中可以利用nohup来执行任何命令,并把命令自动调到linux后台运行,不锁定当前ssh窗口,也不会被ctrl + c,alt + F4之类打断程序的动行.如: nohup java ...

  6. Spring Security 表达式(Expressions) - hasRole示例

    1.概述 Spring Security使用强大的Spring Expression Language(SpEL)提供各种各样的表达式.大多数这些Security表达式是针对上下文对象(当前经过身份验 ...

  7. 模板 - 动态规划 - 数位dp

    #include<bits/stdc++.h> using namespace std; #define ll long long ]; ll dp[][/*可能需要的状态2*/];//不 ...

  8. lightoj1009【DFS】

    思路: 连通快+二分图,每次+二分图大的元素个数. #include<bits/stdc++.h> using namespace std; typedef unsigned long l ...

  9. 图论2 最近公共祖先LCA

    模板 吸取洛谷P3379的教训,我决定换板子(其实本质都是倍增是一样的),把vector换成了边表 输入格式: 第一行包含三个正整数N.M.S,分别表示树的结点个数.询问的个数和树根结点的序号. 接下 ...

  10. go系列(6)- beego日志模块的使用

    1.安装日志模块 切换到工作目录,下载日志模块 cd /data/work/go/ go get github.com/astaxie/beego/logs 2.导入日志模块 使用的时候,需要导入模块 ...