Shiro安全框架(Shiro与SpringBoot整合开发)

 

认证传送门:https://blog.csdn.net/JavaJieRui/article/details/108465791

授权传送门:https://blog.csdn.net/JavaJieRui/article/details/108495686

一、整合的思路

继上次说完了Shiro中的授权之后,Shiro中的认证和授权就全部为大家讲解完了,相信大家是跟着前两篇文章看过来的对Shiro在程序中进行认证和授权的操作都已经略知一二了,下面就为大家讲解一下Shiro在SpringBoot中的应用整合,同时在之前我们做的认证授权都是在代码中硬编码直接写死的,而在我们这次与SpringBoot的整合开发中,将会使用数据库中的数据来替代代码中的数据,更加真实的模拟我们日常在工作中对权限控制开发。

首先我们不论是开发任何功能,都是要对需求和思路进行清晰透彻的梳理和理解,虽然我们本次开发是模拟的真实开发场景,我们也要对开发之前的需求,实现的流程进行梳理。下面先为大家展示一张流程图,之后我会通过整张流程图再来讲解Shiro与SpringBoot整合开发的思路。

首先,我们要开发权限第一步是要先有一个SpringBoot的应用,这个我们做权限是对SpringBoot应用中的所有资源进行保护,如图所示,一个页面可以是一个被保护的资源。同样,程序中的一个方法也可以是一个被保护的资源,但是在一个SpringBoot的应用中,不仅仅要有被保护的资源,还要有公共资源,因为我们如果没有公共资源,登录或者注册的页面就没有办法被用户访问到,那假如说连注册和登录都是被保护起来的资源,那我们这个系统又怎么用呢?

所以门将所有的系统资源分为了两大类,一类是公共资源例如:登录页、登录的方法、注册页、注册的方法、可能还会有找回密码等等的这些统一划分为公共资源,而例如主页,或对系统内部数据的增删改查等的操作就被划分为受限资源,此时这些资源就要被我们用Shiro做的权限验证来保护起来。

前面我们说了那么多怎么把系统分为受限资源,公共资源,怎么用Shiro对他们进行权限的保护,但这些都有一个大的前提,必须让Shiro拿到SpringBoot应用中的所有的请求,为什么呢?应用中的所有资源都是通过客户通过一个又一个的请求来访问的,假如说我们的Shiro连请求都拿不到,又何谈划分资源何谈保护资源呢,所以所有的请求过来,首先要经过一个过滤器。对请求分类,看是受限资源还是公共资源,如果是公共资源不需要认证则直接放行,如果是受限资源呢?受限资源受限经过SecurityManager这个类进行认证处理,从我们的自定义Realms中拿到数据,同时Realms中还会有一系列的密码凭证匹配器,三列次数,算法名称等等一系列的操作。认证通过之后还要进行授权的操作,也就是说虽然你通过了认证,但是我们的Shiro还要来看看你是否有操作这个资源的权限,这样也就达到了相对细粒度的权限控制。

好了经过上面的一张流程图的展示以及对图的解释,我相信大家已经对流程有了相应的了解,下面就可以进行实战开发了。

二、环境搭建

首先上项目目录结构

 POM文件<这时还没有引入Shiro>

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.4.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.csdn</groupId>
    <artifactId>springboot_shiro_jsp</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot_shiro_jsp</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </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>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <!--jsp解析的依赖-->
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
        </dependency>
        <!--可能会在jsp中用到c标签-->
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

application.properties

#指定端口号
server.port=8090
#请求路径中加上项目名
server.servlet.context-path=/shiro
#指定项目名
spring.application.name=shiro

#将mvc视图改为jsp,前缀、后缀
spring.mvc.view.prefix=/
spring.mvc.view.suffix=.jsp

 在新建的webapp中新建一个index.jsp:

在IDEA中设置它的工作目录:

接下来启动,看一下效果:

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 16
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值