SpringBoot3集成Shiro踩坑全记录:版本兼容与过滤器配置
2026/9/10 8:12:54 网站建设 项目流程

如果你最近在 SpringBoot3 项目里集成 Shiro,打开搜索引擎大概率会看到两种结果:一种是基于 SpringBoot2 的老教程,配置类里全是 javax.servlet,代码一粘直接编译失败;另一种是只贴了依赖和几个零散片段,跑起来才发现过滤链根本不生效。这篇文章不重复那些基础流程,而是把我从 SpringBoot3 刚发布那会儿一路踩到生产环境的完整过程拆开,重点讲三件事:版本兼容的硬门槛、给 Shiro 加自定义过滤器时容易陷入的误区,以及配置密钥时那个让人抓狂的“找不到构造链”到底是怎么来的。

1. SpringBoot3 集成 Shiro:先搞懂版本升级动了哪些“地基”

很多人以为从 SpringBoot2 升到 SpringBoot3 只是换个版本号,实际上它同时改了 J2EE 的底层命名空间、自动配置的注册机制和默认的 JDK 基线。这三件事里任何一件没踩对,Shiro 集成都会出大问题。

1.1 javax 到 jakarta:为什么不升级版本就跑不起来

SpringBoot3 最直观的变化是 Java EE 升级为 Jakarta EE,整个 Servlet API 的包名从javax.servlet变成了jakarta.servlet。Shiro 本身是建立在 Servlet API 之上的权限框架,它内部的 Filter 实现、WebUtils 工具类,全部依赖 Servlet 规范里的FilterHttpServletRequest这些接口。

如果你引用的 Shiro 还是 1.11 或更早,启动时第一个异常大概率是NoClassDefFoundError: javax/servlet/Filter。这个异常非常典型,千万别往业务代码上找原因,直接升级 Shiro 版本即可。Shiro 从 1.13.0 开始把 Jakarta 命名空间的支持带入主线,这也是 SpringBoot3 集成 Shiro 的最低版本门槛。

1.2 自动配置机制:SpringBoot3 不再读取 spring.factories

第二个容易忽略的变化是自动配置的注册方式。

SpringBoot2 时代,三方库只要在 jar 包的META-INF/spring.factories里声明自动配置类,SpringBoot 启动时就能扫描到并加载。SpringBoot3 改成了读取META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件,旧的spring.factories虽然还兼容,但自动配置这块基本不看了。

旧版 Shiro starter 只打了spring.factories,所以在 SpringBoot3 下即使

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询