解决 Java 17 , Springboot 3.0, Shiro 框架无法使用的问题。
Shiro(全名Apache Shiro)是一个用于Java应用程序的强大且易于使用的安全性框架。它的主要目标是简化应用程序的身份验证(Authentication)、授权(Authorization)、会话管理和加密等安全性相关的任务。Shiro的设计理念是提供一个轻量级、直观和容易集成的安全框架,可以用于各种Java应用,包括Web应用、命令行应用和分布式系统等。
1. 原因
"Springboot3.0 Shiro 失效。"
由于在 Java 17 下的 Springboot 3.0 使用了 Servlet 5.0 为了避免 Oracle 版权问题而从 javax.Servlet 更换成的 jakarta.Servlet。
导致了基于 javax.Servlet 的 Shiro 框架无法使用 (即使强行引入 java.Servlet,也依然会出现失效问题)
2. 解决方法
实际上 Shiro 在之后提供了兼容 jakarta 版本的 Shiro 全家桶。
我们可以通过以下方式,替换掉原来基于 javax.Servlet 的 Shiro 来解决这个问题.
Gradle ( 已测试 ):
implementation('org.apache.shiro:shiro-spring:1.11.0:jakarta') {
exclude group: 'org.apache.shiro', module: 'shiro-web'
}
implementation 'org.apache.shiro:shiro-web:1.11.0:jakarta'
Maven:
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<classifier>jakarta</classifier>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-web</artifactId>
<classifier>jakarta</classifier>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring-boot-web-starter</artifactId>
<classifier>jakarta</classifier>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring-boot-starter</artifactId>
<classifier>jakarta</classifier>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<classifier>jakarta</classifier>
</dependency>
注意 : 换成新的 Shiro 后 只需要将导入的包替换为 jakarta 即可。之前的内容并不需要更改。