使用会话ID通过Apache Shiro验证会话

使用会话ID通过Apache Shiro验证会话,apache,validation,session,shiro,Apache,Validation,Session,Shiro,我有一个由shiro security framework生成的会话ID cookie,它在每个请求中传递。是否有任何方法验证会话ID对shiro是否有效 我正在通过传递会话ID来尝试以下代码 Subject requestedSubject = new Subject.Builder().sessionId(sessionId).buildSubject(); return !(requestedSubject.getSession(false) == null); 获取以下异常 exc

我有一个由shiro security framework生成的会话ID cookie,它在每个请求中传递。是否有任何方法验证会话ID对shiro是否有效

我正在通过传递会话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。

您没有给出太多细节,您的确切问题有点不清楚

 Subject requestedSubject = new Subject.Builder().sessionId(sessionId).buildSubject();
 return !(requestedSubject.getSession(false) == null);
Shiro管理会话和会话验证,这是内置在框架中的,您通常不需要关心Shiro如何检查/验证会话的机制

另一个问题还不清楚,那就是你的技术堆栈。它是一个web应用程序吗?是否还有其他第三方库,如Spring?然而,这里有一个问题

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

要从shiro获取当前用户,请执行以下操作:

Subject currentUser = SecurityUtils.getSubject();
然后,要检查这是否为已知用户,请检查是否存在非空主体:

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

再一次,您的问题很模糊,但我希望这能引导您朝着正确的方向前进。

看起来您正在尝试在这里做更多的工作,因此我们可能需要更多的背景知识。开箱即用,Shiro的web模块可以为您实现这一点。