Shiro笔记四(会话管理):SessionDao

四、会话管理

23. Shiro_会话管理

 

API与HttpSession的API也特别像

 

 

 

 

在Handler层建议使用原生的HttpSession, 那ShiroSession有什么用呢?

注意我们在传统的Web应用里面在Sevice里面是没法访问HttpSession的,也不建议这样做,在Handler层的API我们在Service层应该是不能访问的,但是现在有了Shiro这个Session之后我们就可以用了。

接下来测试一下Session,看2的testShiroAnnotation方法,然后在Service层就可以使用shiro提供的Session,这样就能在Service层访问到Session的数据,这就是它的非常重要的应用。

(注意,如果控制台输出不了语句,注意调整缓存ehcache的xml文件)

出现的问题:就是idea的console输出语句的窗口找不到了,此时可以通过打开Debug界面的左下角有个重置显示框的按钮

 

24. Shiro_SessionDao

作用:可以把Session写到数据库里面,对应session进行增删改查操作。下面这张图给出了shiro为我们操作session所提供的API。最顶层是SessionDAO接口,可以看到第三层的CachingDAO提供了缓存功能,但是依然是个抽象类,它下面的实现类就是通常开发中所直接继承的类、MemeryDAO可以在内存中操作Session。

 

这是基本的使用思路。

 

IDEA中查找到EnterpriseCacheSessionDAO这个类,其中doCreate()在创建的时候会回到这个方法 提供了实现,后面的读,更新,写都是空方法 。

其中doCreate中创建Session的时候需要先获取SessionId(点进获取id的方法中看到),这其中就需要用到属性叫SessionIdGenerator,所以在配置文件中配置EnterpriseCacheSessionDao的时候一定要给它设置SessionIdGenerator,点开这个类是个接口其中有两个实现类,什么uuidGenerator这些,刚才这些就是一些配置的原则。使用的并不是很多,如下就是参考的一些配置。

 

最后配置的SessionManager,我们要给到SecurityManager对应的属性就可以了。然后我们就可以对Session进行增删改查操作。方法的话就是Enterprise***中的那几个空方法,实际上需要利用对象输入输出流来进行读写操作,这个流需要包装字节输入输出流。看一下它的基本实现

下面是数据表:

 

 

红框外的是保持原来的初始代码没有变,在进行插入的时候,需要把session进行序列化,序列化是利用的对象输出流他包装了ByteArrayOutoutStream,就利用这样的方式进行写入。

查询同样是使用对象输入流进行读取。

 

 

进行更新和删除,这个相对而言就简单一点了。       更新也需要用到序列化。

 

梳理一下整个流程:

首先继承EnterpriseCacheSessionDAO, 这里边可以实现四个方法,其中读、写、更新的时候需要把sesison进行序列化跟反序列化操作,具体操作就是通过包装了字节数组输入输出流的对象输入输出流进行读写。

进行配置的时候需要用到SessionIdGenerator注入给SessionDAO,如果需要缓存的话还需要指定缓存的名字给SessionDAO,然后将SessionnDAO给SessionManager,再把会话管理器SessionManager给SecurityManager。

就完成整个流程了。

 

这是Cache的配置

 

再说一下,会话验证调度器 , 用于

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值