SpringBoot3整合Shiro未生效问题

SpringBoot3整合Shiro未生效问题

问题描述

在使用 SpringBoot3.1.0 对 Shiro 进行整合后,无法生效

版本:
SpringBoot:3.1.0 / 3.0.6
shiro-spring-boot-web-starter:2.0.0-alpha-2 / 1.4.0
JDK:17

其他无关紧要,上面版本两两组合都无法生效,项目启动正常,但是请求始终无法拦截认证

然而在将 SpringBoot 版本降为 2.7.10 后,Shiro 就可以正常使用了

因此怀疑又是 SpringBoot3 升级导致的问题

毕竟有前车之鉴 —— SpringBoot3.0.6 中存在当项目所在路径有空格时无法注入的问题(在 SB3.1.0 中修复了,实际上就是对 Unicode 编码解析的问题)


问题原因

说回整合 Shiro 的问题,既然是 SB 升级后导致的,那自然就要看看是什么问题了

在对 SB2.7.10 和 SB3.1.0 获取请求后的操作中发现,在 2.7.10 中请求正常走进了 Shiro 的 Filter 中(org.apache.shiro.web.servlet.OncePerRequestFilter)

然而 SB3 并没有进入,并且,在 SB3 依赖中打开这个 Filter 竟然爆红了

OncePerRequestFilter

明显看出,就是这个包出问题了,而且很眼熟 —— 这个不就是 Tomcat 的包吗

再看下 SB3 依赖的 Tomcat:

Servlet
原来改名字了,我也记得以前遇到过 SB2 升级到 SB3 要改名的问题


问题解决

直到原因 —— Tomcat 包下的类路径改名了 —— 就好办了

引入没有改名的对应的 Tomcat 就可以了

 <dependency>
     <groupId>org.apache.tomcat.embed</groupId>
     <artifactId>tomcat-embed-core</artifactId>
     <version>9.0.74</version>
 </dependency>

引入后运行 SB3 ,Shiro 完美生效了

此方法不可行,之前验证的项目错了,真正能够解决的方法参考博客:

原文链接:https://blog.csdn.net/weixin_43492211/article/details/131217344

此处贴上我参考上述博客处理后的 Demo 的完整 POM 文件

<modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.1.0</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.banmao</groupId>
    <artifactId>testShiro</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>testShiro</name>
    <description>testShiro</description>
    <properties>
        <java.version>17</java.version>
        <shiro.version>1.4.0</shiro.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-spring</artifactId>
            <classifier>jakarta</classifier>
            <version>1.11.0</version>
            <!-- 排除仍使用了javax.servlet的依赖 -->
            <exclusions>
                <exclusion>
                    <groupId>org.apache.shiro</groupId>
                    <artifactId>shiro-core</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.apache.shiro</groupId>
                    <artifactId>shiro-web</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!-- 引入适配jakarta的依赖包 -->
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-core</artifactId>
            <classifier>jakarta</classifier>
            <version>1.11.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-web</artifactId>
            <classifier>jakarta</classifier>
            <version>1.11.0</version>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.shiro</groupId>
                    <artifactId>shiro-core</artifactId>
                </exclusion>
            </exclusions>
        </dependency>


    </dependencies>
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值