flowable 6.6.0 更新变动,相对于6.5.0版本,导致流程设计器免登录验证失败

前沿:

flowable和activiti是同一个团队开发的,activiti先,flowable后 。所以,flowable 算是 activiti的升级版。
flowable 确实要比activiti功能更完善。未来肯定flowable 是主流趋势,当下也已经是主流了。

目前最新版本的 flowable 6.6.0 版本,相对于6.5.0版本配置的免登录方案,对6.6.0版本就无效了

通过查看对比flowable源码,发现内置的 Security 权限代码有不少改动,这个是导致免登陆失败的根源

需要重新重构flowable源码的两个函数,如下

1. 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:www.fhadmin.org */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;}}

2.FlowableUiSecurityAutoConfiguration

package org.flowable.ui.common.security;

import org.flowable.spring.boot.FlowableSecurityAutoConfiguration;import org.flowable.spring.boot.idm.IdmEngineServicesAutoConfiguration;import org.springframework.boot.autoconfigure.AutoConfigureAfter;import org.springframework.boot.autoconfigure.AutoConfigureBefore;import org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration;import org.springframework.context.annotation.Configuration;

/** * 说明:重构FlowableUiSecurity自动配置 * 作者:FH Admin * from:www.fhadmin.org */@Configuration(proxyBeanMethods = false)@AutoConfigureAfter({        IdmEngineServicesAutoConfiguration.class,})@AutoConfigureBefore({        FlowableSecurityAutoConfiguration.class,        OAuth2ClientAutoConfiguration.class,})public class FlowableUiSecurityAutoConfiguration {}
(0)

相关推荐