【问题标题】:Authenticate Session with Apache Shiro using session ID使用会话 ID 验证与 Apache Shiro 的会话
【发布时间】:2018-06-02 15:41:16
【问题描述】:

我有一个由 shiro 安全框架生成的会话 ID cookie,它在每个请求中传递。有什么方法可以验证 shiro 的会话 ID 是否有效。

我正在尝试通过传递会话 ID 来使用以下代码。

 Subject requestedSubject = new Subject.Builder().sessionId(sessionId).buildSubject();
 return !(requestedSubject.getSession(false) == null);

得到以下异常

"exceptionClass": "class java.lang.IllegalArgumentException", "RESTMethod": "GET", "message": "SessionKey 必须是 HTTP 兼容的 实施。", "rootCausePointClass": "org.apache.shiro.web.session.mgt.ServletContainerSessionManager", "rootCausePointMethod": "getSession"

我做错了什么,或者有任何其他方法可以验证会话 ID。

【问题讨论】:

  • 您似乎想在这里做更多的事情,所以我们可能需要更多的上下文。开箱即用,Shiro 的网络模块为您完成了这项工作。

标签: apache validation session shiro


【解决方案1】:

你没有提供太多细节,你的确切问题有点不清楚。

Shiro 管理会话和会话验证,这是内置在框架中的,您通常不需要关心 shiro 如何检查/验证会话的机制。

问题中还不清楚的另一件事是您的技术堆栈。它是一个网络应用程序吗?是否有任何其他第三方库,例如 Spring?不过这里是guide

请注意,会话(即使是有效会话)并不表示用户已登录或已通过身份验证。

从 shiro 获取当前用户:

Subject currentUser = SecurityUtils.getSubject();

然后您检查这是否是“已知”用户,检查是否存在非空主体:

User user = (User) currentUser.getPrincipal();

再一次,您的问题含糊不清,但我希望这会引导您朝着正确的方向前进。

【讨论】:

    猜你喜欢
    • 2016-05-13
    • 1970-01-01
    • 2013-12-06
    • 2012-06-02
    • 2019-10-23
    • 2015-12-09
    • 2013-02-16
    • 2020-08-29
    相关资源
    最近更新 更多