1. 概述

Activiti 是一个开源的 BPM(业务流程管理)系统。关于基础入门,可以参考我们的 Activiti Java 指南

⚠️ 重要变化:Activiti 8 已不再提供身份管理功能。我们需要借助 Spring 框架来实现身份管理。本文将探讨如何使用 Spring Security 处理身份认证问题。

2. Maven 依赖

在 Spring Boot 项目中集成 Activiti 的基础配置,可参考我们的前文。除了 activiti-spring-boot-starter,还需添加以下安全依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

3. 基于 Spring Security 的身份管理

要使用 Spring Security 提供的用户管理功能,需自定义安全配置类:

@Configuration
public class SecurityConfig {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http.authorizeHttpRequests(auth -> auth
                .requestMatchers("/protected-process*")
                .authenticated()
                .anyRequest()
                .permitAll())
            .formLogin(login -> login
                .loginPage("/login")
                .defaultSuccessUrl("/homepage")
                .failureUrl("/login?error=true")
                .permitAll())
            .csrf(AbstractHttpConfigurer::disable)
            .logout(logout -> logout.logoutSuccessUrl("/login"));
        return http.build();
    }

    @Bean
    public UserDetailsService userDetailsService() {
        User.UserBuilder users = User.withDefaultPasswordEncoder();
        UserDetails user = users.username("user")
            .password("{noop}pass")
            .authorities("ROLE_ACTIVITI_USER")
            .build();
        return new InMemoryUserDetailsManager(user);
    }
}

关键点说明

  • Activiti 8 完全依赖 Spring Security 处理安全、角色和组管理
  • UserDetailsService 用于配置用户及其关联的组/角色
  • ROLE_ACTIVITI_USER 角色是调用 Activiti 的 TaskRuntime API 的必需权限

4. 总结

本文演示了如何将 Activiti 与 Spring Security 集成。我们通过自定义 Spring Security 配置,实现了:

  • 自动设置认证用户
  • 与 Activiti 的 TaskRuntime API 交互

完整源码可在 GitHub 获取。


原始标题:Activiti with Spring Security