Shiro 整合 Redis
前言
Shiro 、Redis简介
Shiro apache 出品的权限管理框架、Redis 基于内存的 NoSQL(非关系型数据库)非常适合作为 缓存使用
配置
目前已有Shiro 整合 Redis的项目 我们只需要 引入依赖,稍微配置一下即可使用
依赖
在已有Shiro配置的前提下 加入Shiro redis 依赖
<!-- shiro-redis -->
<dependency>
<groupId>org.crazycake</groupId>
<artifactId>shiro-redis</artifactId>
<version>2.4.2.1-RELEASE</version>
<exclusions>
<exclusion>
<artifactId>jedis</artifactId>
<groupId>redis.clients</groupId>
</exclusion>
</exclusions>
</dependency>
<!-- redis 客户端 Jedis -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.9.0</version>
</dependency>
整合Redis配置
@Bean
public RedisManager initRedisManager(){
RedisManager redisManager = new RedisManager();
redisManager.setHost("127.0.0.1");
redisManager.setPort(6379);
return redisManager;
}
@Bean
public RedisCacheManager initRedisCacheManager(RedisManager redisManager){
RedisCacheManager redisCacheManager = new RedisCacheManager();
redisCacheManager.setRedisManager(redisManager);
return redisCacheManager;
}
@Bean
public DefaultSecurityManager securityManager(Realm realm,RedisCacheManager redisCacheManager) {
DefaultSecurityManager securityManager = new DefaultWebSecurityManager();
securityManager.setRealm(realm);
//添加缓存管理
securityManager.setCacheManager(redisCacheManager);
return securityManager;
}
测试
访问带有权限限制的接口,如果同一个用户多次访问 查询权限的SQL只执行了一次 就成功了
注意
如果出现如下 错误,需要将 jedis 排除,重新依赖其他版本jedis
org.apache.shiro.cache.CacheException: java.lang.IllegalAccessError: tried to access method redis.clients.jedis.JedisPool.returnResource(Lredis/clients/jedis/Jedis;)V from class org.crazycake.shiro.RedisManager
出现这个异常是因为 redis.clients.jedis.JedisPool.returnResource 方法改用 protected 修饰了