基于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中一切都是文件(文件夹和硬件外设是特殊的文件),如果有可能尽量使用文本文件.文本文件是人和机器能理解的文件,也成为人和机器进行 交流的最好途径.由于所有的配置文件都是文本,所以你只需要一个 ...
随机推荐
- day1 java基础回顾-Junit单元测试
Junit单元测试框架的基本使用 一.搭建环境: 导入junit.jar包(junit4) 二.写测试类: 0,一般一个类对应一个测试类. 1,测试类与被测试类最好是放到同一个包中(可以是不同的源文件 ...
- shell程序---编译目录下全部.c或.cpp文件
今天大波又提起昨天我说的那个程序.这样的,起初我想写一个makefile,每次写完新代码后一键编译目录下所有的.cpp文件. 原因是用makefile的话,每次要把目标文件加紧去才能编译.感觉不方便. ...
- 数据库中rs("ABC")与rs.Fields("ABC").value的差别(Rs是RecordSet对象)
透过RecordSet取得数据的时候我们要将数据显示出来时,假设字段名称是ABCABCX = rs("ABC")对于RecordSet来说....是把ABC这个[Fileds对象] ...
- UVaLive 4256 Salesmen (简单DP)
题意:给一个无向连通图,和一个序列,修改尽量少的数,使得相邻两个数要么相等,要么相邻. 析:dp[i][j] 表示第 i 个数改成 j 时满足条件.然后就很容易了. 代码如下: #pragma com ...
- 黑科技抢先尝(续2) - Windows terminal中Powershell Tab的极简美化指南
目录 安装python 安装git 安装powerline字体 主题定制 安装oh-my-posh 查看策略组的执行权限 使用choco 安装终端模拟器 - ConEmu 优化 PowerShell ...
- 你需要了解的有关.NET日期时间的必要信息
引言 DateTime数据类型是一个复杂的问题,复杂到足以让你在编写[将日期从Web服务器返回到浏览器]简单代码时感到困惑. ASP.NET MVC 5和 Web API 2/ASP.NETCo ...
- SCUT - 205 - 饲养牛 - 最大流
https://scut.online/p/205 连着做所以一开始就觉得是网络流. 这种至多分配几次的很有网络流的特征. 一开始想从食物和饮料流向牛,但是怎么搞都不对. 其实可以从s流向食物,食物流 ...
- CSS 绝对定位与相对定位的区别
设置为绝对定位的元素框从文档流完全删除, 并相对于其包含块定位,包含块可能是文档中的另一个元素或者是初始包含块. 元素原先在正常文档流中所占的空间会关闭,就好像该元素原来不存在一样. 元素定位后生成一 ...
- 手机端处理布局rem
方法一 if (document.documentElement.clientWidth > 600) {//页面宽度大于600px让其宽度等于600px,字体大小等于60px,居中 docum ...
- DOTween Sequence 使用图解
http://blog.csdn.net/jiejieup/article/details/41521577 最近在使用DOTween制作一些动画过渡的内容,发现非常好用,使用Sequence类可以方 ...