Shiro存储数据到Redis的实践(shiro去 Redis)
Shiro集成Redis是一个很棒的解决方案,可以节省大量的服务资源,减少系统耦合,提高性能。由于它是一种开源框架,因此使我们可以非常灵活地实现登录和权限管理功能,以及使用Redis来存储Shiro的数据,进一步提升系统的性能。本文将重点介绍如何在Shiro中将数据存储到Redis的实践。
我们需要在项目中引入Redis和Shiro的相关依赖包,包括commons-pool2、shiro-redis和shiro-all,要在项目中使用Redis,需要在相关的配置文件中声明Redis相关配置,如下所示:
#Redis
#服务器地址Spring.redis.host=127.0.0.1
#端口号Spring.redis.port=6379
#连接密码(默认为空)Spring.redis.password=
#连接超时时间(毫秒)Spring.redis.timeout=1800000
我们还需要为Shiro配置一个Redis连接工厂,来负责管理Shiro 与Redis之间的连接。我们可以配置如下:
@Value("${spring.redis.host}")
private String host;@Value("${spring.redis.port}")
private int port;@Value("${spring.redis.password}")
private String password;@Value("${spring.redis.timeout}")
private int timeout;
private JedisPool jedisPool;
@Beanpublic JedisPool getJedisPool() {
jedisPool = new JedisPool(host, port); return jedisPool;
}
@Beanpublic RedisManager shiroRedisManager() {
RedisManager redisManager = new RedisManager(); redisManager.setHost(host);
redisManager.setPort(port); redisManager.setPassword(password);
redisManager.setExpire(timeout); redisManager.setTimeout(timeout);
return redisManager;}
我们还需要配置一个SecurityManager,它是使用RedisManager来负责所有Shiro相关安全操作的配置,如下所示:
@Bean
public DefaultWebSecurityManager securityManager() { DefaultWebSecurityManager manager = new DefaultWebSecurityManager();
manager.setRealm(shiroRealm()); manager.setCacheManager(redisCacheManager());
return manager;}
@Beanpublic ShiroRealm shiroRealm(){
ShiroRealm shiroRealm = new ShiroRealm(); shiroRealm.setCachingEnabled(true);
shiroRealm.setCacheManager(redisCacheManager()); return shiroRealm;
}
@Beanpublic RedisCacheManager redisCacheManager() {
RedisCacheManager redisCacheManager = new RedisCacheManager(); redisCacheManager.setRedisManager(shiroRedisManager());
return redisCacheManager;}
总结来说,之前介绍的是在Shiro中使用Redis来存储数据的实践。这样做的优势是可以实现分布式缓存、更好的性能、提高应用程序灵活性、减少耦合等。