springboot2.5.2 整合 flowable6.6.0 流程引擎

1.pom

<parent>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-parent</artifactId>

<version>2.5.2</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>

<flowable.version>6.6.0</flowable.version>

</properties>

 <!--flowable工作流依赖-->

        <dependency>

            <groupId>org.flowable</groupId>

            <artifactId>flowable-spring-boot-starter</artifactId>

            <version>${flowable.version}</version>

        </dependency>

 <!-- https://mvnrepository.com/artifact/org.flowable/flowable-json-converter -->

<dependency>

    <groupId>org.flowable</groupId>

    <artifactId>flowable-json-converter</artifactId>

    <version>${flowable.version}</version>

</dependency>

<!-- app 依赖 包含 rest,logic,conf -->

<dependency>

    <groupId>org.flowable</groupId>

    <artifactId>flowable-ui-modeler-rest</artifactId>

    <version>${flowable.version}</version>

</dependency>

<dependency>

    <groupId>org.flowable</groupId>

    <artifactId>flowable-ui-modeler-logic</artifactId>

    <version>${flowable.version}</version>

    <exclusions>

        <exclusion>

            <groupId>org.apache.logging.log4j</groupId>

            <artifactId>log4j-slf4j-impl</artifactId>

        </exclusion>

    </exclusions>

</dependency>

<dependency>

    <groupId>org.flowable</groupId>

    <artifactId>flowable-ui-modeler-conf</artifactId>

    <version>${flowable.version}</version>

</dependency>

2. FlowableConfig配置类

package org.fh.config;

import org.flowable.spring.SpringProcessEngineConfiguration;

import org.flowable.spring.boot.EngineConfigurationConfigurer;

import org.springframework.context.annotation.Configuration;

import org.springframework.stereotype.Controller;

/**

 * 说明:Flowable配置

 * 作者:FH Admin

 * from:fhadmin.cn

 */

@Controller

@Configuration

public class FlowableConfig implements EngineConfigurationConfigurer<SpringProcessEngineConfiguration> {

    @Override

    public void configure(SpringProcessEngineConfiguration engineConfiguration) {

        engineConfiguration.setActivityFontName("宋体");

        engineConfiguration.setLabelFontName("宋体");

        engineConfiguration.setAnnotationFontName("宋体");

    }

}

3.重写 SecurityUtils 重构流程编辑器获取用户信息

package org.flowable.ui.common.security;

import org.fh.util.Jurisdiction;

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;

import java.util.ArrayList;

import java.util.List;

/**

 * 说明:重构流程编辑器获取用户信息

 * 作者:FH Admin

 * from:fhadmin.cn

 */

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(Jurisdiction.getUsername());

user.setDisplayName(Jurisdiction.getName());

user.setFirstName(Jurisdiction.getName());

user.setLastName(Jurisdiction.getName());

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;

}

}
(0)

相关推荐