升级springboot3.2集成shiro的问题

         由于之前的springcloud相关版本太久,很多新功能无法使用,所以打算抽时间把代码的版本做一下升级。使用最新版的springboot3.2,发现shiro过滤器无效。经检查发现原因:

        springboot3.x使用的是JDK17,从jdk8以后javax.servlet的相关代码包名改成了jakarta.servlet,shiro-spring的版本1.7,使用的仍然是javax.servlet,在ShiroFilter中因引入的servlet不一致,导致无法解析。首先想到的是升级shiro相关jar包,从maven中找到最新的版本2.0.1发现,shiro对应的最新springboot版本仍是2.X,使用的也还是javax.servlet。

        通过一下方法,排除javax.servlet,引入jakarta的依赖。这样就可以了。

注意:

在修改了maven依赖后,一定要检查一下maven其他地方是否引入的还有javax.servlet包,有的话都排除掉,然后将代码中javax.servlet的引用,替换为jakarta.servlet。其他代码就不用再修改了

<!-- shiro -->
<dependency>
    <groupId>org.apache.shiro</groupId>
    <artifactId>shiro-spring</artifactId>
    <classifier>jakarta</classifier>
    <version>2.0.1</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>2.0.1</version>
</dependency>
<dependency>
    <groupId>org.apache.shiro</groupId>
    <artifactId>shiro-web</artifactId>
    <classifier>jakarta</classifier>
    <version>2.0.1</version>
    <exclusions>
        <exclusion>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-core</artifactId>
        </exclusion>
    </exclusions>
</dependency>

Spring Boot集成Shiro是一个常见的企业级应用安全框架集成实践。Shiro是一个强大的开源身份验证和授权框架,而Spring Boot简化了项目配置,使得整合变得简单。以下是基本步骤: 1. 添加依赖:在你的`pom.xml`文件中添加Shiro和其Spring Boot Starter依赖: ```xml <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-spring-boot-starter</artifactId> <!-- 使用最新版本 --> <version>1.9.0</version> </dependency> ``` 2. 配置Spring Security:在`application.properties`或`application.yml`中添加必要的配置,如数据库用户信息源、加密器等: ```properties shiro.credentialsMatcher=org.apache.shiro.authc.pwdfilter.MyCustomPasswordEncoderTokenCredentialMatcher shiro.realm.className=com.example.demo.security.MyRealm ``` 3. 创建 Realm 和 SecurityManager:创建一个实现了`AuthorizingRealm`接口的自定义Realm,并配置SecurityManager: ```java public class MyRealm extends AuthorizingRealm { // 实现认证和授权逻辑... } @Bean("securityManager") public SecurityManager securityManager() throws Exception { DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); securityManager.setRealm(myRealm()); return securityManager; } ``` 4. 控制器注解:为了保护资源,可以在需要权限控制的Controller上添加@Secured注解或使用AOP切面。 5. 访问管理:通过@RequestMapping注解和`@RequiresRoles`或`@PermitAll`等注解,对HTTP请求进行访问控制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值