apache shiro使用nginx集群如何解决cache共享
来源:互联网 发布:编程电缆 质量 编辑:程序博客网 时间:2024/06/04 19:35
如果要实现集群共享cache,我们就不能用shiro默认的方式处理了。
之前在我的项目当中使用的cacheManager:
<bean id="cacheManager" class="org.apache.shiro.cache.MemoryConstrainedCacheManager" />
<!-- Shiro 配置 --><bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager"> <property name="sessionMode" value="native"></property> <property name="sessionManager" ref="sessionManager"/><property name="cacheManager" ref="cacheManager"/><property name="realm" ref="shiroDbRealm" /></bean>
<bean id="cacheManager" class="com.xinding.travel.security.RedisCacheManager" ><property name="shiroCacheManager" ref="jedisShiroCacheManager"/></bean>
<!-- shiro 缓存实现,对ShiroCacheManager,我是采用redis的实现 --><bean id="jedisShiroCacheManager" class="com.xinding.travel.security.JedisShiroCacheManager"><property name="redisManager" ref="redisManager"/></bean>
RedisCacheManager:
import org.apache.shiro.cache.Cache;import org.apache.shiro.cache.CacheException;import org.apache.shiro.cache.CacheManager;/** * Created by Maggie on 2017/7/14. */public class RedisCacheManager implements CacheManager { private ShiroCacheManager shiroCacheManager; @Override public <K, V> Cache<K, V> getCache(String s) throws CacheException { return getShiroCacheManager().getCache(s); } public ShiroCacheManager getShiroCacheManager() { return shiroCacheManager; } public void setShiroCacheManager(ShiroCacheManager shiroCacheManager) { this.shiroCacheManager = shiroCacheManager; }}
JedisShiroCacheManager:
import org.apache.shiro.cache.Cache;/** * Created by Maggie on 2017/7/14. */public class JedisShiroCacheManager implements ShiroCacheManager { public RedisManager getRedisManager() { return redisManager; } public void setRedisManager(RedisManager redisManager) { this.redisManager = redisManager; } private RedisManager redisManager; @Override public <K, V> Cache<K, V> getCache(String name) { return new JedisShiroCache<K, V>(name, getRedisManager()); }}
JedisShiroCache:
import org.apache.shiro.cache.Cache;import org.apache.shiro.cache.CacheException;import java.util.Collection;import java.util.Set;/** * Created by Maggie on 2017/7/14. */public class JedisShiroCache<K, V> implements Cache<K, V> { /** * 为了不和其他的缓存混淆,采用追加前缀方式以作区分 */ private static final String REDIS_SHIRO_CACHE = "shiro_redis_session:"; private RedisManager redisManager; private String name; public JedisShiroCache(String name, RedisManager redisManager) { this.name = name; this.redisManager = redisManager; } @Override public V get(K k) throws CacheException { byte[] byteKey = SerializeUtil.serialize(buildCacheKey(k)); byte[] byteValue = new byte[0]; try { byteValue =redisManager.queryObjectByKey(byteKey); } catch (Exception e) { e.printStackTrace(); } return (V) SerializeUtil.deserialize(byteValue); } @Override public V put(K k, V v) throws CacheException { V previos = get(k); try { redisManager.insertObject(k.toString(),SerializeUtil.serialize(v),0); } catch (Exception e) { e.printStackTrace(); } return previos; } @Override public V remove(K k) throws CacheException { V previos = get(k); try { redisManager.deleteObject(k.toString()); } catch (Exception e) { e.printStackTrace(); } return previos; } @Override public void clear() throws CacheException { } @Override public int size() { return 0; } @Override public Set<K> keys() { return null; } @Override public Collection<V> values() { return null; } private String buildCacheKey(Object key) { return REDIS_SHIRO_CACHE + getName() + ":" + key; } public String getName() { if (name == null) return ""; return name; } public void setName(String name) { this.name = name; }}
这样配置之后。我的权限的缓存就会由redis管理。这就满足了shiro集群的要求了。
阅读全文
0 0
- apache shiro使用nginx集群如何解决cache共享
- apache shiro集群实现(二)— cache共享
- apache shiro集群实现(二)— cache共享
- apache shiro集群实现(二)— cache共享
- apache shiro集群实现(二)— cache共享
- apache shiro集群实现(二)— cache共享
- Apache shiro集群实现 (七)分布式集群系统下---cache共享
- Apache shiro集群实现 (七)分布式集群系统下---cache共享
- Apache shiro集群实现 (七)分布式集群系统下---cache共享
- apache shiro框架如何使用nginx负载
- nginx 、tomcat 集群配置、shiro Session 共享
- apache shiro集群实现(一) session共享
- apache shiro集群实现(一) session共享
- apache shiro集群实现(一) session共享
- apache shiro集群实现(一) session共享
- apache shiro集群实现(一) session共享
- Apache Shiro 会话集群
- 使用redis进行基于shiro的session集群共享
- Android新特性介绍,ConstraintLayout完全解析
- Java编译后产生class文件的命名规则
- C++Primer拾遗
- 一道让你轻松搞定Java面向对象方法
- 1255 字典序最小的子序列
- apache shiro使用nginx集群如何解决cache共享
- CSDN日报20170721——《为什么我们创业失败了和选择创业公司的思考》
- JavsScript学习
- 数组
- redis在window和linux下的安装
- 数组基本方法
- Tautology
- 建造者模式
- hadoop-2.6.4本地编译