• springboot整合shiro:基于redis+JWT+shiro的授权管理


    问题描述:

    在使用shiro进行认证和授权的时候,我们并不是每次都要从数据库中获取角色和权限信息,而是从redis缓存中拿,所以我们需要为shiro配置缓存。只有当用户、角色、权限信息被修改了,我们才从数据库中获取角色和权限信息。那么获取到的角色和权限信息我们是怎么在前端和后端传递呢?我们通过JWT生成的token来传递我们的角色和权限信息,下面我们介绍shiro的认证授权过程,这个很重要。

     

    shiro的认证授权过程:

     

     

    shiro+redis+jwt需要用到的pom:

    <!--redis 依赖-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
        <version>2.1.6.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-pool2</artifactId>
        <version>2.8.0</version>
    </dependency>
        
    <!--fastJson-->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.49</version>
    </dependency>
        
    <!--JWT-->
    <dependency>
        <groupId>io.jsonwebtoken</groupId>
        <artifactId>jjwt</artifactId>
        <version>0.9.1</version>
    </dependency>
        
    <!-- shiro -->
    <dependency>
        <groupId>org.apache.shiro</groupId>
        <artifactId>shiro-spring</artifactId>
        <version>1.4.2</version>
    </dependency>
    <dependency>
        <groupId>org.crazycake</groupId>
        <artifactId>shiro-redis</artifactId>
        <version>3.2.3</version>
        <!-- 排除最新3.1.0版本,引用2.9.0版本,https://github.com/alexxiyang/shiro-redis/issues/113 -->
        <exclusions>
            <exclusion>
                <groupId>redis.clients</groupId>
                <artifactId>jedis</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>com.github.theborakompanioni</groupId>
        <artifactId>thymeleaf-extras-shiro</artifactId>
        <version>2.0.0</version>
    </dependency>

    在application.properties中配置jwt密钥和redis:

    #JWT 密钥
    jwt.secretKey=78944878877848fg)
    jwt.accessTokenExpireTime=PT2H
    jwt.refreshTokenExpireTime=PT8H
    jwt.refreshTokenExpireAppTime=P30D
    jwt.issuer=_xueheng_
    
    # redis连接池配置 
    # Redis 服务器地址
    spring.redis.host=localhost
    # Redis 服务器连接端?
    spring.redis.port=6379
    # 连接池最大连接数(使用负值表示没有限制) 默认 8
    spring.redis.lettuce.pool.max-active=100
    # 连接池最大阻塞等待时间(使用负值表示没有限制) 默认 -1
    spring.redis.lettuce.pool.max-wait=PT10S
    # 连接池中的最大空闲连接 默认 8
    spring.redis.lettuce.pool.max-idle=30
    # 连接池中的最小空闲连接 默认 0
    spring.redis.lettuce.pool.min-idle=1
    #链接超时时间
    spring.redis.timeout=PT10S

    项目案例地址(gitee):

    https://gitee.com/xuehengs/tsystem

  • 相关阅读:
    linux 更换golang版本
    ubuntu 搭建NFS
    golang 异步并发http轮询(爬虫)
    Mysql 事务锁等待时间超时
    排序算法之鸡尾酒排序
    Sql Server一个表向另一个表添加多条数据,关联时查询出一条数据
    Easyui datagrid 开始时间不能大于结束时间
    用python爬了上千万条招聘信息后,最终分析出python要学这些才能就业...
    用python把B站小姐姐跳舞视频爬下来,并打包成可以直接运行的exe文件
    女朋友股票亏惨了,我一怒之下用Python爬取了证券最新数据...
  • 原文地址:https://www.cnblogs.com/XueTing/p/13732956.html
Copyright © 2020-2023  润新知