SpringBoot2 integration Activiti7

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

 

Guess you like

Origin www.cnblogs.com/chx9832/p/12667919.html