Skip to content

基于 Redis 的 Shrio 缓存,支持 Jedis 直连和 Spring-Data-Redis RedisTemplate。An implement of redis cache can be used by shiro, Support Jedis direct connect and Spring-Data-Redis RedisTemplate.

License

ushelp/EasyShiro-Redis-Cache

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

EasyShiro-Redis-Cache

基于 Redis 的 Shrio 缓存,支持 Jedis 直连和 Spring-Data-Redis RedisTemplate。

An implement of redis cache can be used by shiro, Support Jedis direct connect and Spring-Data-Redis RedisTemplate.

Thanks shiro-redis.

Featuter

  • 中文

    1. 支持基于 Jdeis 直接配置 Redis 连接( INI, XML

    2. 支持与 Spring 集成时,使用 Spring-Data-Redis 的 RedisTemplateXML

    3. 支持与 EasyShiro 集成

  • English

    1. Support direct configuration of Redis connection (INI, XML)

    2. Support for integration with Spring-Data-Redis RedisTemplate (XML)

    3. Support for integration EasyShiro

Maven

<dependency>
	<groupId>cn.easyproject</groupId>
	<artifactId>easyshiro-redis-cache</artifactId>
	<version>2.6.0-RELEASE</version>
</dependency>

Configure

RedisManager(Jedis)

  • shiro.ini

     #redisManager
     redisManager = cn.easyproject.shirorediscache.RedisManager
     #optional if you don't specify host the default value is 127.0.0.1
     redisManager.host = 127.0.0.1
     #optional , default value: 6379
     redisManager.port = 6379
     #optional, timeout for jedis try to connect to redis server(In milliseconds), not equals to expire time! 
     redisManager.timeout = 0
     #optional, password for redis server
     redisManager.password = 
     
     #============redisSessionDAO=============
     redisSessionDAO = cn.easyproject.shirorediscache.RedisSessionDAO
     redisSessionDAO.redisManager = $redisManager
     #optional, default value:0, never expire. The expire time is in second
     redisSessionDAO.expire = 1800
     
     sessionManager = org.apache.shiro.web.session.mgt.DefaultWebSessionManager
     
     sessionManager.sessionDAO = $redisSessionDAO
     securityManager.sessionManager = $sessionManager
     
     
     #============redisCacheManager===========
     cacheManager = cn.easyproject.shirorediscache.RedisCacheManager
     cacheManager.redisManager = $redisManager
     #custom your redis key prefix, if you doesn't define this parameter shiro-redis will use 'shiro_redis_session:' as default prefix
     cacheManager.keyPrefix = users:security:authz:
     securityManager.cacheManager = $cacheManager
  • shiro.xml

     <!-- shiro filter -->
     <bean id="ShiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
     	<property name="securityManager" ref="securityManager"/>
     	
     	<!--
     	<property name="loginUrl" value="/login.jsp"/>
     	<property name="successUrl" value="/home.jsp"/>  
     	<property name="unauthorizedUrl" value="/unauthorized.jsp"/>
     	-->
     	<!-- The 'filters' property is not necessary since any declared javax.servlet.Filter bean  -->
     	<!-- defined will be automatically acquired and available via its beanName in chain        -->
     	<!-- definitions, but you can perform instance overrides or name aliases here if you like: -->
     	<!-- <property name="filters">
     		<util:map>
     			<entry key="anAlias" value-ref="someFilter"/>
     		</util:map>
     	</property> -->
     	<property name="filterChainDefinitions">
     		<value>
     			/login.jsp = anon
     			/user/** = anon
     			/register/** = anon
     			/unauthorized.jsp = anon
     			/css/** = anon
     			/js/** = anon
     			
     			/** = authc
     		</value>
     	</property>
     </bean>
     
     <!-- shiro securityManager -->
     <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
     
     	<!-- Single realm app.  If you have multiple realms, use the 'realms' property instead. -->
     	
     	<!-- sessionManager -->
     	<property name="sessionManager" ref="sessionManager" />
     	
     	<!-- cacheManager -->
     	<property name="cacheManager" ref="cacheManager" />
     	
     	<!-- By default the servlet container sessions will be used.  Uncomment this line
     		 to use shiro's native sessions (see the JavaDoc for more): -->
     	<!-- <property name="sessionMode" value="native"/> -->
     </bean>
     <bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/>	
     
     <!-- shiro redisManager -->
     <bean id="redisManager" class="cn.easyproject.shirorediscache.RedisManager">
     	<property name="host" value="127.0.0.1"/>
     	<property name="port" value="6379"/>
     	<!-- optional properties:
     	<property name="timeout" value="10000"/>
     	<property name="password" value="123456"/>
     	-->
     </bean>
     
     <!-- redisSessionDAO -->
     <bean id="redisSessionDAO" class="cn.easyproject.shirorediscache.RedisSessionDAO">
     	<property name="redisManager" ref="redisManager" />
     	<!-- optional, default value:0, never expire. The expire time is in second -->
     	<property name="expire" value="1800"/>
     </bean>
     
     <!-- sessionManager -->
     <bean id="sessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager">
     	<property name="sessionDAO" ref="redisSessionDAO" />
     </bean>
     
     <!-- cacheManager -->
     <bean id="cacheManager" class="cn.easyproject.shirorediscache.RedisCacheManager">
     	<property name="redisManager" ref="redisManager" />
     </bean>

Spring-Data-Redis RedisTemplate

  • shiro.xml

    RedisTemplate key is must StringRedisSerializer.

     <!-- RedisTemplate Start -->
     <!-- JedisPool -->
     <bean id="jedisPoolConfig" class="redis.clients.jedis.JedisPoolConfig">
     	<property name="maxTotal" value="${redis.pool.maxTotal}"></property>
     	<property name="maxIdle" value="${redis.pool.maxIdle}"></property>
     	<property name="maxWaitMillis" value="${redis.pool.maxWaitMillis}"></property>
     	<property name="testOnBorrow" value="${redis.pool.testOnBorrow}"></property>
     	<property name="testOnReturn" value="${redis.pool.testOnReturn}"></property>
     </bean>
     
     <bean id="jedisConnFactory"
     	class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
     	p:use-pool="true">
     	<property name="hostName" value="${redis.host}"></property>
     	<property name="port" value="${redis.port}"></property>
     	<property name="database" value="${redis.database}"></property>
     	<!-- <property name="password" value="pwd456"></property> -->
     	<property name="poolConfig" ref="jedisPoolConfig"></property>
     </bean>
     
     <!-- Redis template definition -->
     <bean id="redisTemplate" class="org.springframework.data.redis.core.RedisTemplate"
     	p:connection-factory-ref="jedisConnFactory">
     	
     	<!-- !IMPORTANT: key is must 'StringRedisSerializer' -->
     	<property name="keySerializer">
     		<bean class="org.springframework.data.redis.serializer.StringRedisSerializer"></bean>
     	</property>
     	<property name="hashKeySerializer">
     		<bean class="org.springframework.data.redis.serializer.StringRedisSerializer"></bean>
     	</property>
     	<property name="valueSerializer">
     		<bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer"></bean>
     	</property>
     	<property name="hashValueSerializer">
     		<bean class="org.springframework.data.redis.serializer.JdkSerializationRedisSerializer"></bean>
     	</property>
     </bean>
     <!-- RedisTemplate End-->
     
     	<!-- shiro filter -->
     <bean id="ShiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
     	<property name="securityManager" ref="securityManager"/>
     	
     	<!--
     	<property name="loginUrl" value="/login.jsp"/>
     	<property name="successUrl" value="/home.jsp"/>  
     	<property name="unauthorizedUrl" value="/unauthorized.jsp"/>
     	-->
     	<!-- The 'filters' property is not necessary since any declared javax.servlet.Filter bean  -->
     	<!-- defined will be automatically acquired and available via its beanName in chain        -->
     	<!-- definitions, but you can perform instance overrides or name aliases here if you like: -->
     	<!-- <property name="filters">
     		<util:map>
     			<entry key="anAlias" value-ref="someFilter"/>
     		</util:map>
     	</property> -->
     	<property name="filterChainDefinitions">
     		<value>
     			/login.jsp = anon
     			/user/** = anon
     			/register/** = anon
     			/unauthorized.jsp = anon
     			/css/** = anon
     			/js/** = anon
     			
     			/** = authc
     		</value>
     	</property>
     </bean>
     
     <!-- shiro securityManager -->
     <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
     
     	<!-- Single realm app.  If you have multiple realms, use the 'realms' property instead. -->
     	
     	<!-- sessionManager -->
     	<property name="sessionManager" ref="sessionManager" />
     	
     	<!-- cacheManager -->
     	<property name="cacheManager" ref="cacheManager" />
     	
     	<!-- By default the servlet container sessions will be used.  Uncomment this line
     		 to use shiro's native sessions (see the JavaDoc for more): -->
     	<!-- <property name="sessionMode" value="native"/> -->
     </bean>
     <bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/>	
     
     <!-- redisSessionDAO -->
     <bean id="redisSessionDAO" class="cn.easyproject.shirorediscache.RedisSessionDAO">
     	<property name="redisTemplate" ref="redisTemplate" />
     	<!-- optional, default value:0, never expire. The expire time is in second -->
     	<property name="expire" value="1800"/>
     </bean>
     
     <!-- sessionManager -->
     <bean id="sessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager">
     	<property name="sessionDAO" ref="redisSessionDAO" />
     </bean>
     
     <!-- cacheManager -->
     <bean id="cacheManager" class="cn.easyproject.shirorediscache.RedisCacheManager">
     	<property name="redisTemplate" ref="redisTemplate" />
     </bean>

NOTE EasyShiro-Redis-Cache don't support SimpleAuthenticationInfo created by this constructor org.apache.shiro.authc.SimpleAuthenticationInfo.SimpleAuthenticationInfo(Object principal, Object hashedCredentials, ByteSource credentialsSalt, String realmName). Please use org.apache.shiro.authc.SimpleAuthenticationInfo.SimpleAuthenticationInfo(Object principal, Object hashedCredentials, String realmName) instead.

End

Email:inthinkcolor@gmail.com

http://www.easyproject.cn

Donation/捐助:


支付宝/微信/QQ/云闪付/PayPal 扫码支付
支付宝/微信/QQ/云闪付/PayPal

我们相信,每个人的点滴贡献,都将是推动产生更多、更好免费开源产品的一大步。

感谢慷慨捐助,以支持服务器运行和鼓励更多社区成员。

We believe that the contribution of each bit by bit, will be driven to produce more and better free and open source products a big step.

Thank you donation to support the server running and encourage more community members.

About

基于 Redis 的 Shrio 缓存,支持 Jedis 直连和 Spring-Data-Redis RedisTemplate。An implement of redis cache can be used by shiro, Support Jedis direct connect and Spring-Data-Redis RedisTemplate.

Topics

Resources

License

Stars

Watchers

Forks

Sponsor this project

Packages

No packages published