當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
Activiti与SpringBoot的整合
生活随笔
收集整理的這篇文章主要介紹了
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与Spring的整合
- 下一篇: 前后端分离中使用基于jwt的token进