Activiti与SpringBoot的整合
1.pom依赖
<!--activiti7与SpringBoot整合的相关依赖--><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.0.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent>
<properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties>
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>
<!-- https://mvnrepository.com/artifact/org.activiti/activiti-spring-boot-starter --><dependency><groupId>org.activiti</groupId><artifactId>activiti-spring-boot-starter</artifactId><version>7.0.0.Beta2</version></dependency>
<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.5</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.27</version></dependency>
</dependencies>
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
2.数据库配置
spring:datasource:url: jdbc:mysql://localhost:3306/activiti?useUnicode=true&characterEncoding=utf8&serverTimezone=GMTusername : rootpassword : rootdriver-class-name: com.mysql.jdbc.Driver
3.添加SpringSecurity安全框架
因为 Activiti7 与 SpringBoot 整合后,默认情况下,集成了 SpringSecurity 安全框架,这样我们就要去准备 SpringSecurity 整合进来的相关用户权限配置信息。
(1)添加SecurityUtil类
@Component
public class SecurityUtil {
@Autowiredprivate UserDetailsService userDetailsService;
public void logInAs(String username) {
UserDetails user = userDetailsService.loadUserByUsername(username);if (user == null) {throw new IllegalStateException("User " + username + " doesn't exist, please provide a valid user");}
SecurityContextHolder.setContext(new SecurityContextImpl(new Authentication() {@Overridepublic Collection<? extends GrantedAuthority> getAuthorities() {return user.getAuthorities();}
@Overridepublic Object getCredentials() {return user.getPassword();}
@Overridepublic Object getDetails() {return user;}
@Overridepublic Object getPrincipal() {return user;}
@Overridepublic boolean isAuthenticated() {return true;}
@Overridepublic void setAuthenticated(boolean isAuthenticated) throws IllegalArgumentException {
}
@Overridepublic String getName() {return user.getUsername();}}));org.activiti.engine.impl.identity.Authentication.setAuthenticatedUserId(username);}
}
(2)添加DemoApplicationConfig 类
它的作用是为了实现SpringSecurity 框架的用户权限的配置,这样我们就可以在系统中使用用户权限信息。
@Configuration
@EnableWebSecurity
public class DemoApplicationConfiguration extends WebSecurityConfigurerAdapter {
private Logger logger = LoggerFactory.getLogger(DemoApplicationConfiguration.class);
@Override@Autowiredpublic void configure(AuthenticationManagerBuilder auth) throws Exception {auth.userDetailsService(myUserDetailsService());}
@Beanpublic UserDetailsService myUserDetailsService() {
InMemoryUserDetailsManager inMemoryUserDetailsManager = new InMemoryUserDetailsManager();
String[][] usersGroupsAndRoles = {{"salaboy", "password", "ROLE_ACTIVITI_USER", "GROUP_activitiTeam"},{"ryandawsonuk", "password", "ROLE_ACTIVITI_USER", "GROUP_activitiTeam"},{"erdemedeiros", "password", "ROLE_ACTIVITI_USER", "GROUP_activitiTeam"},{"system", "password", "ROLE_ACTIVITI_USER", "GROUP_otherTeam"},{"admin", "password", "ROLE_ACTIVITI_ADMIN"},};
for (String[] user : usersGroupsAndRoles) {List<String> authoritiesStrings = Arrays.asList(Arrays.copyOfRange(user, 2, user.length));logger.info("> Registering new user: " + user[0] + " with the following Authorities[" + authoritiesStrings + "]");inMemoryUserDetailsManager.createUser(new User(user[0], passwordEncoder().encode(user[1]),authoritiesStrings.stream().map(SimpleGrantedAuthority::new).collect(Collectors.toList())));}
return inMemoryUserDetailsManager;}
@Overrideprotected void configure(HttpSecurity http) throws Exception {http.csrf().disable().authorizeRequests().anyRequest().authenticated().and().httpBasic();}
@Beanpublic PasswordEncoder passwordEncoder() {return new BCryptPasswordEncoder();}
}
(3)创建测试类
@RunWith(SpringRunner.class)
@SpringBootTest
public class Actviti7DemoApplicationTests {@Autowiredprivate ProcessRuntime processRuntime;@Autowiredprivate TaskRuntime taskRuntime;@Autowiredprivate SecurityUtil securityUtil;
}
(4)查看流程定义信息
activiti7与SpringBoot整合后会自动读取resources/processes下的所有bpmn流程图
@Testpublic void contextLoads() {securityUtil.logInAs("salaboy");Page<ProcessDefinition> processDefinitionPage = processRuntime.processDefinitions(Pageable.of(0, 10));System.out.println("可用的流程定义数量:" + processDefinitionPage.getTotalItems());for (ProcessDefinition pd : processDefinitionPage.getContent()) {System.out.println("流程定义:" + pd);}}
(5)启动流程实例
@Test
public void testStartProcess() {securityUtil.logInAs("system");ProcessInstance pi = processRuntime.start(ProcessPayloadBuilder.start().withProcessDefinitionKey("myProcess_1").build());System.out.println("流程实例ID:" + pi.getId());
}
(6)查询并完成任务
该实例的流程图中,已经指定两个步骤的指派的组。我们可以用指定组中的用户登录去查询任务并完成任务。
@Testpublic void testTask() {securityUtil.logInAs("ryandawsonuk");Page<Task> taskPage = taskRuntime.tasks(Pageable.of(0, 10));if (taskPage.getTotalItems() > 0) {//遍历任务列表for (Task task : taskPage.getContent()) {//拾取任务 candidateGroups="activitiTeam"taskRuntime.claim(TaskPayloadBuilder.claim().withTaskId(task.getId()).build());System.out.println("任务:" + task);//执行任务taskRuntime.complete(TaskPayloadBuilder.complete().withTaskId(task.getId()).build());}}Page<Task> taskPage2 = taskRuntime.tasks(Pageable.of(0, 10));if (taskPage2.getTotalItems() > 0) {System.out.println("任务:" + taskPage2.getContent());}}
Activiti与SpringBoot的整合相关推荐
- 《Activiti/Flowable 深入BPM工作流》- Activiti 与springboot 怎么进行整合?
<Activiti/Flowable 深入BPM工作流> -Activiti 与springboot 怎么进行整合? 一.问题 Activiti 如何与springboot进行整合? 1 ...
- Activiti学习笔记:Activiti和Spring整合、Activiti和SpringBoot整合之Gradle版
环境 activiti:7+ Java:11 本机环境:window MySQL:5.7 gradlew:6+ Activiti和Spring整合 大体流程: 先创建项目,并导入依赖 添加activi ...
- Docker 部署 SpringBoot 项目整合 Redis 镜像做访问计数Demo
Docker 部署SpringBoot项目整合 Redis 镜像做访问计数Demo 最终效果如下 大概就几个步骤 1.安装 Docker CE 2.运行 Redis 镜像 3.Java 环境准备 4. ...
- springboot+security整合(1)
说明 springboot 版本 2.0.3 源码地址:点击跳转 系列 springboot+security 整合(1) springboot+security 整合(2) springboot+s ...
- SpringBoot服务整合(整合邮件服务、定时调度、Actuator监控)
在进行项目开发的时候经常会遇见以下的几个问题:需要进行邮件发送.定时的任务调度.系统的监控处理,实际上这些操 作都可以通过 SpringBoot 进行整合操作.2.1.SpringBoot 整合邮件服 ...
- springboot下整合各种配置文件
本博是在springboot下整合其他中间件,比如,mq,redis,durid,日志...等等 以后遇到再更.springboot真是太便捷了,让我们赶紧涌入到springboot的怀抱吧. ap ...
- springboot项目整合mybatis
SpringBoot项目整合mybatis 本章内容 使用 idea创建 SpringBoot项目 SpringBoot项目中配制 mybatis 框架 1 创建 SpringBoot项目 1.1 在 ...
- SpringBoot系列九:SpringBoot服务整合(整合邮件服务、定时调度、Actuator监控)
声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅. 1.概念:SpringBoot 服务整合 2.背景 在进行项目开发的时候经常会遇见以下的几个问题:需要进行邮件发送.定时的任务调 ...
- SpringBoot项目整合Retrofit最佳实践,这才是最优雅的HTTP客户端工具!
作者:六点半起床 juejin.im/post/6854573211426750472 大家都知道okhttp是一款由square公司开源的java版本http客户端工具.实际上,square公司还开 ...
最新文章
- 微型计算机硬件采用什么,微型计算机的硬件系统包括什么?
- 敏捷开发流程的8个步骤_敏捷开发——个体和互动高于流程和工具
- python神经网络实例_Python编程实现的简单神经网络算法示例
- 正则表达式中符号的含义(可能不是很全)
- qt 分辨率问题 安卓_Qt for Android dp转换
- 计算机地图制图的点状符号制作,计算机地图制图地图符号库系统建立全解.doc...
- 信息学奥赛一本通1090
- Photoshop 有什么技巧让你相见恨晚?
- 解释缩写词在html中的标记写法是,abbr:HTML5中缩略词标记的重要作用
- 2021-2027全球与中国自动卡车装卸系统市场现状及未来发展趋势
- 企业网站常见误区-金瑞帆高端建站
- 妻子,情人,玫瑰花,刺木花(转载)
- AD多层板拼板内电层网络丢失处理
- 30ea什么意思_ea阶段是什么?你未必全知道!
- 【SSLGZ 1614】医院设置(Dijkstra)
- Win系统 - 解决 Win10 笔记本 WiFi 的标志变成小地球
- LabVIEW编程LabVIEW控制KELLER压力传感器例程与相关资料
- 1715. 苹果和橘子的个数
- 深度学习数据驱动_3D目标检测深度学习方法数据预处理综述
- 菜谱识别_9种美味食谱,可共享,修改和重新混合