基于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元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
