`

扩展activiti使用自己的用户表和群组表

 
阅读更多

1、自定义的Activiti用户组管理器,主要重写对用户群组的增删改查等操作。

import java.util.ArrayList;
import java.util.List;
 
import javax.persistence.EntityManager;
import javax.persistence.PersistenceException;
import javax.persistence.Query;
 
import org.activiti.engine.identity.Group;
import org.activiti.engine.identity.GroupQuery;
import org.activiti.engine.impl.GroupQueryImpl;
import org.activiti.engine.impl.Page;
import org.activiti.engine.impl.persistence.entity.GroupEntity;
import org.activiti.engine.impl.persistence.entity.GroupManager;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
 
/**
 * 自定义的Activiti用户组管理器
 * 
 */
public class CustomGroupManager extends GroupManager {
    private static final Log logger = LogFactory
            .getLog(CustomGroupManager.class);
 
    @Override
    public GroupQuery createNewGroupQuery() {
        // TODO Auto-generated method stub
        return super.createNewGroupQuery();
    }
 
    @Override
    public List<Group> findGroupByQueryCriteria(GroupQueryImpl query, Page page) {
        // TODO Auto-generated method stub
        return super.findGroupByQueryCriteria(query, page);
    }
 
    @Override
    public long findGroupCountByQueryCriteria(GroupQueryImpl query) {
        // TODO Auto-generated method stub
        return super.findGroupCountByQueryCriteria(query);
    }
 
    @Override
    public GroupEntity findGroupById(String groupId) {
        // TODO Auto-generated method stub
        return super.findGroupById(groupId);
    }
 
    @Override
    public List<Group> findGroupsByUser(String userId) {
        // TODO Auto-generated method stub
        return super.findGroupsByUser(userId);
    }
 
    @Override
    public List<Group> findPotentialStarterUsers(String proceDefId) {
        return super.findPotentialStarterUsers(proceDefId);
    }
 
 
     
}

 注意:如果想使用自己定义的用户组表,请重新这个findGroupById(final String groupCode)和findGroupsByUser(final String userCode),这两个方法是activiti查询的用户组的方法。

2、自定义的Activiti用户组会话工厂,返回类型不要变还是GroupManager,主要是覆盖系统默认添加的用户群组工厂。

import org.activiti.engine.impl.interceptor.Session;
import org.activiti.engine.impl.interceptor.SessionFactory;
import org.activiti.engine.impl.persistence.entity.GroupManager;
import org.springframework.beans.factory.annotation.Autowired;
 
/**
 * 自定义的Activiti用户组会话工厂
 */
public class CustomGroupManagerFactory implements SessionFactory {
    private GroupManager groupManager;
 
    @Autowired
    public void setGroupManager(GroupManager groupManager) {
        this.groupManager = groupManager;
    }
 
    public Class<?> getSessionType() {
        // 返回原始的GroupManager类型
        return GroupManager.class;
    }
 
    public Session openSession() {
        // 返回自定义的GroupManager实例
        return groupManager;
    }
}

 3、自定义的Activiti用户管理器, 主要重写对用户的增删改查等操作。

 

import java.util.List;
 
import org.activiti.engine.identity.Group;
import org.activiti.engine.identity.User;
import org.activiti.engine.impl.Page;
import org.activiti.engine.impl.UserQueryImpl;
import org.activiti.engine.impl.persistence.entity.IdentityInfoEntity;
import org.activiti.engine.impl.persistence.entity.UserEntity;
import org.activiti.engine.impl.persistence.entity.UserManager;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
 
/**
 * 自定义的Activiti用户管理器
 */
public class CustomUserManager extends UserManager {
    private static final Log logger = LogFactory
            .getLog(CustomUserManager.class);
 
    @Override
    public UserEntity findUserById(String userId) {
        return super.findUserById(userId);
    }
 
    @Override
    public List<User> findUserByQueryCriteria(UserQueryImpl query, Page page) {
        // TODO Auto-generated method stub
        return super.findUserByQueryCriteria(query, page);
    }
 
    @Override
    public long findUserCountByQueryCriteria(UserQueryImpl query) {
        // TODO Auto-generated method stub
        return super.findUserCountByQueryCriteria(query);
    }
 
    @Override
    public List<Group> findGroupsByUser(String userId) {
        // TODO Auto-generated method stub
        return super.findGroupsByUser(userId);
    }
 
    @Override
    public IdentityInfoEntity findUserInfoByUserIdAndKey(String userId,
            String key) {
        // TODO Auto-generated method stub
        return super.findUserInfoByUserIdAndKey(userId, key);
    }
 
    @Override
    public List<String> findUserInfoKeysByUserIdAndType(String userId,
            String type) {
        // TODO Auto-generated method stub
        return super.findUserInfoKeysByUserIdAndType(userId, type);
    }
 
    @Override
    public Boolean checkPassword(String userId, String password) {
        // TODO Auto-generated method stub
        return super.checkPassword(userId, password);
    }
 
    @Override
    public List<User> findPotentialStarterUsers(String proceDefId) {
        // TODO Auto-generated method stub
        return super.findPotentialStarterUsers(proceDefId);
    }
     
}

 注意:如果想使用自己定义的用户表,请重新这个findUserById(final String userCode)和findGroupsByUser(final String userCode),这两个方法是activiti查询的用户的方法

4、自定义的Activiti用户会话工厂, ,返回类型不要变还是 UserManager,主要是覆盖系统默认添加的用户工厂。

 

import org.activiti.engine.impl.interceptor.Session;
import org.activiti.engine.impl.interceptor.SessionFactory;
import org.activiti.engine.impl.persistence.entity.UserManager;
import org.springframework.beans.factory.annotation.Autowired;
 
/**
 * 自定义的Activiti用户会话工厂
 */
public class CustomUserManagerFactory implements SessionFactory {
    private UserManager userManager;
 
    @Autowired
    public void setUserManager(UserManager userManager) {
        this.userManager = userManager;
    }
 
    public Class<?> getSessionType() {
        // 返回原始的UserManager类型
        return UserManager.class;
    }
 
    public Session openSession() {
        // 返回自定义的UserManager实例
        return userManager;
    }
}

 5、activiti.cfg.xml相应的配置:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans   http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="processEngineConfiguration"
        class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration">
         
        <property name="jobExecutorActivate" value="false" />
        <property name="history" value="none" />
        <property name="customSessionFactories">  
            <list>  
               <bean class="com.xxx.activiti.ext.CustomGroupEntityManagerFactory" >
                    <property name="groupEntityManager"> 
                        <bean class="com.xxx.activiti.ext.CustomGroupEntityManager"/>
                     </property>
                </bean>
                <bean class="com.xxx.activiti.ext.CustomUserEntityManagerFactory" >
                    <property name="userEntityManager"> 
                        <bean class="com.xxx.activiti.ext.CustomUserEntityManager"/>
                     </property>
                 </bean>
  
            </list>  
     </property>
    </bean>
</beans>

 http://www.kafeitu.me/activiti/2012/04/23/synchronize-or-redesign-user-and-role-for-activiti.html

分享到:
评论

相关推荐

    基于Activiti的工作流引擎openwebflow.zip

    OpenWebFlow剥离了用户信息表的统一管理,客户程序可以忘掉Activiti的用户表、群组表、成员关系表,详见自定义用户成员关系管理;允许运行时定义activity!彻底满足“中国特色”,并提供了安全的(同时也是优雅的)...

    java开源包8

    使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...

    JAVA上百实例源码以及开源项目

    (1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户可以在终端上直接地使用它,...

    java开源包1

    使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...

    java开源包11

    使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...

    java开源包2

    使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...

    java开源包3

    使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...

    java开源包6

    使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...

    java开源包5

    使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...

    java开源包10

    使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...

    java开源包4

    使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...

    JAVA上百实例源码以及开源项目源代码

    (1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户可以在终端上直接地使用它,...

    java开源包7

    使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...

    java开源包9

    使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...

    java开源包101

    使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...

    Java资源包01

    使用简便和直截了当,用户只需要加载的图片和调整帧您想要的,如位置,时间显示和处理方法前帧。 Java的PList类库 Blister Blister是一个用于操作苹果二进制PList文件格式的Java开源类库(可用于发送数据给iOS应用...

Global site tag (gtag.js) - Google Analytics