2017-08-27 64 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之類的其他實現將解決該問題,您將能夠獲得當前的主題和會話。