美文网首页
一、工作流 Activiti7-27.taskCandidate

一、工作流 Activiti7-27.taskCandidate

作者: 那钱有着落吗 | 来源:发表于2021-04-14 09:31 被阅读0次

了解过 Activiti 7 的朋友们都知道 7版本加入了Security 的安全框架,而 taskService.createTaskQuery().taskCandidateUser(userId).list() 这个taskCandidateUser方法使用Security的验证导致的问题

思路1-做好安全框架的登录验证操作

既然taskCandidateUser使用了安全框架,我们要找候选任务可以有两个方式:

  • 1.做好安全框架的登录验证操作
  • 2.绕开安全框架,直接采用数据库查表的方式查询任务(未验证,仅提供思路)

第一点因为我个人已经在项目中使用所以就详细介绍第一种,下面是代码:


@Configuration
public class DemoApplicationConfiguration {

    @Bean
    public UserDetailsService myUserDetailsService() {
        return SecurityUtil.findInstance();
    }

}

@Component
public class SecurityUtil {

    private Logger logger = LoggerFactory.getLogger(SecurityUtil.class);

    private static InMemoryUserDetailsManager inMemoryUserDetailsManager;

    //查询实例
    public static InMemoryUserDetailsManager findInstance(){
        if(inMemoryUserDetailsManager==null){
            inMemoryUserDetailsManager = new InMemoryUserDetailsManager();
        }
        return inMemoryUserDetailsManager;
    }

    public void createUser(String userName) {
        inMemoryUserDetailsManager = findInstance();
        if(inMemoryUserDetailsManager.userExists(userName)) {
            inMemoryUserDetailsManager.deleteUser(userName);
        }
        List<SimpleGrantedAuthority> roles = new ArrayList<SimpleGrantedAuthority>(){{
            add(new SimpleGrantedAuthority("ROLE_ACTIVITI_USER"));
            add(new SimpleGrantedAuthority("GROUP_activitiTeam"));
        }};
        inMemoryUserDetailsManager.createUser(new User(userName, passwordEncoder().encode("password"),roles));
     }

    public void logInAs(String username) {
        createUser(username);
        UserDetails user = findInstance().loadUserByUsername(username);
        if (user == null) {
            throw new IllegalStateException("User " + username + " doesn't exist, please provide a valid user");
        }
        logger.info("> Logged in as: " + username);
        SecurityContextHolder.setContext(new SecurityContextImpl(new Authentication() {
            @Override
            public Collection<? extends GrantedAuthority> getAuthorities() {
                return user.getAuthorities();
            }

            @Override
            public Object getCredentials() {
                return user.getPassword();
            }

            @Override
            public Object getDetails() {
                return user;
            }

            @Override
            public Object getPrincipal() {
                return user;
            }

            @Override
            public boolean isAuthenticated() {
                return true;
            }

            @Override
            public void setAuthenticated(boolean isAuthenticated) throws IllegalArgumentException {

            }

            @Override
            public String getName() {
                return user.getUsername();
            }
        }));
        org.activiti.engine.impl.identity.Authentication.setAuthenticatedUserId(username);
    }

    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}
image.png

将传过来的username使用内存的方式存储到安全框架的缓存中,这种方式就相当于做了一个虚拟的用户验证方式一样通过验证,所以如果工作流可以使用Security那么最好与Security结合起来,如果不行,那么这个方式就是取巧的感觉不太好的方式了。

最后一个图片就是实际的使用了。

思路2-直接查库的方式(未实现,仅提供思路,有时间精力的可以多多研究)

Activiti7实现的工作流其实就是设计了一堆表,然后一堆逻辑代码,把流程所有功能实现,所以数据还是存储在数据库中,我们如果能对表非常熟悉,那么查库的方式应该是没有问题的

下面提供几个表作为参考:

image.png image.png

其中这两个表我个人感觉就可以尝试着查询查看了,这个思路理论可行,但是实践起来还是要考虑很多问题的。

相关文章

  • 一、工作流 Activiti7-27.taskCandidate

    了解过 Activiti 7 的朋友们都知道 7版本加入了Security 的安全框架,而 taskService...

  • 五分钟了解Activiti工作流

    什么是工作流 说到工作流,一图胜万言。 工作流 Georgakopoulos给出的工作流定义是:工作流是将一组任务...

  • Java 实现简单工作流

    工作流主要运用到反射机制 创建一张工作流表如:主键 | 工作流Code | 工作流内容 其中工作流,内容为Json...

  • Activiti工作流

    1.工作流简介 1.1工作流与工作流引擎 工作流(workflow)就是工作流程的计算模型,即将工作流程中的工作如...

  • Git工作流指南

    今天看了一下翻译的git工作流指南,简单总结一下。 Git工作流指南Git工作流指南:集中式工作流Git工作流指南...

  • springboot2整合Activiti7

    【1】初识activiti 1.1. 工作流与工作流引擎 工作流工作流(workflow)就是工作流程的计算模型,...

  • Activiti教程(一)初识

    【1】初识activiti 1.1. 工作流与工作流引擎工作流工作流(workflow)就是工作流程的计算模型,将...

  • Common Workflow Language [五]

    二十一 嵌套工作流 问题:如何将多个工作流连接在一起? 目标:了解如何从多个CWL工作流构造嵌套工作流。 工作流是...

  • Java工作流详解(附6大工作流框架对比)

    目录 1.什么是工作流 2.工作流应用场景 3.工作流实现方式 4.有哪些工作流框架? 什么是工作流工作流(Wor...

  • 驰骋工作流引擎开发平台属性功能的隐藏显示介绍

    关键字: 工作流程管理系统 工作流引擎 asp.net工作流引擎 java工作流引擎. 表单引擎 工作流功能说明...

网友评论

      本文标题:一、工作流 Activiti7-27.taskCandidate

      本文链接:https://www.haomeiwen.com/subject/hkfclltx.html