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;

@Bean
public JedisPool getJedisPool() {
jedisPool = new JedisPool(host, port);
return jedisPool;
}

@Bean
public 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;
}
@Bean
public ShiroRealm shiroRealm(){
ShiroRealm shiroRealm = new ShiroRealm();
shiroRealm.setCachingEnabled(true);
shiroRealm.setCacheManager(redisCacheManager());
return shiroRealm;
}

@Bean
public RedisCacheManager redisCacheManager() {
RedisCacheManager redisCacheManager = new RedisCacheManager();
redisCacheManager.setRedisManager(shiroRedisManager());
return redisCacheManager;
}

总结来说,之前介绍的是在Shiro中使用Redis来存储数据的实践。这样做的优势是可以实现分布式缓存、更好的性能、提高应用程序灵活性、减少耦合等。


数据运维技术 » Shiro存储数据到Redis的实践(shiro去 Redis)