有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    您编写的代码片段正是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等其他实现将解决此问题,并且您将能够获得当前主题和会话