首页 > 技术文章 > Shiro 登录、退出、校验是否登录涉及到的Session和Cookie

BINGJJFLY 2018-08-23 18:26 原文

前提

我们的使用的是DefaultWebSessionManager而不是ServletContainerSessionManager。这就意味着前者的session为Shiro的,后者的session为Tomcat的。

登录

  DefaultWebSessionManager调用start()方法(在AbstractNativeSessionManager中)创建Session(SimpleSession),创建过程中会将Session放到介质(Redis)中,再调用onStart()方法将sessionId放入到浏览器的Cookie中。

  我们已经拿到Session(SimpleSession)了可以将用户相关信息放到其中:session.setAttribute("userName", userName);,这个过程是放到了SimpleSession的一个Map属性中,同时更新介质中的SimpleSession。

退出

  DefaultWebSessionManager调用stop(SessionKey key)方法(在AbstractNativeSessionManager中),SimpleSession设置停止时间戳,再调用onStop()方法设置最后访问时间戳并更新介质中的session,清除浏览器中关于session的Cookie。

校验是否登录

  我们可以通过Session是否存在并且session中的用户信息是否存在来判断或者是Cookie是否存在或者是Subject.isAuthenticated()是否为false,有其一不成立就执行退出操作。

推荐阅读