Activiti7报错:org.springframework.security.core.userdetails.UserDetailsService

本文讲述了在SpringBoot工程中整合Activiti7时遇到关于UserDetailsService的报错,原因在于项目使用了SpringSecurity。提供了解决方案,即添加spring-security相关依赖包至版本5.7.6。

1、报错信息及报错场景

Consider defining a bean of type 'org.springframework.security.core.userdetails.UserDetailsService' in your configuration.

报错信息:Consider defining a bean of type 'org.springframework.security.core.userdetails.UserDetailsService'

我的报错场景:springboot工程整合activiti7工作流的时候提示这个bug.

2、出现问题的原因

Activiti7工作流内部默认继承了springSecurity权限框架,或者是你的项目中直接或者间接使用到了spring Security技术。可能是你项目中使用的某个技术使用到了或默认依赖就是这个框架。这个时候我们需要这个这框架的包就可以了。

我项目中使用的springboot版本是2.7.10版本,选择的spring-security版本是5.7.6.包一定要配齐全。

有些工程可能是项目的问题,导入了下面的包可能还是报错,这个时候你可以把这些包都找到,手动拷贝到工程中,手动导入就可以了。

3、解决办法

在工程中导入如下包信息



        <dependency>

            <groupId>org.springframework.security</groupId>

            <artifactId>spring-security-web</artifactId>

            <version>5.7.6</version>

        </dependency>



        <dependency>

            <groupId>org.springframework.security</groupId>

            <artifactId>spring-security-acl</artifactId>

            <version>5.7.6</version>

        </dependency>


        <dependency>

            <groupId>org.springframework.security</groupId>

            <artifactId>spring-security-config</artifactId>

            <version>5.7.6</version>

        </dependency>

 

        <dependency>

            <groupId>org.springframework.security</groupId>

            <artifactId>spring-security-taglibs</artifactId>

            <version>5.7.6</version>

        </dependency>

 

 

 

 

 

这个警告表明 **Activiti 依赖传递引入了存在漏洞的 Spring Security 5.1.7.RELEASE**(如 [CVE-2022-22978](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-22978))。以下是解决方案: --- ### **1. 问题根源** - **漏洞版本**:Spring Security 5.1.7.RELEASE 存在权限绕过漏洞。 - **传递路径**:Activiti 7.x 默认依赖旧版 Spring Security(通过 `activiti-spring-boot-starter` 或间接依赖)。 --- ### **2. 解决方案** #### **方案 1:升级 Activiti 到兼容 Spring Security 5.7.x/6.x 的版本(推荐)** - **Activiti 7.1.0+** 默认兼容 Spring Security 5.7.x,**Activiti 8.x** 兼容 Spring Security 6.x。 - 在父 POM 中显式指定版本: ```xml <properties> <activiti.version>7.1.0.M6</activiti.version> <!-- 或 8.x --> <spring-security.version>5.7.11</spring-security.version> <!-- 或 6.2.0 --> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-dependencies</artifactId> <version>${activiti.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> ``` #### **方案 2:排除 Spring Security 传递依赖** 如果无法升级 Activiti,手动排除漏洞版本并引入安全版本: ```xml <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-spring-boot-starter</artifactId> <version>7.1.0.M6</version> <exclusions> <exclusion> <groupId>org.springframework.security</groupId> <artifactId>spring-security-core</artifactId> <!-- 排除旧版 --> </exclusion> </exclusions> </dependency> <!-- 显式引入安全版本 --> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-core</artifactId> <version>5.7.11</version> <!-- 或 6.2.0 --> </dependency> ``` #### **方案 3:使用 Maven Enforcer 插件禁止漏洞版本** 在 `pom.xml` 中添加规则,阻止构建时引入 Spring Security 5.1.x: ```xml <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-enforcer-plugin</artifactId> <version>3.4.1</version> <executions> <execution> <id>enforce-banned-dependencies</id> <goals> <goal>enforce</goal> </goals> <configuration> <rules> <bannedDependencies> <excludes> <exclude>org.springframework.security:spring-security-core:[5.1.0,5.2.0)</exclude> </excludes> <message>禁止使用 Spring Security 5.1.x,请升级到 5.7.x/6.x</message> </bannedDependencies> </rules> </configuration> </execution> </executions> </plugin> </plugins> </build> ``` --- ### **3. 验证修复** 1. **检查依赖树**: ```bash mvn dependency:tree -Dincludes=org.springframework.security:spring-security-core ``` - 确认输出版本为 `5.7.11` 或 `6.2.0`。 2. **扫描漏洞**: - 使用 OWASP Dependency-Check: ```bash mvn org.owasp:dependency-check-maven:check ``` - 或通过 IDE 的漏洞扫描工具(如 IntelliJ IDEA 的 `Maven > Show Dependencies`)。 --- ### **4. 兼容性注意事项** | Activiti 版本 | 推荐 Spring Security 版本 | 注意事项 | |----------------|--------------------------|----------| | 7.1.x | 5.7.x | 需排除旧版 Spring Security 依赖 | | 8.x | 6.x | 支持 Jakarta EE 9+ | - **Activiti 7.x + Spring Security 6.x**:需额外排除 `javax.*` 依赖并引入 `jakarta.*` 替代包。 - **Activiti 8.x**:默认基于 Spring Security 6.x,但需检查与现有库的兼容性。 --- ### **5. 扩展问题** #### **Q1:如何快速定位所有传递依赖中的漏洞版本?** - 使用 `mvn dependency:tree -Dverbose` 显示完整依赖路径,结合 `grep` 过滤: ```bash mvn dependency:tree | grep "spring-security-core.*5.1.7.RELEASE" ``` #### **Q2:为什么排除后仍出现旧版 Spring Security?** - 可能原因: 1. 其他依赖(如 `spring-cloud-dependencies`)强制引入旧版。 2. 依赖范围(`<scope>test</scope>`)未被排除。 3. 存在多个版本的 Spring Security 冲突(通过 `mvn dependency:analyze` 检查)。 #### **Q3:如何强制所有模块使用统一 Spring Security 版本?** - 在父 POM 的 `<dependencyManagement>` 中声明版本,子模块通过 `<dependencies>` 引入(不指定版本): ```xml <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-bom</artifactId> <version>5.7.11</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> ``` #### **Q4:升级 Spring Security 后出现类冲突怎么办?** - 使用 `mvn dependency:tree` 分析冲突,通过 `<exclusions>` 排除重复依赖: ```xml <exclusions> <exclusion> <groupId>org.springframework.security</groupId> <artifactId>spring-security-web</artifactId> </exclusion> </exclusions> ``` #### **Q5:如何自动化阻止漏洞依赖进入构建?** - 集成 [OWASP Dependency-Check](https://owasp.org/www-project-dependency-check/) 到 CI/CD 流程: ```xml <plugin> <groupId>org.owasp</groupId> <artifactId>dependency-check-maven</artifactId> <version>8.4.0</version> <executions> <execution> <goals> <goal>check</goal> </goals> </execution> </executions> </plugin> ``` --- ### **总结** | 方案 | 适用场景 | 操作复杂度 | |------|----------|------------| | 升级 Activiti | 可接受版本升级 | ⭐⭐ | | 排除依赖 + 显式引入 | 需保持现有 Activiti 版本 | ⭐⭐⭐ | | Maven Enforcer 插件 | 强制团队规范 | ⭐⭐ | **推荐操作**:优先升级到 **Activiti 7.1.x + Spring Security 5.7.x** 或 **Activiti 8.x + Spring Security 6.x**,并通过 `dependency:tree` 和漏洞扫描工具验证。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雾林小妖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值