shiro1.3.2

sessionManage的作用是对会话进行管理。

1.类结构

2.主要接口介绍

  • SessionManager:

包括两个方法,一个是新建会话,一个是通过key获取会话

  • ValidatingSessionManager:

主要是对会话进行验证的功能。web端服务器通常会维持会话信息,但是在浏览器直接关闭,用户没有手动退出的情况下,服务器维护的该会话难以被手动清理。

就需要服务端定时轮询,清理过期的会话。

  • NativeSessionManager

提供会话的大部分功能。主要有:会话开始时间、最后访问时间、是否有效、超时时长、更新会话、获取会话host、停止会话、设置与获取会话相关的属性等。其中会话的attribute可以用来在登录成功后,手动存储用户相关信息。

3.主要的几个实现类

  • AbstractSessionManager

实现了SessionManager。当然,还是个抽象类,只加了个自己的字段:全局超时时间。

  • AbstractNativeSessionManager extends AbstractSessionManager implements NativeSessionManager, EventBusAware

继承了上面的那个抽象类。并实现了NativeSessionManager的大部分方法,并实现EventBusAware来注入了EventBus。

引入了几个字段:会话监听器集合、EventBus。

主要的抽象方法只有两个:

protected abstract Session doGetSession(SessionKey key)
获取会话。
protected abstract Session createSession(SessionContext context) throws AuthorizationException;
创建会话。
  • AbstractValidatingSessionManager extends AbstractNativeSessionManager
    implements ValidatingSessionManager, Destroyable

继承了上面的抽象类,并加入了validate相关的方法一堆。

实现了上面的两个抽象接口,并在其实现中抽出了另外几个抽象方法,给下层去实现。典型的模板方法设计模式。

提供了以下几个抽象方法出去:

protected abstract Session retrieveSession(SessionKey key) throws UnknownSessionException;
获取会话。
protected abstract Session doCreateSession(SessionContext initData) throws AuthorizationException;
创建会话。
protected abstract Collection<Session> getActiveSessions();
获取全部的活跃会话。
DefaultSessionManager extends AbstractValidatingSessionManager implements CacheManagerAware

继承上面抽象类,实现CacheManagerAware,在cachemanager存在的情况下,使用缓存来提升性能。
加了几个字段,会话工厂,会话操作的dao,是否删除无效会话的控制项。
主要还是对上层的抽象方法:获取、新建会话的实现。
  •  DefaultWebSessionManager extends DefaultSessionManager implements WebSessionManager

追加了web相关的功能,比如从cookie和url中获取sessionId等。

大体如此。

shiro的sessionManager类继承结构及主要类方法的更多相关文章

  1. QT类的继承结构

    QT类的继承结构 QT的类 core 数据集合 QString 几何类 QPoint QSize QRectangle 系统类 QColor QFont QImage QIcon QCursor QB ...

  2. Java -- 异常的捕获及处理 -- 异常类的继承结构

    7.1.3 异常类的继承结构 在整个Java的异常结构中,实际上有两个最常用的类,分别为Exception和Error,这两个类全都是Throwable的子类. ⊙ Exception : 一般标识的 ...

  3. 3、二、c# 面向对像编程。类,结构、C# 数据类型(引用类型、值 类型、指针类型)、ref参数与out参数、方法的重载、静态类型与静态成员、继承与多态、委托与事件

    一.类 定义类使用class关键字. <access specifier> class class_name { // member variables 成员变量 <access s ...

  4. c# 对 struct为什么不能继承类和结构的思考

    1.类.结构在使用的时候可以不调用构造函数,如果能够继承类,这种情况下不能够初始化基类,因为不执行构造函数 2.结构.所有的结构类型都默认是 sealed,通过 反汇编可以看到  ,这就阻止了结构被继 ...

  5. C#基础回顾(二)—页面值传递、重载与重写、类与结构体、装箱与拆箱

    一.前言 -孤独的路上有梦想作伴,乘风破浪- 二.页面值传递 (1)C#各页面之间可以进行数据的交换和传递,页面之间可根据获取的数据,进行各自的操作(跳转.计算等操作).为了实现多种方式的数据传递,C ...

  6. swift学习笔记3——类、结构体、枚举

    之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...

  7. Swift3.0P1 语法指南——类和结构体

    原档:https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programmi ...

  8. 【Swift学习】Swift编程之旅---类和结构体(十三)

    与其他编程语言所不同的是,Swift 并不要求你为自定义类和结构去创建独立的接口和实现文件.你所要做的是在一个单一文件中定义一个类或者结构体,系统将会自动生成面向其它代码的外部接口. 注意:通常一个类 ...

  9. swift学习笔记之-类和结构体

    //类和结构体 import UIKit //类和结构体 /* 1.枚举enum.结构体struct和String.Array.Dictionary类型,都属于值传递类型,被赋值给新的常量或变量时传递 ...

随机推荐

  1. selenium webdriver 使用Chrome 浏览器

    首先需要有ChromeDriver驱动来协助.ChromeDriver是实现WebDriver有线协议的一个单独的服务.ChromeDriver通过chrome的自动代理框架控制浏览器,ChromeD ...

  2. Python进程-实现

    multiprocessing模块介绍 python中的多线程无法利用CPU资源,在python中大部分计算密集型任务使用多进程.如果想要充分地使用多核CPU的资源(os.cpu_count()查看) ...

  3. jQuery 3.0最终版发布,十大新特性眼前一亮

    jQuery 3.0在日前发布了最终的全新版本.从2014年10月,jQuery团队对这个主要大版本进行维护开始,web开发者社区便一直在期待着这一刻的到来,终于在2016年6月他们迎来了这一个最终板 ...

  4. Java8 中 ConcurrentHashMap工作原理的要点分析

    简介: 本文主要介绍Java8中的并发容器ConcurrentHashMap的工作原理,和其它文章不同的是,本文重点分析了不同线程的各类并发操作如get,put,remove之间是如何同步的,以及这些 ...

  5. poj-1031-fence(不是我写的,我只是想看着方便)

    题目大意: 有一个光源位于(0,0)处,一个多边形的围墙.围墙是“全黑”的,不透光也不反射光.距光源r处的光强度为I0=k/r,k为常数. 一块无穷窄高为h的墙上围墙受到的照度为dI=I0*|cosα ...

  6. [iOS]详解调整UIButton的title和image的位置

    UIButton的默认布局是:title在右,image在左; 很多时候我们需要的是title在左边,或者title在下面,这时就需要调整UIButton的TitleLabel和ImageView的位 ...

  7. 【JS】 Javascript 入门

    javascript **********本章大量示例和内容引用自w3cschool的javascript教程************** 本来已经快写完90%左右了,结果不小心跑了个js,不小心把浏 ...

  8. ThoughtWorks.QRCode 生成QR二维码时提示“索引超出了数组界限”的原因和解决方法

    "索引超出了数组界限"也有可能确实是因为你选择的二维码Version对应的容量不足以存储你所放的内容,如果你确定使用的版本容量二维码能存储你的内容,但还是报错,那么再考虑此解决方法 ...

  9. PO BO VO DTO POJO DAO DO

    PO BO DTO VO 归在一起叫是POJO,简单java对象:DAO 是进行数据库增删改查的类,DO不确定有没有. 重点说下POJO PO 持久对象,数据: BO 业务对象,封装对象.复杂对象 , ...

  10. 为什么说android UI操作不是线程安全的

    转载于:http://blog.csdn.net/lvxiangan/article/details/17218409#t2 UI线程及Android的单线程模型原则 使用Worker线程 Commu ...