• 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 {}
    
  • 相关阅读:
    bootstrap学习笔记一: bootstrap初认识,hello bootstrap(下)
    bootstrap学习笔记一: bootstrap初认识,hello bootstrap(上)
    AutoCompleteTextView的使用
    常用的android弹出对话框
    PopupWindow的使用
    linux udev、mdev 介绍
    linux 守护进程编程
    linux 下的文件目录操作之遍历目录
    linux 下查找图片文件方法
    linux 内核 zImage 生成过程分析
  • 原文地址:https://www.cnblogs.com/sjingser1/p/14877939.html
Copyright © 2020-2023  润新知