java从AtmosphereSource获取shiro会话
我正在使用以下代码从AtmosphereSource获取会话:
WebEnvironment env = WebUtils.getRequiredWebEnvironment(r.getAtmosphereConfig().getServletContext());
Session session = new WebSubject.Builder(env.getSecurityManager(), r.getRequest(), r.getResponse()).buildWebSubject().getSession();
我还尝试通过以下方式从会话id获取会话:
WebEnvironment env = WebUtils.getRequiredWebEnvironment(r.getAtmosphereConfig().getServletContext());
Session s = new Subject.Builder(env.getSecurityManager()).sessionId(sessionId).buildSubject().getSession();
但是,对于具有有效会话的经过身份验证的用户,它返回具有空主体的会话
# 1 楼答案
您编写的代码片段正是
ShiroInterceptor
所做的。如果在.INI
文件中未指定会话管理器,它将使用ServletContainerSessionManager
。 从ServletContainerSessionManager
的文档中:但是,将会话管理器更改为
DefaultWebSessionManager
等其他实现将解决此问题,并且您将能够获得当前主题和会话