zoukankan      html  css  js  c++  java
  • 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 {}
    
  • 相关阅读:
    mysql的配置和安装
    ubuntu开机后无法进入桌面
    python的学习笔记(1)之json序列化的使用(2)
    python的学习笔记(1)之json序列化的使用(1)
    python的学习笔记(0)之循环的使用1
    java基础面试题10--String--统计大串中小串出现的次数
    13 ftp软件安装过程
    12 软件安装的两种方式
    rpm方式安装MySQL5.1.73
    java基础面试题9--数组高级-二分查找
  • 原文地址:https://www.cnblogs.com/sjingser1/p/14877939.html
Copyright © 2011-2022 走看看