【Shiro】 会话管理
【Shiro】 会话管理
Metadata
title: 【Shiro】 会话管理
date: 2023-01-19 13:57
tags:
- 行动阶段/完成
- 主题场景/组件
- 笔记空间/KnowladgeSpace/ProgramSpace/ModuleSpace
- 细化主题/Module/Shiro/基础
categories:
- Shiro
keywords:
- Shiro
description: 【Shiro】 会话管理
【Shiro】 会话管理
Apache Shiro 提供了安全框架世界中独一无二的东西:可用于任何应用程序和任何架构层的一致会话 API。也就是说,Shiro 为任何应用程序启用会话编程范例——从小型守护程序独立应用程序到最大的集群 Web 应用程序。这意味着希望使用会话的应用程序开发人员不再被迫使用 Servlet 或 EJB 容器(如果他们不需要的话)。或者,如果使用这些容器,开发人员现在可以选择在任何层中使用统一且一致的会话 API,而不是 servlet 或特定于 EJB 的机制。
但也许 Shiro 会话最重要的好处之一是它们与容器无关。这具有微妙但极其强大的含义。例如,让我们考虑会话集群。有多少种特定于容器的方法可以将会话集群以实现容错和故障转移?Tomcat 与 Jetty 不同,Jetty 与 Websphere 等不同。但是使用 Shiro 会话,您可以获得一个独立于容器的集群解决方案。Shiro 的架构允许可插拔的 Session 数据存储,例如企业缓存、关系数据库、NoSQL 系统等。这意味着您只需配置一次会话集群,无论您的部署环境如何——Tomcat、Jetty、JEE 服务器或独立应用程序,它都将以相同的方式工作。
Shiro 会话的另一个好处是会话数据可以在需要时跨客户端技术共享。例如,如果需要,Swing 桌面客户端可以参与同一 Web 应用程序会话 - 如果最终用户同时使用两者,则很有用。那么如何在任何环境中访问 Subject 的会话呢?有两种 Subject 方法,如下例所示。
清单10: 主题的会话
Session session = subject.getSession();
Session session = subject.getSession(boolean create);
如您所见,这些方法在概念上与 HttpServletRequest API 相同。第一个方法将返回 Subject 的现有 Session,或者如果还没有,它将创建一个新的并返回它。第二种方法接受一个布尔参数,该参数决定是否创建一个新的 Session(如果它尚不存在)。一旦获得了 Subject 的 Session,就可以像使用 HttpSession 一样使用它。Shiro 团队认为 HttpSession API 最适合 Java 开发人员,因此我们保留了它的大部分感觉。当然,最大的区别在于您可以在任何应用程序中使用 Shiro Sessions,而不仅仅是 Web 应用程序。清单 11 显示了这种熟悉程度。
清单 11: 会话方法
Session session = subject.getSession(); session.getAttribute(“key”, someValue); Date start = session.getStartTimestamp(); Date timestamp = session.getLastAccessTime(); session.setTimeout(millis);