gpt4 book ai didi

java - 配置 Activiti 以重用 Spring Boot 中现有的用户/组数据

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:12:41 26 4
gpt4 key购买 nike

我正在使用 Spring Boot 1.4.3.RELEASE。我已经创建了一个简单的 MVC 应用程序来管理用户和组。现在,我正在尝试将 Activiti 5.21.0 集成到我的项目中,并通过 Activiti 重用现有的用户/组表。

我已经扩展了 Activiti 的默认 UserEntityManagerGroupEntityManager 类,如下所示:

CustomUserEntityManager.java

import java.util.List;

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.UserEntityManager;

import com.example.spring.dao.UserDao;
import com.example.spring.model.User;

public class CustomUserEntityManager extends UserEntityManager {

private UserDao userDao;

public CustomUserEntityManager(UserDao userDao) {
this.userDao = userDao;
}

@Override
public UserEntity findUserById(String userId) {
User user = userDao.findById(Integer.parseInt(userId));
return userToActivitiUser(user);
}

@Override
public org.activiti.engine.identity.User createNewUser(String userId) {
throw new UnsupportedOperationException();
}

@Override
public void insertUser(org.activiti.engine.identity.User user) {
throw new UnsupportedOperationException();
}

@Override
public void updateUser(org.activiti.engine.identity.User updatedUser) {
throw new UnsupportedOperationException();
}

@Override
public void deleteUser(String userId) {
throw new UnsupportedOperationException();
}

@Override
public List<org.activiti.engine.identity.User> findUserByQueryCriteria(UserQueryImpl query, Page page) {
throw new UnsupportedOperationException();
}

@Override
public long findUserCountByQueryCriteria(UserQueryImpl query) {
throw new UnsupportedOperationException();
}

@Override
public IdentityInfoEntity findUserInfoByUserIdAndKey(String userId, String key) {
throw new UnsupportedOperationException();
}

@Override
public List<String> findUserInfoKeysByUserIdAndType(String userId, String type) {
throw new UnsupportedOperationException();
}

private UserEntity userToActivitiUser(User user) {
UserEntity activitiUser = new UserEntity();
activitiUser.setId(user.getId().toString());
activitiUser.setPassword(user.getPassword());
activitiUser.setFirstName(user.getUsername());
activitiUser.setLastName(user.getLastName());
activitiUser.setEmail(user.getEmail());
return activitiUser;
}

}

ActivitiGroupEntityManager.java

import java.util.List;

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.GroupEntityManager;

import com.example.spring.dao.CMSGroupDao;

public class CustomGroupEntityManager extends GroupEntityManager {

private CMSGroupDao groupDao;

public CustomGroupEntityManager(CMSGroupDao groupDao) {
this.groupDao = groupDao;
}

@Override
public List<Group> findGroupsByUser(String userId) {
// TODO add logic
return null;
}

@Override
public Group createNewGroup(String groupId) {
throw new UnsupportedOperationException();
}

@Override
public void deleteGroup(String groupId) {
throw new UnsupportedOperationException();
}

@Override
public GroupQuery createNewGroupQuery() {
return super.createNewGroupQuery();
}

@Override
public List<Group> findGroupByQueryCriteria(GroupQueryImpl query, Page page) {
throw new UnsupportedOperationException();
}

@Override
public long findGroupCountByQueryCriteria(GroupQueryImpl query) {
throw new UnsupportedOperationException();
}

}

然后,我添加了如下自定义工厂:

CustomUserManagerFactory.java

import org.activiti.engine.impl.interceptor.Session;
import org.activiti.engine.impl.interceptor.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.example.spring.dao.UserDao;

@Component(value = "customUserManagerFactory")
public class CustomUserManagerFactory implements SessionFactory {

@Autowired
private UserDao userDao;

@Override
public Class<?> getSessionType() {
return CustomUserEntityManager.class;
}

@Override
public Session openSession() {
return new CustomUserEntityManager(userDao);
}

}

CustomGroupManagerFactory.java

import org.activiti.engine.impl.interceptor.Session;
import org.activiti.engine.impl.interceptor.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.example.spring.dao.CMSGroupDao;

@Component(value = "customGroupManagerFactory")
public class CustomGroupManagerFactory implements SessionFactory {

@Autowired
private CMSGroupDao groupDao;

@Override
public Class<?> getSessionType() {
return CustomGroupEntityManager.class;
}

@Override
public Session openSession() {
return new CustomGroupEntityManager(groupDao);
}

}

最后,我添加了 ProcessEngine 配置 bean,如下所示:

ProcessEngineConfig.java

package com.example.spring.configuration;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.Resource;

import org.activiti.engine.impl.interceptor.SessionFactory;
import org.activiti.spring.SpringProcessEngineConfiguration;
import org.activiti.spring.boot.ProcessEngineConfigurationConfigurer;
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
import org.springframework.context.annotation.Configuration;

@Configuration
@AutoConfigureBefore(org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration.class)
public class ProcessEngineConfig implements ProcessEngineConfigurationConfigurer{

@Resource(name = "customUserManagerFactory")
private SessionFactory userManagerFactory;

@Resource(name = "customGroupManagerFactory")
private SessionFactory groupManagerFactory;

public void configure(SpringProcessEngineConfiguration pec) {
pec.setDbIdentityUsed(false);
List<SessionFactory> customSessionFactories = new ArrayList<SessionFactory>();
customSessionFactories.add(userManagerFactory);
customSessionFactories.add(groupManagerFactory);
if (pec.getCustomSessionFactories() == null){
pec.setCustomSessionFactories(customSessionFactories);
}
else{
pec.getCustomSessionFactories().addAll(customSessionFactories);
}
}
}

来自 pom.xml 的重要部分

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<activiti.version>5.21.0</activiti.version>
</properties>

<dependencies>

<!-- Activiti Dependencies -->
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter-basic</artifactId>
<version>${activiti.version}</version>
</dependency>
<dependency>
<groupId>org.activiti</groupId>
<artifactId>activiti-spring-boot-starter-actuator</artifactId>
<version>${activiti.version}</version>
</dependency>

<!-- Spring-boot Dependencies -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
.......
.......
</dependencies>

当我使用 org.activiti.engine.IdentityService.newUser() 创建用户时,应用程序正在执行,没有任何运行时错误,但是保存在 Activit 用户表中并且未抛出 UnsupportedOperationException(),这意味着自定义配置不起作用。

任何帮助将不胜感激!!

最佳答案

对于 CustomGroupManagerFactory,类型应该是:

  @Override
public Class<?> getSessionType() {
return GroupIdentityManager.class;
}

对于 CustomUserManagerFactory,类型应该是:

  @Override
public Class<?> getSessionType() {
return UserIdentityManager.class;
}

我希望上面的解决方案能帮助你让它工作。

关于java - 配置 Activiti 以重用 Spring Boot 中现有的用户/组数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41611271/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com