Redis-shrio集成:用redis实现shrio框架下的session共享

 

  

开局扯淡篇:现在互联网数据越来越大,所以对平台数据吞吐量越来越高,简单的框架已经无法满足系统需要,那么我们需要用到 分布式 ,以及缓存。这里主要总结一下分布式情况下,通过jedis解决session共享以及单点登录的问题。

 

建议:先初步了解下shrio再看此文章

使用的jar:

org.apache.shiro

shiro-core

org.apache.shiro

shiro-spring

org.apache.shiro

shiro-cas

commons-logging

commons-logging

org.apache.shiro

shiro-web

org.apache.shiro

shiro-ehcache

      org.crazycake

      shiro-redis

      2.4.2.1-RELEASE

这里重点介绍的 org.crazycake  ,上面的shrio是我们常用的登录验证框架

 

看到这里,希望能把org.crazycake的源码down下来,然后对着看。因为org.crazycake中重写了shrio中的操作session的类,也是我们需要用到它的地方。

 

Shrio中最核心的类:org.apache.shiro.web.mgt.DefaultWebSecurityManager

他拥有3个重要的属性 :realm(权限验证器)、sessionManager(session管理器)、cacheManager(缓存管理器)

这里需要区分一下:

sessionManager:字面意思,管理session的(这里指shrio的session,不是HttpSession喔)

cacheManager:认证和授权管理器

我们这里主要重新注入这两个属性。

 

呐,现在看下一下shrio的类结构图

Redis-shrio集成:用redis实现shrio框架下的session共享_第1张图片

 

Org.crazycake,帮我们实现了 以上所有属性,

sessionDAO:

org.crazycake.shiro.RedisSessionDAO 第25行:private String keyPrefix = "shiro_redis_session:";

可以看到我们存到redis缓存中的key前缀是"shiro_redis_session:"开头的(也可以注入新的名称)

sessionIdCookie:cookie机制存储name属性指定cookieId

redisManager:操作缓存的类

 

辣么,以下配置正确的实现了上图所有属性:

    

 

    

    

    

    

    

    

 

    

    

    

    

 

    

    

 

    

       

 

    

   

      

          

          

          

          

          

      

Java代码中,通过SecurityUtils.getSubject().getSession()获取session即可。

 

附原理图:

 Redis-shrio集成:用redis实现shrio框架下的session共享_第2张图片

 

.......

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(redis,缓存,安全)