从 atmosphereresource 获取 shiro session

Getting shiro session from 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();

但是,对于具有有效会话的已验证用户,它returns具有空主体的会话。

您编写的片段正是 ShiroInterceptor 所做的。如果您没有在 .INI 文件中指定会话管理器,它将使用 ServletContainerSessionManager。 来自 ServletContainerSessionManager 的文档:

Despite its name, this implementation does not itself manage Sessions since the Servlet container provides the actual management support. This class mainly exists to 'impersonate' a regular Shiro SessionManager so it can be pluggable into a normal Shiro configuration in a pure web application.

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