zoukankan      html  css  js  c++  java
  • shiro-会话管理

      shiro提供了完整的企业级会话还礼功能,不依赖与底层容器(如web容器Tomcat),不管JavaSE还是JavaEE环境都可以使用,提供了会话管理、会话事件监听、会话存储/持久化、容器无关的集群、失效/过期支持、对web的透明支持,SSO单点登录的支持等特性。

    一. 会话相关的API:org.apache.shiro.session.Session

      1. Subject.getSession():获取会话,其等价于Subject.getSession(true):如果当前没有Session对象会创建一个;Subject.getSession(false):如果当前没有Session则返回null。

      2. 获取当前会话的唯一ID:Serializable getId()

      3. 获取当前Subject的主机地址:String getHost()

      4. 获取/设置当前Session过期时间:

    long getTimeout() throws InvalidSessionException
    void setTimeout(long maxIdleTimeInMillis) throws InvalidSessionException

      5. 获取Session的启动时间/最后访问时间:

        如果是JavaSE应用需要自己定期调用session.touch()去更新最后访问时间;如果是Web应用,每次进入ShiroFilter都会自动调用session.touch()来更新最后访问时间。

    Date getStartTimestamp()
    Date getLastAccessTime()

      6. 更新会话最后访问时间以及销毁会话;当Subject.logout()时会自动调用stop

    void touch() throws InvalidSessionException
    void stop() throws InvalidSessionException

      7. 设置/获取/删除会话属性:

    void setAttribute(Object key,Object value)throws InvalidSessionException
    Object getAttribute(Object key)throws InvalidSessionException
    Object removeAttribute(Object key)throws InvalidSessionException

    二. 会话监听器:org.apache.shiro.session.SessionListener

      会话监听器用于监听会话创建、过期及停止

    package org.apache.shiro.session;
    public interface SessionListener {
        void onStart(Session var1);
        void onStop(Session var1);
        void onExpiration(Session var1);
    }

    三. SessionDAO:org.apache.shiro.session.mgt.eis.SessionDAO

      AbstractSessionDAO 提供了SessionDAO 的基础实现, 如生成会话ID等

      CachingSessionDAO 提供了对开发者透明的会话缓存的功能,需要设置相应的 CacheManager

      MemorySessionDAO 直接在内存中进行会话维护

      EnterpriseCacheSessionDAO 提供了缓存功能的会话维护,默认情况下使用 MapCache 实现,内部使用ConcurrentHashMap 保存缓存的会话。

    四. 会话验证:

      Shiro 提供了会话验证调度器,用于定期的验证会话是否已过期,如果过期将停止会话

      出于性能考虑,一般情况下都是获取会话时来验证会话是否过期并停止会话的;但是如在 web 环境中,如果用户不主动退出是不知道会话是否过期的,因此需要定期的检测会话是否过期,Shiro 提供了会话验证调度器SessionValidationScheduler

      Shiro 也提供了使用Quartz会话验证调度器:QuartzSessionValidationScheduler

  • 相关阅读:
    jQuery+ThinkPHP+Ajax实现即时消息提醒功能
    依赖注入(DI)
    控制反转(IoC)
    ajax以base64上传图片到django
    python 多进程、多线程、协程
    python3 实现tcp/udp局域网通信
    同源策略与跨域访问
    nginx+uwsgi阿里云ubuntu服务器上简单部署flask RESTful风格项目
    python3 实现 websocket server 解决中文乱码
    python IO 多路复用 epoll简单模型
  • 原文地址:https://www.cnblogs.com/luliang888/p/11173788.html
Copyright © 2011-2022 走看看