flowable6.7.2 springboot 集成 flowable-ui 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
道法自然