Step a: introducing dependent
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.4.RELEASE</version> </parent> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</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.38</version> </dependency>
Step Two: Profile application.yml
spring: datasource: url: jdbc:mysql://localhost:3306/activiti?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT username : root password : 123 driver-class-name: com.mysql.jdbc.Driver activiti: db-history-used: true
Step 3: SpringSecurity configuration to which the project
1.SecurityUtil.java on landing rights
@Component public class SecurityUtil { @Autowired private 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() { @Override public Collection<? extends GrantedAuthority> getAuthorities() { return user.getAuthorities(); } @Override public Object getCredentials() { return user.getPassword(); } @Override public Object getDetails() { return user; } @Override public Object getPrincipal() { return user; } @Override public boolean isAuthenticated() { return true; } @Override public void setAuthenticated(boolean isAuthenticated) throws IllegalArgumentException { } @Override public String getName() { return user.getUsername(); } })); org.activiti.engine.impl.identity.Authentication.setAuthenticatedUserId(username); } }
2.DemoApplicationConfiguration about rights profiles
@Configuration @EnableWebSecurity public class DemoApplicationConfiguration extends WebSecurityConfigurerAdapter { private Logger logger = LoggerFactory.getLogger(DemoApplicationConfiguration.class); @Override @Autowired public void configure(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(myUserDetailsService()); } @Bean public 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"}, {"other", "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(s -> new SimpleGrantedAuthority(s)).collect(Collectors.toList()))); } return inMemoryUserDetailsManager; } @Override protected void configure(HttpSecurity http) throws Exception { http .csrf().disable() .authorizeRequests() .anyRequest() .authenticated() .and() .httpBasic(); } @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } }
Step Four: Start Project
@SpringBootApplication public class StartActiviti { public static void main(String[] args) { SpringApplication.run(StartActiviti.class,args); } }
Automatic deployment:
Note issues:
1.Activiti7 and SpringSecurity coupling, need to join SpringSecurity of dependencies and configuration, we can use a set of user-defined set of roles in the process of execution of Security
2. The process can automatically deploy default, but needs further resources / processes folder, process files in them
3. Default history table does not generate, you need to manually open configuration
Implementation process:
controller
@RestController @RequestMapping ( "/ Activiti" ) public class ActivitiController { @Resource Private ProcessRuntime processRuntime; @Resource Private TaskRuntime taskRuntime; @Resource Private SecurityUtil SecurityUtil; / ** * query process definition * / @RequestMapping ( "/ getProcess" ) public void getProcess () { // Search flow definition information Page <the ProcessDefinition> processDefinitionPage = processRuntime.processDefinitions (Pageable.of (0, 10 )); (System.out.println "the current number of process definition:" + processDefinitionPage.getTotalItems ()); // Get process information for (the ProcessDefinition processDefinition: processDefinitionPage.getContent ()) { System.out.println ( "flow definition information" + processDefinition); } } / ** * start exemplary process * / @RequestMapping ( "/ startInstance" ) public void startInstance () { the ProcessInstance instance = processRuntime.start (ProcessPayloadBuilder.start () withProcessDefinitionKey ( "Demo." ) .build ()); System.out.println (instance.getId ()); } / ** * get task, pick up the task, and executes * / @RequestMapping ( "/ the getTask" ) public void the getTask () { securityUtil.logInAs ( "salaboy"); // specified group of people within the mission Page <Task> tasks = taskRuntime.tasks (Pageable.of (0, 10 )); IF (tasks.getTotalItems ()> 0 ) { for (the task task: tasks.getContent ()) { System.out.println ( "task name:" + task .getName ()); // pick up the task taskRuntime.claim (TaskPayloadBuilder.claim () withTaskId (task.getId ()) build ())..;// mission taskRuntime.complete(TaskPayloadBuilder.complete().withTaskId(task.getId()).build()); } } } }
1. Inquiry process definition
Need to go through verification authority
DemoApplicationConfiguration account password in the configuration class
String[][] usersGroupsAndRoles = { {"salaboy", "password", "ROLE_ACTIVITI_USER", "GROUP_activitiTeam"}, {"ryandawsonuk", "password", "ROLE_ACTIVITI_USER", "GROUP_activitiTeam"}, {"erdemedeiros", "password", "ROLE_ACTIVITI_USER", "GROUP_activitiTeam"}, {"other", "password", "ROLE_ACTIVITI_USER", "GROUP_otherTeam"}, {"admin", "password", "ROLE_ACTIVITI_ADMIN"}, };
Print Console information:
2. Start Process example
3. The acquisition task, pick up the task, and execution