activiti 自定义用户

来源:互联网 发布:sql server添加约束 编辑:程序博客网 时间:2024/06/17 19:40

 

此文目的:

对网络上的关于对activiti 使用做一个总结,因为很难找到一个非常完整的代码结构。以后大家不用再东拼西凑。

本文是重写activiti的 用户部分,使用自定义管理器,也就是说不再使用act_id_*的数据库表。

一共创建或者修改6个文件。

1.CustomUserEntityManagerFactory.java

这是需要创建的第一个文件,是自定义的User的管理工厂类。

@Servicepublic class CustomUserEntityManagerFactory implements SessionFactory{// 使用自定义的User管理类@Resourceprivate 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;    }}


2.CustomGroupEntityManagerFactory.java

这是自定义Group管理工厂,也就是我们权限中的角色类的管理了。

@Servicepublic class CustomGroupEntityManagerFactory implements SessionFactory{@Resourceprivate CustomGroupEntityManager customGroupEntityManager;public Class<?> getSessionType() {// 返回原始的GroupManager类型return GroupEntityManager.class;}public Session openSession() {// 返回自定义的GroupManager实例return customGroupEntityManager;}@Autowired    public void setCustomGroupEntityManager(CustomGroupEntityManager customGroupEntityManager) {        this.customGroupEntityManager = customGroupEntityManager;    }}

3.CustomUserEntityManager.java

这是自定义用户管理类,管理用户方法。这里仅仅列举了两个方法,实际需求再去添加,具体方法进入UserEntityManager中查看。

 
@Componentpublic 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.mlf.activiti.entity.User cue = userMapper.getUserByUserName(userId);//这是我们的dao方法查询回来的方法,是自己定义的user        userEntity = ActivitiUserUtils.toActivitiUser(cue);//将自定义的user转化为activiti的类        return userEntity;//返回的是activiti的实体类    }    @Override    public List<Group> findGroupsByUser(final String userCode) {        if (userCode == null)            return null;        List<Role> groupIds = userMapper.getGroupIdsByUserName(userCode);        List<Group> gs = null;        gs = ActivitiUserUtils.toActivitiGroups(groupIds);        return gs;    }}


4.CustomGroupEntityManager .java

自定义组(角色)管理,具体方法进入GroupEntityManager中查看。

@Componentpublic 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.getId());//            activitRole = bindGroupWithRole.get(roleId);//此处只是根据RoleId获取RoleCode, 因实际表中无RoleCode字段,暂且如此实际,此行可注释掉            g.setId(/*activitRole != null ? activitRole :*/ roleId);            g.setName(bGroup.getName());            gs.add(g);        }        return gs;    }}


5.ActivitiUserUtils .java

这个工具类用来将业务中自己定义的用户转化为activiti中使用的user。

public class ActivitiUserUtils {public static UserEntity toActivitiUser(User bUser){          UserEntity userEntity = new UserEntity();          userEntity.setId(bUser.getName());          userEntity.setFirstName(bUser.getUsername());          userEntity.setLastName(bUser.getName());          userEntity.setPassword(bUser.getPassword());          userEntity.setEmail(bUser.getEmail());          userEntity.setRevision(1);          return userEntity;      }        public static GroupEntity toActivitiGroup(Role sysRole){          GroupEntity groupEntity = new GroupEntity();          groupEntity.setRevision(1);          groupEntity.setType("assignment");          groupEntity.setId(sysRole.getId());          groupEntity.setName(sysRole.getName());          return groupEntity;      }        public static List<Group> toActivitiGroups(List<Role> sysRoles){          List<Group> groups = new ArrayList<Group>();          for (Role sysRole : sysRoles) {              GroupEntity groupEntity = toActivitiGroup(sysRole);              groups.add(groupEntity);          }          return groups;      }}


6.spring-activiti.xml

这里指定定义以上的bean对象的生成,用来依赖注入。

<bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">        <property name="dataSource" ref="dataSource" />        <property name="transactionManager" ref="transactionManager" />        <property name="databaseSchemaUpdate" value="true" />                <!-- 自定义用户、用户组的配置 -->          <property name="customSessionFactories">               <list>                   <bean class="com.mlf.activiti.custom.CustomUserEntityManagerFactory" >                       <property name="customUserEntityManager" ref="customUserEntityManager"/>                  </bean>                   <bean class="com.mlf.activiti.custom.CustomGroupEntityManagerFactory" >                       <property name="customGroupEntityManager" ref="customGroupEntityManager"/>                  </bean>               </list>          </property>    </bean>        <bean id="customUserEntityManager" class="com.mlf.activiti.custom.manager.CustomUserEntityManager"/>    <bean id="customGroupEntityManager" class="com.mlf.activiti.custom.manager.CustomGroupEntityManager"/>



7.这样基本的配置全都结束了,哪里还有不足呢,比如说,3,4,5,中Role.java需要写,这个就是一个user类换了个名字嘛,很简单;另一个是我们基本都是用mybatis的,在3,4,中使用的mapper就是我们需要自己编码的dao层接口,和对应的mapper文件。这里就不多叙述了。

在以后使用用户,或者角色,就通过我们定义的管理器来控制。

注意,有的方法我们没有实现,如果调用的话,一旦访问act_id_*的数据,会出现我们不想要的数据。

下面两篇文章可以帮助深入理解,不过具体实例还是看我的上述代码,比较好。

如有错误,欢迎指出,评论,一起探讨。欢迎各位一起交流,我的邮箱公开。

推荐文章:浅谈Activiti工作流引擎用户管理

推荐文章:《同步或者重构Activiti Identify用户数据的多种方案比较》

0 0
原创粉丝点击