从 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
将解决问题,您将能够获取当前的主题和会话。
我正在使用以下代码从大气资源中获取会话:
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
将解决问题,您将能够获取当前的主题和会话。