基于Activiti5.15.1 自定义用户、组(User,Group)实现
基于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)实现的更多相关文章
- 基于 HTML5 的 WebGL 自定义 3D 摄像头监控模型
前言 随着视频监控联网系统的不断普及和发展, 网络摄像机更多的应用于监控系统中,尤其是高清时代的来临,更加快了网络摄像机的发展和应用. 在监控摄像机数量的不断庞大的同时,在监控系统中面临着严峻的现状问 ...
- 第2章 细说Linux系统用户/组管理(1)
2.1 用户和组的基本概念 用户和组是操作系统中一种身份认证资源. 每个用户都有用户名.用户的唯一编号uid(user id).所属组及其默认的shell,可能还有密码.家目录.附属组.注释信息等. ...
- 基于SpringSecurity和JWT的用户访问认证和授权
发布时间:2018-12-03 技术:springsecurity+jwt+java+jpa+mysql+mysql workBench 概述 基于SpringSecurity和JWT的用户访 ...
- Django自定义用户认证系统之自定义用户模型
参考文档:http://python.usyiyi.cn/django/topics/auth/customizing.html Django 自带的认证系统足够应付大多数情况,但你或许不打算使用现成 ...
- 工程师技术(一):启用SELinux保护、自定义用户环境、配置IPv6地址、配置聚合连接、配置firewalld防火墙
一.启用SELinux保护 目标: 本例要求为虚拟机 server0.desktop0 配置SELinux: 确保 SELinux 处于强制启用模式 在每次重新开机后,此设置必须仍然有效 方案: SE ...
- (九)ASP.NET自定义用户控件(2)
http://www.cnblogs.com/SkySoot/archive/2012/09/04/2670678.html 用户控件 在 .NET 里,可以通过两种方式把自己的控件插入到 Web 窗 ...
- asp.net core利用DI实现自定义用户系统,脱离ControllerBase.User
前言 很多时候其实我们并不需要asp.net core自带的那么复杂的用户系统,基于角色,各种概念,还得用EF Core,而且在web应用中都是把信息存储到cookie中进行通讯(我不喜欢放cooki ...
- Sqlserver如何递归查询层级数据将父级字段和本级某个字段合并?如何自定义用户函数并调用?
开门见山,首先说下遇到的问题:前期系统地区字典表中,每个省市县只存了本级名称,没存完整的字段.如:肥西县隶属安徽省合肥市,表中就存了一个肥西县.现有需求需要将完整字段显示,由于系统已在线上运营,无法做 ...
- Linux的用户(组),权限,文件精妙的三角关系,和强大的帮助系统
在linux中一切都是文件(文件夹和硬件外设是特殊的文件),如果有可能尽量使用文本文件.文本文件是人和机器能理解的文件,也成为人和机器进行 交流的最好途径.由于所有的配置文件都是文本,所以你只需要一个 ...
随机推荐
- centos6.5安装gtk开发环境
0.说明 由于 centos 默认的桌面是 gnome 的,我们知道gnome 的依赖库就是 gtk,而 gtk 各个版本的差异性还是很大的,所以我们需要根据 centos 的不同版本选择和 cent ...
- 32.Docker安装MongoDb
从hub.docker.com上去找镜像 阿里云的国内的镜像地址 填上去之后,然后重启下docker就可以了 docker images列出本地的镜像 拉取mango的镜像 运行这个镜像 docker ...
- JavaWeb_tomcat设置默认应用
在tomcat的server.xml文件中设置默认应用. 在tomcat文件目录里面的conf/server.xml文件中,在<Engine>...</Engine>中再增加一 ...
- 7.13实习培训日志 Docker
静态博客github地址 静态博客github地址轻量版 Docker Docker镜像 Docker镜像概念 Docker镜像下载时的分层体现:一层层下载,下载过程中给出了每一层的 ID 的前 12 ...
- linux jar 后台运行
在linux系统中可以利用nohup来执行任何命令,并把命令自动调到linux后台运行,不锁定当前ssh窗口,也不会被ctrl + c,alt + F4之类打断程序的动行.如: nohup java ...
- Spring Security 表达式(Expressions) - hasRole示例
1.概述 Spring Security使用强大的Spring Expression Language(SpEL)提供各种各样的表达式.大多数这些Security表达式是针对上下文对象(当前经过身份验 ...
- 模板 - 动态规划 - 数位dp
#include<bits/stdc++.h> using namespace std; #define ll long long ]; ll dp[][/*可能需要的状态2*/];//不 ...
- lightoj1009【DFS】
思路: 连通快+二分图,每次+二分图大的元素个数. #include<bits/stdc++.h> using namespace std; typedef unsigned long l ...
- 图论2 最近公共祖先LCA
模板 吸取洛谷P3379的教训,我决定换板子(其实本质都是倍增是一样的),把vector换成了边表 输入格式: 第一行包含三个正整数N.M.S,分别表示树的结点个数.询问的个数和树根结点的序号. 接下 ...
- go系列(6)- beego日志模块的使用
1.安装日志模块 切换到工作目录,下载日志模块 cd /data/work/go/ go get github.com/astaxie/beego/logs 2.导入日志模块 使用的时候,需要导入模块 ...