基于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

 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>

基于Activiti5.15.1 自定义用户、组(User,Group)实现

时间: 2024-08-05 10:07:24

基于Activiti5.15.1 自定义用户、组(User,Group)实现的相关文章

用户 组 和权限 以及权限的 分类

关于文件的安全我们要从3A验证 说起 1  Authentication:认证 2  Authorization:授权 3  Accouting|Audition:审计 由于系统文件的用户太多为了便于管理 我们便把系统的用户 进行分类 赋予权限 合理地分配资源 所以今天介绍的是 系统用户 用户组 的一些权限的 分配 修改 和文件的 权限修改 和赋权 以及一些特殊权限的用法 用户的分类 管理员:root 0 普通用户:1-65535 系统用户:1-499(CENTOS6) 1-999 对守护进程获

SELinux安全机制 自定义用户环境 firewalld基础配置

Top NSD ENGINEER DAY03 案例1:启用SELinux保护 案例2:自定义用户环境 案例3:配置firewalld防火墙 1 案例1:启用SELinux保护 1.1 问题 本例要求为虚拟机 server0.desktop0 配置SELinux: 确保 SELinux 处于强制启用模式 在每次重新开机后,此设置必须仍然有效 1.2 方案 SELinux,Security-Enhanced Linux:是由美国NSA国家安全局提供的一套基于内核的增强的强制安全保护机制,针对用户.进

第2章 系统用户/组管理

2.1 用户和组的基本概念 用户和组是操作系统中一种身份认证资源. 每个用户都有用户名.用户的唯一编号uid(user id).所属组及其默认的shell,可能还有密码.家目录.附属组.注释信息等. 每个组也有自己的名称.组唯一编号gid(group id).一般来说,gid和uid是可以不相同的,但绝大多数都会让它们保持一致,大致属于约定俗成类的概念吧. 组分为主组(primary group)和辅助组(secondary group)两种,用户一定会属于某个主组,也可以同时加入多个辅助组.

在spring security手动 自定义 用户认证 SecurityContextHolder

1.Spring Security 目前支持认证一体化如下认证技术: HTTP BASIC authentication headers (一个基于IEFT  RFC 的标准) HTTP Digest authentication headers (一个基于IEFT  RFC 的标准) HTTP X.509 client certificate exchange  (一个基于IEFT RFC 的标准) LDAP (一个非常常见的跨平台认证需要做法,特别是在大环境) Form-based auth

Linux用户,组和权限管理

用户,组,权限 一.了解什么是用户,组和权限 1.对于linux系统来说,简单明了的特点就是多用户,多任务,也就是说一台linux系统的主机上面可以同时允许多个用户登录,当通过多个终端登录时可以同时使用这台linux的系统,然而对于linux习题来说,一切皆文件,别人和自己的工作任务都是以文件的形式存在的,不同的用户之间岂不是没有隐私或者安全而言,其实在linux上不是这样的,我们可以理解linux把每一个用户分配一间屋子,没有钥匙即权限我们是进不去浏览以及修改文件的,但是既然是一间屋子,那当然

(九)ASP.NET自定义用户控件(2)

http://www.cnblogs.com/SkySoot/archive/2012/09/04/2670678.html 用户控件 在 .NET 里,可以通过两种方式把自己的控件插入到 Web 窗体框架中: 用户控件:它是一小段页面,可以包括静态 HTML 代码和 Web 服务器控件.用户控件的好处是一旦创建了它,就可以在同一个 Web 应用程序的多个页面重用它.用户控件可以加入自己的属性,事件和方法. 自定义服务器控件:它是被编译的类,它通过编程生成自己的 HTML .服务器控件总是预编译

NetScaler AG自定义用户门户

自定义用户门户 为×××用户提供门户服务的NetScaler Gateway安装包括选择门户主题的选项,以便为门户页面创建自定义外观.您可以从提供的主题集中进行选择,也可以使用主题作为模板来构建自定义或品牌门户.使用配置实用程序,您可以通过添加新徽标,背景图像,自定义输入框标签以及基于CSS的门户网站设计的各种其他属性来修改主题.内置门户主题包括五种语言的内容:英语,法语,西班牙语,德语和日语.不同的用户以不同的语言提供服务,具体取决于其Web浏览器报告的区域设置. 您可以选择创建自定义最终用户

基于vue.js的简单用户管理

功能描述:添加.修改.搜索过滤 效果图: 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <title>简单用户管理</title> 5 <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"

西游之路——python全栈——自定义用户认证

django自定义用户认证(使用自定义的UserProfile,而不是django自带的),就需要(django要求)将为UserProfile单独创建一个app,这个app啥也不干,就是为UserProfile而生的; 这里我们创建一个app,名字叫做custom_auth,事实上,我们只需要对其中的models文件和admin.py做操作就可以了; 第一步:  创建user model 下面是models.py文件的内容: 1 from django.utils.safestring imp