SpringBoot3.0+Java17集成Apache Shiro遭遇NoClassDefFoundError求助
问题分析与解决方案
核心原因:版本兼容性问题
是的,这完全是依赖版本不兼容导致的:
- Spring Boot 3.x 基于 Jakarta EE 9+,所有Servlet相关API的包名从
javax.servlet迁移到了jakarta.servlet; - Apache Shiro 1.10.0 仍依赖传统Java EE的
javax.servlet命名空间API,和Spring Boot 3的Jakarta环境不匹配,所以抛出NoClassDefFoundError: javax/servlet/Filter; - 手动添加
javax.servlet-api会和Spring Boot 3自带的Jakarta Servlet API产生类路径冲突,导致过滤器逻辑被覆盖或失效。
而Java 8 + Spring Boot 2.x的组合正常,是因为Spring Boot 2.x基于Java EE(javax命名空间),和Shiro 1.10.0的依赖完全匹配,没有冲突。
Java 17 + Spring Boot 3 搭配 Apache Shiro 的解决方案
1. 升级Shiro到适配Jakarta EE的版本
Apache Shiro从1.11.0版本开始全面迁移到Jakarta命名空间,完美兼容Spring Boot 3和Java 17。直接替换Shiro依赖为1.11.0及以上版本即可,无需手动添加javax.servlet-api。
Maven依赖配置:
<!-- Shiro Spring Boot Web Starter(适配Jakarta) --> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring-boot-web-starter</artifactId> <version>1.11.0</version> </dependency>
Gradle依赖配置:
implementation 'org.apache.shiro:shiro-spring-boot-web-starter:1.11.0'
2. 调整Shiro配置类的导入包
如果自定义了过滤器或使用了Servlet相关API,确保导入的是jakarta.servlet下的类,而非javax.servlet:
// 正确导入 import jakarta.servlet.Filter; // 错误导入(需删除) // import javax.servlet.Filter;
3. 验证FilterChain配置
确保路径规则配置正确,示例如下:
@Configuration public class ShiroConfig { @Bean public DefaultWebSecurityManager securityManager(Realm realm) { DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); securityManager.setRealm(realm); return securityManager; } @Bean public ShiroFilterFactoryBean shiroFilterFactoryBean(DefaultWebSecurityManager securityManager) { ShiroFilterFactoryBean filterFactory = new ShiroFilterFactoryBean(); filterFactory.setSecurityManager(securityManager); // 配置过滤链:LinkedHashMap保证顺序 Map<String, String> filterChainMap = new LinkedHashMap<>(); // 放行登录等无需认证的接口 filterChainMap.put("/login", "anon"); // 保护/update和/add接口,需认证 filterChainMap.put("/update", "authc"); filterChainMap.put("/add", "authc"); // 其余接口默认需认证 filterChainMap.put("/**", "authc"); filterFactory.setFilterChainDefinitionMap(filterChainMap); return filterFactory; } // 自定义Realm等其他配置... }
内容的提问来源于stack exchange,提问作者kentoto
相关产品推荐
相关产品推荐

