shiro-redis做了什么
-
Shiro-Redis是基于Apache Shiro框架的一个插件,它主要用于将Shiro框架的会话管理交给Redis来处理。下面是Shiro-Redis的主要功能和作用:
-
会话管理:Shiro-Redis使用Redis作为会话存储,将会话信息存储在Redis数据库中。这样做的好处是可以实现分布式环境下的会话共享和管理,不受单点故障的影响。
-
集群环境支持:Shiro-Redis支持在集群环境下使用,多个应用服务器可以共享同一个Redis数据库,各个应用服务器之间的会话可以进行同步和共享。
-
高性能:Redis是一个高性能的内存数据库,使用Redis作为会话存储可以提高系统的性能和响应速度。
-
可扩展性:Shiro-Redis可以与其他的Shiro插件结合使用,如Shiro-Cache插件,可以实现更灵活的缓存管理和访问控制。
-
多语言支持:Redis支持多种语言的客户端,可以方便地与其他语言的应用程序进行集成。
总之,Shiro-Redis在Shiro框架的基础上增加了对Redis的支持,提供了更高效、更可靠的会话管理功能,适用于分布式环境和高并发场景下的应用程序。
1年前 -
-
Shiro-Redis是一个用于Apache Shiro的插件,用于将Shiro的会话管理功能集成到Redis中。下面是Shiro-Redis做的五点事情:
-
会话管理:Shiro-Redis使用Redis作为会话存储介质,替代了默认的Java的内存存储方式。通过将Shiro的会话信息存储到Redis中,可以实现分布式环境下的会话共享和管理。同时,由于Redis具有高性能、高可用性和可扩展性等特点,可以提高系统的性能和可伸缩性。
-
会话持久化:通过将Shiro的会话信息存储到Redis中,可以实现会话的持久化。即使系统重启或者会话过期,用户的会话信息仍然可以从Redis中恢复,不会丢失任何会话状态。这对于一些需要长时间保持会话状态的系统非常重要,比如购物车等。
-
分布式会话共享:在分布式环境中,不同的服务实例之间需要共享用户的会话信息,以便实现单点登录和授权的功能。Shiro-Redis结合Redis的分布式特性,可以将会话信息存储在共享的Redis中,使得不同的服务实例可以访问和操作相同的会话数据,从而实现分布式会话共享。
-
集群环境支持:Shiro-Redis可以与Redis集群进行集成,实现高可用性和容错性。通过Redis集群的复制和故障转移机制,可以确保即使某台Redis服务器宕机,也不会丢失用户的会话信息。同时,通过Redis集群的水平扩展,可以支持大规模用户的会话管理。
-
缓存管理:Shiro-Redis还可以作为Shiro的缓存管理器,将Shiro框架中的缓存数据存储到Redis中。通过利用Redis的高速缓存功能,可以提高系统的性能和响应速度。同时,由于Redis的持久化特性,可以保证缓存数据的持久性,避免因系统重启而导致缓存数据丢失的问题。
总之,Shiro-Redis为Shiro框架提供了高性能、高可用性和可扩展性的会话管理功能,可以在分布式环境中实现会话共享和持久化,同时还可以作为缓存管理器提高系统的性能。
1年前 -
-
Shiro-Redis是一个用于集成Apache Shiro和Redis的库,它用于将Shiro的会话管理功能存储在Redis数据库中。通过使用Shiro-Redis,可以实现分布式环境下的会话共享和会话持久化。
-
安装和配置Redis数据库:
首先,需要安装和配置Redis数据库。在服务器上安装Redis,并确保Redis服务器正在运行。 -
引入Shiro-Redis依赖:
在项目的pom.xml文件中,添加Shiro-Redis的依赖。
<dependency> <groupId>org.crazycake</groupId> <artifactId>shiro-redis</artifactId> <version>3.1.0</version> </dependency>- 配置Shiro-Redis的CacheManager:
在Shiro的配置文件中,配置Shiro-Redis的CacheManager。可以使用Redisson来实现Shiro-Redis的CacheManager。
@Bean public Redisson redisson() { Config config = new Config(); config.useSingleServer().setAddress("redis://localhost:6379").setDatabase(0); return (Redisson) Redisson.create(config); } @Bean public CacheManager cacheManager(Redisson redisson) { RedisCacheManager redisCacheManager = new RedisCacheManager(); redisCacheManager.setRedisson(redisson); return redisCacheManager; }- 配置Shiro的SessionManager:
在Shiro的配置文件中,配置Shiro-Redis的SessionManager。
@Bean public SessionDAO sessionDAO(Redisson redisson) { RedisSessionDAO redisSessionDAO = new RedisSessionDAO(); redisSessionDAO.setRedisson(redisson); return redisSessionDAO; } @Bean public SessionManager sessionManager(SessionDAO sessionDAO) { DefaultWebSessionManager sessionManager = new DefaultWebSessionManager(); sessionManager.setSessionDAO(sessionDAO); return sessionManager; }- 配置Shiro的SubjectFactory:
在Shiro的配置文件中,配置Shiro-Redis的SubjectFactory。
@Bean public SubjectFactory subjectFactory() { return new DefaultWebSubjectFactory(); }- 配置Shiro的SecurityManager:
在Shiro的配置文件中,配置Shiro-Redis的SecurityManager。
@Bean public SecurityManager securityManager(Realm realm, CacheManager cacheManager, SessionManager sessionManager, SubjectFactory subjectFactory) { DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(realm); securityManager.setCacheManager(cacheManager); securityManager.setSessionManager(sessionManager); securityManager.setSubjectFactory(subjectFactory); return securityManager; }- 配置Shiro的FilterChainDefinition:
在Shiro的配置文件中,配置Shiro-Redis的FilterChainDefinition。
@Bean public ShiroFilterChainDefinition shiroFilterChainDefinition() { DefaultShiroFilterChainDefinition chainDefinition = new DefaultShiroFilterChainDefinition(); chainDefinition.addPathDefinition("/login", "anon"); chainDefinition.addPathDefinition("/**", "authc"); return chainDefinition; }- 配置Shiro的WebSecurityManager:
在Spring的配置文件中,配置Shiro-Redis的WebSecurityManager。
@Bean public WebSecurityManager webSecurityManager(SecurityManager securityManager) { return (WebSecurityManager) securityManager; }- 配置Shiro的Filter:
在Spring的配置文件中,配置Shiro-Redis的Filter。
@Bean public FilterRegistrationBean<DelegatingFilterProxy> shiroFilterRegistration(WebSecurityManager webSecurityManager) { FilterRegistrationBean<DelegatingFilterProxy> registration = new FilterRegistrationBean<>(); registration.setFilter(new DelegatingFilterProxy("shiroFilter")); registration.addInitParameter("targetFilterLifecycle", "true"); registration.setAsyncSupported(true); registration.setEnabled(true); registration.setOrder(Ordered.HIGHEST_PRECEDENCE); registration.addUrlPatterns("/*"); return registration; }- 配置Shiro的配置类:
在Spring的配置文件中,配置Shiro-Redis的配置类。
@Configuration public class ShiroConfig { // 省略其他配置... @Bean public ShiroConfiguration shiroConfiguration() { return new ShiroConfiguration(); } }通过以上步骤,我们就可以实现将Shiro的会话管理功能存储在Redis数据库中,从而实现分布式环境下的会话共享和会话持久化。
1年前 -