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 {}
    
  • 相关阅读:
    第三章
    第二章
    第一章
    第九章 硬件抽象层:HAL
    第十章 嵌入式Linux的调试技术
    第八章 让开发板发出声音:蜂鸣器驱动
    第七章
    第六章
    第五章总结
    第四章 源代码的下载和编译
  • 原文地址:https://www.cnblogs.com/sjingser1/p/14877939.html
Copyright © 2011-2022 走看看