Shiro实现登录状态与用户信息查询

需积分: 43 102 下载量 38 浏览量 更新于2024-09-09 2 收藏 2KB TXT 举报
Shiro是一个强大的Java安全框架,用于身份验证、授权和会话管理。在这个提供的代码片段中,我们主要关注两个关键方法:`isAuthenticated` 和 `getUserInfo`,它们与用户登录状态和会话中的用户信息相关。 1. **isAuthenticated方法**: 此方法用于检查用户是否已经成功登录。它接收三个参数:`sessionID`(用户的会话标识符)、`HttpServletRequest` 和 `HttpServletResponse`。方法内部首先创建一个`WebSessionKey`对象,这是Shiro用于存储和检索会话数据的关键。接着,调用`SecurityUtils.getSecurityManager().getSession(key)`来获取与给定会话ID关联的会话对象。 Shiro使用`DefaultSubjectContext.AUTHENTICATED_SESSION_KEY`来存储用户的登录状态。如果该键在会话中存在且其值不为`null`,则将该值强制转换为`Boolean`类型并赋值给`status`变量。如果登录状态为`true`,则返回`true`,表示用户已登录;否则,返回`false`。 2. **getUserInfo方法**: 这个方法用于获取当前登录用户的具体信息。同样依赖于`sessionID`、`HttpServletRequest` 和 `HttpServletResponse`。它使用`DefaultSubjectContext.PRINCIPALS_SESSION_KEY`来获取存储在会话中的用户实体对象,这里是`com.hncxhd.bywl.entity.manual.UserInfo`类型的实例。 方法首先通过相同的`WebSessionKey`获取会话,然后尝试从会话中获取`PRINCIPALS_SESSION_KEY`关联的数据,即用户信息对象。如果找到并解析为用户实体,就返回这个`UserInfo`对象,否则返回`null`或抛出异常,表示用户信息无法获取。 总结来说,这两个方法是Shiro框架在处理用户身份验证和会话管理时的核心功能。`isAuthenticated`确保了只有已登录的用户才能访问后续的受保护资源,而`getUserInfo`则提供了访问用户具体信息的途径,这对于基于角色或权限的访问控制至关重要。通过使用Shiro的会话机制,可以实现跨请求保持用户状态,并确保安全性。