基于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
1
@Component
2
public
class
CustomGroupEntityManager
extends
GroupEntityManager {
3
private
static
final
Log logger =
LogFactory
4
.getLog(CustomGroupEntityManager.
class
);
5
6
@Autowired
7
private
UserMapper userMapper;
//
用于查詢實際業務中用戶表、角色等表
8
9
10
@Override
11
public
List<Group> findGroupsByUser(
final
String userCode) {
12
if
(userCode ==
null
)
13
return
null
;
14
15
List<Role> bGroupList =
userMapper.getGroupByUserName(userCode);
16
17
List<Group> gs =
new
java.util.ArrayList<>
();
18
GroupEntity g;
19
String roleId;
20
String activitRole;
21
for
(Role bGroup : bGroupList) {
22
g =
new
GroupEntity();
23
g.setRevision(1
);
24
g.setType("assignment"
);
25
roleId =
String.valueOf(bGroup.getRoleID());
26
activitRole = bindGroupWithRole.get(roleId);
//
此處只是根據RoleId獲取RoleCode, 因實際表中無RoleCode字段,暫且如此實際,此行可注釋掉
27
g.setId(activitRole !=
null
?
activitRole : roleId);
28
g.setName(bGroup.getRoleName());
29
gs.add(g);
30
}
31
return
gs;
32
}
33
}
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>
?
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

