代码详见:https://github.com/alexxiyang/shiro-redis#shiro-redis
使用步骤:
(1)使用"git clone https://github.com/alexxiyang/shiro-redis.git"克隆项目并build一个jar包。
(2)添加maven依赖。
<dependency> <groupId>org.crazycake</groupId> <artifactId>shiro-redis</artifactId> <version>2.4.2.1-RELEASE</version> </dependency>
配置步骤:
有两种方式配置:shiro.ini or spring-*.xml
shiro.ini:
#redisManager redisManager = org.crazycake.shiro.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, default value:0 .The expire time is in second redisManager.expire = 30 #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 = org.crazycake.shiro.RedisSessionDAO redisSessionDAO.redisManager = $redisManager sessionManager = org.apache.shiro.web.session.mgt.DefaultWebSessionManager sessionManager.sessionDAO = $redisSessionDAO securityManager.sessionManager = $sessionManager #============redisCacheManager=========== cacheManager = org.crazycake.shiro.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
spring.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="org.crazycake.shiro.RedisManager"> <property name="host" value="127.0.0.1"/> <property name="port" value="6379"/> <property name="expire" value="1800"/> <!-- optional properties: <property name="timeout" value="10000"/> <property name="password" value="123456"/> --> </bean> <!-- redisSessionDAO --> <bean id="redisSessionDAO" class="org.crazycake.shiro.RedisSessionDAO"> <property name="redisManager" ref="redisManager" /> </bean> <!-- sessionManager --> <bean id="sessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager"> <property name="sessionDAO" ref="redisSessionDAO" /> </bean> <!-- cacheManager --> <bean id="cacheManager" class="org.crazycake.shiro.RedisCacheManager"> <property name="redisManager" ref="redisManager" /> </bean>
注意:该方法不支持SimpleAuthenticationInfo的构造函数:org.apache.shiro.authc.SimpleAuthenticationInfo.SimpleAuthenticationInfo(Object principal, Object hashedCredentials, ByteSource credentialsSalt, String realmName).请使用org.apache.shiro.authc.SimpleAuthenticationInfo.SimpleAuthenticationInfo(Object principal, Object hashedCredentials, String realmName)这个构造函数替代。