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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM