解决Spring Security升级到5.5.7、5.6.4及以上启动报错出现版本不兼容的问题

 更新时间:2024年08月14日 09:29:30   作者:Master_Shifu_  
这篇文章主要介绍了解决Spring Security升级到5.5.7、5.6.4及以上启动报错出现版本不兼容的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

1.背景

版本比对检测原理:检查当前系统中spring-security-web版本是否在漏洞版本范围内|版本比对检测结果:- spring-security-web

当前安装版本:5.2.1.RELEASE

需要升级到 5.5.7、5.6.4 及以上版本,因为pom中找不到直接引用的位置,所以加入以下依赖将spring-security-web版本强制升级到5.5.7

    <!-- 修复spring-security-web版本漏洞 -->
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-web</artifactId>
        <version>5.5.7</version>
    </dependency>

启动时报错,报错内容如下:

***************************
APPLICATION FAILED TO START
***************************

Description:

An attempt was made to call a method that does not exist. The attempt was made from the following location:

    org.springframework.security.web.util.matcher.OrRequestMatcher.<init>(OrRequestMatcher.java:43)

The following method did not exist:

    org.springframework.util.Assert.noNullElements(Ljava/util/Collection;Ljava/lang/String;)V

The method's class, org.springframework.util.Assert, is available from the following locations:

    jar:file:/C:/Users/sutpc/.m2/repository/org/springframework/spring-core/5.1.18.RELEASE/spring-core-5.1.18.RELEASE.jar!/org/springframework/util/Assert.class

It was loaded from the following location:

    file:/C:/Users/sutpc/.m2/repository/org/springframework/spring-core/5.1.18.RELEASE/spring-core-5.1.18.RELEASE.jar

2.原因分析

可以发现spring包版本不兼容导致该问题

理论上是spring-security-web是在某一个jar引入

单独改了spring-security-web的版本

导致这个jar中的配套代码不兼容导致的问题

3.解决方式

将spring-boot-dependencies的2.1.17.RELEASE升级到2.2.2.RELEASE
            <!-- SpringBoot的依赖配置-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
<!--                <version>2.1.17.RELEASE</version>-->
                <version>2.2.2.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
在pom的最后直接使用spring-security-web的5.5.7强制覆盖版本即可
        <!-- 修复spring-security-web版本漏洞 -->
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-web</artifactId>
            <version>5.5.7</version>
        </dependency>

4.解决思路

因为单独改了spring-security-web的版本

导致这个jar中的配套代码不兼容导致的问题

所以首要问题需要找到spring-security-web由哪个jar引入的

4.1查询Maven 项目查找 jar 包是由哪个依赖引入的

直接使用mvn dependency:tree可以查看项目完整的依赖树。

1.命令格式

mvn dependency:tree -Dverbose -Dincludes=要查询的内容(groupId:artifactId)

  • -dependency:tree:表示树状显示。
  • -Dverbose:表示可以显示所有的引用,包括因为多次引用重复而忽略的。
  • -Dincludes:可以制定查询条件

spring-security-web的groupId和artifactId为:

groupId: org.springframework.security
artifactId: spring-security-web
所以命令为
mvn dependency:tree -Dverbose -Dincludes=org.springframework.security:spring-security-web

4.2在idea的Teminal中执行之后依赖层级如下图

4.3spring-security-web是由spring-boot-starter-security引入的

spring-security-web是由spring-boot-starter-security引入的

版本是2.1.17.RELEASE

搜spring-boot-starter-security发现又是使用的spring-boot-dependencies-2.1.17.RELEASE.pom的版本

4.4spring-boot-starter-security版本是继承spring-boot-dependencies的版本

在全局搜spring-boot-dependencies的版本,

发现果然是2.1.17.RELEASE,到此,所有的依赖层级都找到了,

那开始猜,是不是spring-boot-dependencies版本太低了,

spring-security-web的版本太高了导致的不兼容,

spring-security-web版本不能调低,只能升级spring-boot-dependencies的版本,

在maven仓库查找spring-boot-dependencies版本,

逐级测试,发现2.2.2.RELEASE可以支持,所以问题到此解决.

参考:Maven 项目查找 jar 包是由哪个依赖引入的

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • idea微服务项目服务如何显示在同一窗口

    idea微服务项目服务如何显示在同一窗口

    本文介绍了如何在微服务项目导入时将所有服务加入同一窗口中,解决启动项目服务时显示不全的问题,通过点击左上角的View,选择ToolWindows,然后选择Services,使用快捷键Alt+8,选择Spring Boot,就可以将所有服务加到同一窗口中
    2025-02-02
  • IDEA中创建maven项目webapp目录无法识别即未被标识的解决办法

    IDEA中创建maven项目webapp目录无法识别即未被标识的解决办法

    在学习SpringMVC课程中,基于IDEA新建maven项目模块后,webapp目录未被标识,即没有小蓝点的图标显示,所以本文给大家介绍了IDEA中创建maven项目webapp目录无法识别即未被标识的解决办法,需要的朋友可以参考下
    2024-03-03
  • SpringBoot自定义注解如何解决公共字段填充问题

    SpringBoot自定义注解如何解决公共字段填充问题

    本文介绍了在系统开发中,如何使用AOP切面编程实现公共字段自动填充的功能,从而简化代码,通过自定义注解和切面类,可以统一处理创建时间和修改时间,以及创建人和修改人的赋值操作
    2025-03-03
  • Java web入门指南之在Idea上创建Java web项目

    Java web入门指南之在Idea上创建Java web项目

    好多书上的JavaWeb教程都是Eclipse以及MyEclipse,当然这里不论IDE的好坏,下面这篇文章主要给大家介绍了关于Java web入门指南之在Idea上创建Java web项目的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-06-06
  • Java注解(Annotations)的定义和使用详解

    Java注解(Annotations)的定义和使用详解

    Java注解(Annotations)是Java5引入的一种元数据(Metadata),它提供了一种在源代码中嵌入补充信息的方式,这些信息可以被编译器、JVM或其他工具在编译时、运行时进行处理,注解本身不会直接影响程序的执行,但可以用来指导编译器、JVM或其他工具的行为,从而实现各种功能
    2025-03-03
  • 使用Spring处理x-www-form-urlencoded方式

    使用Spring处理x-www-form-urlencoded方式

    这篇文章主要介绍了使用Spring处理x-www-form-urlencoded方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • Java中的CGLIB动态代理的使用及原理详解

    Java中的CGLIB动态代理的使用及原理详解

    这篇文章主要介绍了Java中的CGLIB动态代理的使用及原理详解,CGLIB是一个功能强大,高性能的代码生成包,它为没有实现接口的类提供代理,为JDK的动态代理提供了很好的补充,需要的朋友可以参考下
    2023-09-09
  • MybatisPlus 插入或更新数据时自动填充更新数据解决方案

    MybatisPlus 插入或更新数据时自动填充更新数据解决方案

    本文主要介绍了MybatisPlus 插入或更新数据时自动填充更新数据解决方案,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • Java实战之药品管理系统的实现

    Java实战之药品管理系统的实现

    这篇文章主要介绍了利用Java实现的药品管理系统,本项目属于前后端分离的项目,分为两个角色药品管理员和取药处人员,感兴趣的小伙伴可以学习一下
    2022-04-04
  • Java中数组的定义与使用

    Java中数组的定义与使用

    下面小编就为大家带来一篇java中数组的定义与使用小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2021-10-10

最新评论