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):