Spring Boot Maven应用启动失败:Shiro与FilterRegistrationBean版本兼容问题
问题分析与解决方案
错误根源
你遇到的启动失败是Shiro与Spring Boot版本不兼容导致的:
- Spring Boot 3.3.1基于Jakarta EE 9+,使用
jakarta.servlet包路径,同时对FilterRegistrationBean的setDispatcherTypes方法签名做了修改 - 当前使用的
shiro-spring-boot-web-starter:2.0.1仍依赖旧的javax.servletAPI,并且调用的是Spring Boot 3.x中已移除的方法重载,因此触发"NoSuchMethodError"
修复步骤
升级Shiro到兼容Spring Boot 3.x的版本
Shiro从2.2.0版本开始全面支持Jakarta EE,适配Spring Boot 3.x。修改pom.xml中Shiro的依赖:<dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring-boot-web-starter</artifactId> <!-- 升级到2.2.0及以上版本,推荐使用最新稳定版 --> <version>2.2.0</version> </dependency>移除冲突的Servlet API依赖
Spring Boot 3.x的spring-boot-starter-web已经内置了jakarta.servlet-api,手动引入的javax.servlet-api:4.0.1会导致包路径冲突,直接删除该依赖:<!-- 删除这一段 --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> </dependency>清理并重新构建项目
- 执行Maven命令清理缓存与构建:
mvn clean install -U - 也可以手动删除本地Maven仓库中Shiro和Spring Boot相关的缓存目录(比如
E:/Mysoftware/apache-maven-3.9.5/repo/org/apache/shiro和E:/Mysoftware/apache-maven-3.9.5/repo/org/springframework/boot),确保重新拉取兼容的依赖包。
- 执行Maven命令清理缓存与构建:
修改后的核心依赖片段
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-spring-boot3-starter</artifactId> <version>3.5.7</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.5.7</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring-boot-web-starter</artifactId> <version>2.2.0</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
内容的提问来源于stack exchange,提问作者xiao lei
相关产品推荐
相关产品推荐

