很久没有写过博文,一来是因为工作比较紧,二来是因为很长一段时间没有写博文的心情。今天,想继续写写shiro的一些文章,这篇文章只要想分享的是shiro 共享session的内容。
在这里先给出我的shiro配置文件:
1 | <bean id="shiroRealm" class="com.concom.security.infrastructure.shiro.ShiroRealm"/> |
从shiro的DefaultWebSecurityManager源码中我们可以看到,该类继承了CachingSecurityManager类,CachingSecurityManager里有个CacheManager属性,这就是shiro的cache,我们主要实现这个cache就可以。贴出源码。
1 | public abstract class CachingSecurityManager implements SecurityManager, Destroyable, CacheManagerAware { |
cacheManager是一个接口,shiro给出了一个实现,就是MemoryConstrainedCacheManager,下面也贴出MemoryConstrainedCacheManager的源码。
1 | public class MemoryConstrainedCacheManager extends AbstractCacheManager { |
从MemoryConstrainedCacheManager我们可以看到,MemoryConstrainedCacheManager继承了AbstractCacheManager,我们自己建一个类,也继承AbstractCacheManager,然后实现createCache(String name)方法,替换shiro的默认实现即可。在这里,也给出我的实现。
1 | package com.concom.security.infrastructure.shiro.cache; |
createCache方法返回的是一个Cache,Cache也是一个接口,我写了一个ShiroMemcachedCache,实现了Cache。ShiroMemcachedCache主要是对缓存的一些增删改查的操作。其中ShiroMemcachedCache的实现如下:
1 | package com.concom.security.infrastructure.shiro.cache.memcache; |
上面缓存用的是memcached。这样,shiro的缓存共享就完成了。篇幅有点长,这篇先写到这里,下一篇将继续讲shiro的cache共享。