解决 Java 17 , Springboot 3.0, Shiro 框架无法使用的问题。

解决 Java 17 , Springboot 3.0, Shiro 框架无法使用的问题。

解决 Java 17 , Springboot 3.0, Shiro 框架无法使用的问题。 Shiro(全名Apache Shiro)是一个用于Java应用程序的强大且易于使用的安全性框架。它的主要目标是简化应用程序的身份验证(Authentication)、授权(Authorization)、会话

解决 Java 17 , Springboot 3.0, Shiro 框架无法使用的问题。

Shiro(全名Apache Shiro)是一个用于Java应用程序的强大且易于使用的安全性框架。它的主要目标是简化应用程序的身份验证(Authentication)、授权(Authorization)、会话管理和加密等安全性相关的任务。Shiro的设计理念是提供一个轻量级、直观和容易集成的安全框架,可以用于各种Java应用,包括Web应用、命令行应用和分布式系统等。

106977130_p0_master1200.jpg

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 即可。之前的内容并不需要更改。

3. 参考资料

  1. https://github.com/apache/shiro/issues/891
  2. https://github.com/apache/shiro/blob/main/samples/web-jakarta/pom.xml
Comment