spring boot 集成shiro和redis (绝不坑你)
spring boot 集成shiro和redis (绝不坑你)
最近两天一直在弄shiro跟spring boot的整合,网上讨论的很多,但是真正搞懂的人很少,都是抄抄抄,我现在就将我这两天的所有结果分享给大家,供大家参考。
跟spring mvc 的集成很相像,但是也有很多不同的地方,主要体现在springboot 跟mvc的配置差异上。配置shiro,如果要跑起来,非常简答,跟着网上说的来就可以了,但是,真正比较完美的配置,至少我在百度上面还没有看到,身为代码洁癖的我,这是不能忍的。要配置shiro,基础工具就是缓存,没有缓存,你的配置将只能是一个玩具,一个在内存中玩玩而已的工具,我采用的redis。
一、spring boot 跟redis 的结合
1、导入。
首先是pom包,需要
<dependency><groupId>org.springframework.bootgroupId><artifactId>spring-boot-starter-data-redisartifactId>
dependency>
没错,就这一个就可以了,其他的都不需要。
注:我的sprint-boot 版本是2.0.4.RELEASE
2、配置
请查看org.springframework.boot.autoconfigure.data.redis.RedisProperties 源码,那里有全部的配置说明,这就是starter的好处,直接看源码远比你网上百度要好千倍万倍。这也是经验之谈了。配置好了redis之后,我们进入下一步。
3、使用
请查看org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration源码,那里面注册了两个bean,redisTemplate 和 stringRedisTemplate,那么意味着,你可以直接使用这两个template了,即可以直接使用了。至于如何继承到自己的项目中,你直接注册一个bean,然后将get、set、put、delete等方法通过redisTemplate实现了即可,如果看不懂,请移步,巩固基础。
二、redis实现shiro的cacheManager。
1、导入
首先还是要导入pom包,需要
<dependency><groupId>org.apache.shirogroupId><artifactId>shiro-springartifactId><version>1.4.0version>
dependency>
我这里使用1.4.0的,是我目前能看到的最新的
2、继承cacheManager
shiro要想使用cacheManager,就必须实现org.apache.shiro.cache.CacheManager类,才能与shiro集成。我这里直接继承了AbstractCacheManager,需要实现createCache方法。我的实现类如下:
public class ShiroRedisCacheManager extends AbstractCacheManager {private RedisTemplate<byte[],byte[]> redisTemplate;public ShiroRedisCacheManager(RedisTemplate redisTemplate){this.redisTemplate = redisTemplate;}//为了个性化配置redis存储时的key,我们选择了加前缀的方式,所以写了一个带名字及redis操作的构造函数的Cache类@Overrideprotected Cache createCache(String name) throws CacheException {return new ShiroRedisCache(redisTemplate,name);}
}
3、继承Cache
在cacheManage中,要实现createCache方法,就需要返回一个org.apache.shiro.cache.Cache
public class ShiroRedisCache implements Cache {private RedisTemplate redisTemplate;private String prefix = "shiro_redis";public String getPrefix() {return prefix+":";}public void setPrefix(String prefix) {this.prefix = prefix;}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
