我有一个由shiro安全框架生成的会话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。
答案 0 :(得分:1)
你没有提供太多细节,你的确切问题有点不清楚。
Shiro管理会话和会话验证,这内置于框架中,您通常不需要关心shiro如何检查/验证会话的机制。
另一个问题不明确的是你的技术堆栈。它是一个Web应用程序吗?还有其他第三方库,比如Spring吗?但是这里是guide。
请注意,会话(即使是有效会话)并不表示用户已登录或已通过身份验证。
从shiro获取当前用户:
Subject currentUser = SecurityUtils.getSubject();
然后你要检查这是否是"已知" user,检查是否存在非null主体:
User user = (User) currentUser.getPrincipal();
再一次,你的问题很模糊,但我希望这会引导你朝着正确的方向前进。