从大气源获得shiro会话

时间:2017-08-27 09:03:23

标签: java session shiro atmosphere

我使用以下代码从大气资源获取会话:

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

但是,对于具有有效会话的经过身份验证的用户,它会返回具有null主体的会话。

1 个答案:

答案 0 :(得分:0)

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

  

尽管名称如此,但此实现本身并不管理Sessions   因为Servlet容器提供了实际的管理支持。   这个课程主要是为了“冒充”常规的四郎   SessionManager因此可以插入普通的Shiro   纯Web应用程序中的配置。

然而,将会话管理器更改为DefaultWebSessionManager等其他实现将解决问题,您将能够获得当前的主题和会话。