• flowable6.7.2 springboot 集成 flowableui 2 流程定义及发布


    1、下载

    2、将资源文件拷到resources下

    目录结构如下

    3、启动类 myFlowableUIApplication.java

    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
    
    @SpringBootApplication
    public class myFlowableUIApplication extends SpringBootServletInitializer {
    
        public static void main(String[] args) {
            SpringApplication.run(myFlowableUIApplication.class, args);
        }
    
    }

    4、不用默认的security的验证SecurityConfiguration.java,一般这个流程定义发布的是放在后端或者前端显示(iframe)。

    mport org.flowable.ui.common.security.SecurityConstants;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.core.annotation.Order;
    import org.springframework.security.config.annotation.web.builders.HttpSecurity;
    import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
    
    @Configuration
    public class SecurityConfiguration {
        @Configuration(proxyBeanMethods = false)//所以这个地方-1让该配置项在FlowableUiSecurityAutoConfiguration中对应配置项前加载,以跳过授权
        @Order(SecurityConstants.FORM_LOGIN_SECURITY_ORDER - 1)
        public static class FormLoginWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {
            @Override
            protected void configure(HttpSecurity http) throws Exception {
                http
                        //必须要将csrf设置为disable,不然后面发送POST请求时会报403错误
                        .csrf().disable()
                        //为了简单起见,简单粗暴方式直接放行modeler下面所有请求
                        .authorizeRequests().antMatchers("/modeler/**").permitAll();
            }
        }
    }

    5、返回一个默认的account,解决匿名用户的问题。RemoteAccountResource + SecurityUtils

    SecurityUtils.java

    import java.util.ArrayList;
    import java.util.List;
    
    import org.flowable.common.engine.api.FlowableIllegalStateException;
    import org.flowable.idm.api.User;
    import org.flowable.ui.common.model.RemoteUser;
    import org.springframework.security.core.Authentication;
    import org.springframework.security.core.context.SecurityContext;
    import org.springframework.security.core.context.SecurityContextHolder;
     
    /**
     * 重构流程编辑器获取用户信息
     */
    public class SecurityUtils {
     
      private static User assumeUser;
      
      private static SecurityScopeProvider securityScopeProvider = new FlowableSecurityScopeProvider();
     
      private SecurityUtils() {
      }
     
      /**
       * Get the login of the current user.
       */
      public static String getCurrentUserId() {
        User user = getCurrentUserObject();
        if (user != null) {
          return user.getId();
        }
        return null;
      }
     
      /**
       * @return the {@link User} object associated with the current logged in user.
       */
      public static User getCurrentUserObject() {
        if (assumeUser != null) {
          return assumeUser;
        }
     
        RemoteUser user = new RemoteUser();
        user.setId("admin");
        user.setDisplayName("admin");
        user.setFirstName("admin");
        user.setLastName("admin");
        user.setEmail("admin@flowable.com");
        user.setPassword("123456");
        List<String> pris = new ArrayList<>();
        pris.add(DefaultPrivileges.ACCESS_MODELER);
        pris.add(DefaultPrivileges.ACCESS_IDM);
        pris.add(DefaultPrivileges.ACCESS_ADMIN);
        pris.add(DefaultPrivileges.ACCESS_TASK);
        pris.add(DefaultPrivileges.ACCESS_REST_API);
        user.setPrivileges(pris);
        return user;
      }
      
        public static void setSecurityScopeProvider(SecurityScopeProvider securityScopeProvider) {
            SecurityUtils.securityScopeProvider = securityScopeProvider;
        }
     
        public static SecurityScope getCurrentSecurityScope() {
            SecurityContext securityContext = SecurityContextHolder.getContext();
            if (securityContext != null && securityContext.getAuthentication() != null) {
                return getSecurityScope(securityContext.getAuthentication());
            }
            return null;
        }
     
        public static SecurityScope getSecurityScope(Authentication authentication) {
            return securityScopeProvider.getSecurityScope(authentication);
        }
     
        public static SecurityScope getAuthenticatedSecurityScope() {
            SecurityScope currentSecurityScope = getCurrentSecurityScope();
            if (currentSecurityScope != null) {
                return currentSecurityScope;
            }
            throw new FlowableIllegalStateException("User is not authenticated");
        }
     
      public static void assumeUser(User user) {
        assumeUser = user;
      }
     
      public static void clearAssumeUser() {
        assumeUser = null;
      }
    }

    RemoteAccountResource.java

    import java.util.ArrayList;
    import java.util.List;
    
    import org.flowable.ui.common.model.UserRepresentation;
    import org.flowable.ui.common.security.DefaultPrivileges;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    @RequestMapping({ "/app", "/" })
    public class RemoteAccountResource{
    
        /**
         * GET /rest/account -> get the current user.
         */
        @RequestMapping(value = "/rest/account", method = RequestMethod.GET, produces = "application/json")
        public UserRepresentation getAccount() {
            UserRepresentation userRepresentation = new UserRepresentation();
            userRepresentation.setFirstName("admin");
            userRepresentation.setLastName("admin");
            userRepresentation.setFullName("admin");
            userRepresentation.setId("admin");
            List<String> pris = new ArrayList<>();
            pris.add(DefaultPrivileges.ACCESS_MODELER);
            pris.add(DefaultPrivileges.ACCESS_IDM);
            pris.add(DefaultPrivileges.ACCESS_ADMIN);
            pris.add(DefaultPrivileges.ACCESS_TASK);
            pris.add(DefaultPrivileges.ACCESS_REST_API);
            userRepresentation.setPrivileges(pris);
    
            return userRepresentation;
        }
    }

    启动以后,就可以访问:

    6、pom.xml

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.jiduoduo</groupId>
      <artifactId>myFlowable1-ui</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <packaging>war</packaging>
      <name>myFlowable1-ui</name>
      <description>集成flowable6.7.2实现在spring boot中访问flowable-ui</description>
      
      <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.6.2</version>
            <relativePath />
      </parent>
      
      <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <java.version>1.8</java.version>
            <flowable.version>6.7.2</flowable.version>
            <pagehelper.starter.version>1.4.2</pagehelper.starter.version>
            <antlr4-runtime.version>4.8</antlr4-runtime.version>
            <java.home>/Library/Java/JavaVirtualMachines/jdk1.8.0_251.jdk/Contents/Home/jre
            </java.home>
            <spring.shiro.version>1.8.0</spring.shiro.version>
        </properties>
        <dependencies>
            <!-- spring-boot-starter-web start -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <!-- spring-boot-starter-web end -->
            <!--flowable工作流依赖 start -->
            <dependency>
                <groupId>org.flowable</groupId>
                <artifactId>flowable-spring-boot-starter</artifactId>
                <version>${flowable.version}</version>
            </dependency>
            <!--flowable工作流依赖 end -->
            <!-- 添加flowable-ui依赖 -->
            <!-- <dependency>
                <groupId>org.flowable</groupId>
                <artifactId>flowable-spring-boot-starter-ui-modeler</artifactId>
                <version>${flowable.version}</version>
            </dependency> -->
    
            <!-- <dependency>
                <groupId>org.flowable</groupId>
                <artifactId>flowable-spring-boot-starter-ui-admin</artifactId>
                <version>${flowable.version}</version>
            </dependency> -->
    
            <!-- <dependency>
                <groupId>org.flowable</groupId>
                <artifactId>flowable-spring-boot-starter-ui-idm</artifactId>
                <version>${flowable.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.flowable</groupId>
                <artifactId>flowable-spring-boot-starter-ui-task</artifactId>
                <version>${flowable.version}</version>
            </dependency> -->
            <!-- 添加flowable-ui-modeler核心依赖项-->
            <dependency>
                <groupId>org.flowable</groupId>
                <artifactId>flowable-ui-modeler-rest</artifactId>
                <version>${flowable.version}</version>
            </dependency>
            <!--添加flowable-ui-modeler配置依赖项-->
            <dependency>
                <groupId>org.flowable</groupId>
                <artifactId>flowable-ui-modeler-conf</artifactId>
                <version>${flowable.version}</version>
            </dependency>
            <!-- mybatis start -->
            <!--pagehelper分页 -->
            <!-- <dependency>
                <groupId>com.github.pagehelper</groupId>
                <artifactId>pagehelper-spring-boot-starter</artifactId>
                <version>${pagehelper.starter.version}</version>
            </dependency> -->
            <!-- druid -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>1.1.10</version>
            </dependency>
            <!-- mysql jdbc -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
            </dependency>
        </dependencies>
    </project>

    在启动app之前,先建立空库mysql5.7以上。

    代码:

    https://gitee.com/taiji85/flowable1-ui

  • 相关阅读:
    神奇的条件注解-Spring Boot自动配置的基石
    Spring 注解配置原理
    元注解之@Repeatable
    MyBatis批量操作
    MapperScannerConfigurer源码解析
    Spring包扫描机制详解
    SqlSessionTemplate源码解析
    DataSourceUtils源码分析
    Spring事务源码分析
    多核CPU
  • 原文地址:https://www.cnblogs.com/jiduoduo/p/16579214.html
Copyright © 2020-2023  润新知