2017-08-27 42 views
0

我使用下面的代码获取四郎会议上得到的atmosphereresource会话:从atmosphereresource

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(); 

但是,它使用有效会话为经过身份验证的用户返回一个具有空主体的会话。

回答

0

你写的代码段正是ShiroInterceptor所做的。如果您未在.INI文件中指定会话管理器,它将使用ServletContainerSessionManager。 从ServletContainerSessionManager文档:

尽管它的名字,因为Servlet容器提供实际的管理支持这种做法不本身管理会话 。 该课程主要用于模拟常规Shiro SessionManager,因此它可以插入到纯Web应用程序中的正常Shiro 配置中。

但是,将会话管理器更改为DefaultWebSessionManager之类的其他实现将解决该问题,您将能够获得当前的主题和会话。