zoukankan      html  css  js  c++  java
  • 【Shiro】六、Apache Shiro Session管理

    1、Session的介绍

    关于Session

    会话:从启动一个Session到关闭这个Session作为一个会话,是对客户端和服务器端交互的一种封装,带有时效性

    会话的产生:
      一般从容器中产生
        Web container:Web容器,如Tomcat,这些容器对Session进行了实现,可以产生Session
        EJB Stateful Session Beans:比较少用

    会话的应用:
      Mobile
      Web
      分布式集群

    Shiro Session

      基于POJO
      可以自定义Session存储的方式,保存到内存、文件、数据库都可以
      容器无关的集群
      客户端访问多样化
      事件监听
      主机地址记忆,可以知道由哪台主机创建
      Web使用透明化,不需要关心Session怎么创建,只需要知道如何使用
      支持SSO,单点登录

    使用Session

    Subject currentUser = SecurityUtils.getSubject();
    Session session = currentUser.getSession(true);
    session.setAttribute("someKey", somValue);

      subject.getSession(flag)

        如果subject存在session,直接返回session
        如果subject不存在session,flag=true,则创建一个新的Ssssion并返回
        如果subject不存在session,flag=false,则返回null

      类似servlet中的Session

      支持所有应用,适合但不限于Web应用

    2、SessionManager

    DefaultSessionManager:默认实现

    Session Timeout:Session的有效期

    Session Listeners:面向事件、实现SessionListener接口

    Session Storage:Session的保存形式

      SessionDAO接口抽象

      in-memory-only:默认,使用内存保存Session

      EHCache SessionDAO:使用磁盘保存Session的实现

     

      EhCache SessionDAO的使用

        配置ehcache.xml

        Session Cache Name

    Session IDs

      SessionIdGenerator组件:用于生成SessionID

      JavaUuidSessionIdGenerator:默认实现,使用Java的uuid

      自定义

    Session Validation

      判断Session是否过期

      Lazy Validation:使用的时候才判断

      Session孤儿(orphan):使用Lazy时,某些Session过期了,仍长期存在。

    SessionValidationScheduler

      定期删除Session孤儿

      ExecutorServiceSessionValidationScheduler:默认实现

      自定义SessionValidationScheduler

      关闭Session Validation

      关闭Session删除功能

    3、Session集群

    用于实现Session的集群

    Shiro支持分布式缓存

      Web容器环境

      Native环境

    基于POJO多层架构

      支持集群的SessionDAO

      透明的SessionManager

    支持集成多种分布式缓存服务器

    EnterpriseCacheSessionDAO

      activeSessionsCache

    第三方集成

      Ehcache+Terracotta

      Zookeeper

    4、Session和用户状态

    有状态的应用

      Shiro默认使用Session保存认证状态

      通过SessionId获取用户状态

    无状态的应用

    自定义混合方案

      SessionStorageEvaluator

  • 相关阅读:
    如何将已有的本地Git 库推送到远端仓库?
    2017(秋)软工作业: (4)用户体验分析
    微信公众号UX分析—— 学生作业小结
    2017(秋)软工作业: (3)用户体验分析
    珞珈旧时光
    用scp这个命令来通过ssh传输文件
    课堂讨论:分析软件
    2017(秋)软工作业: (2)硬币游戏—— 代码分析与改进
    地铁口的零钱箱:
    Swagger .Net配置
  • 原文地址:https://www.cnblogs.com/LiveYourLife/p/9093573.html
Copyright © 2011-2022 走看看