我試圖將我的webapp的會話管理(目前由Catalina/Tomcat處理)替換爲shiro本地會話管理。SessionListener中的Shiro HttpSession?
這應該是一個相當簡單的工作,如通過四郎網站adverted:
透明HttpSession的支持 - 如果你正在使用四郎的本地 會議,我們已經實現了HTTP會話API和Servlet 2.5的API 所以你不必改變任何你現有的網頁代碼來使用 Shiro。
所以之後,你用Shiro的DefaultWebSessionManager
替換了本地會話管理器,所有的東西都應該可以直接使用。
這也是我的webapp的情況,除了某個javax.servlet.http.HttpSessionListener
。自從使用Shiro的會話管理以來,此監聽器不再獲得事件。
不用擔心我以爲! Shiro提供它自己的org.apache.shiro.session.SessionListener
接口,可以鏈接到會話管理器。
但是,這個接口與javax.servlet.http.HttpSessionListener
差別很大。不再有HttpSession
對象通過,而是Shiro Listener通過它自己的org.apache.shiro.session.Session
對象與事件。
我現有的實施作品只有HttpSession
個對象。我發現一個四郎Session
可以轉化爲一個HttpSession
:
// HttpServletRequest currentRequest;
// ServletContext servletContext;
// Session session;
HttpSession httpSession = new ShiroHttpSession(session, currentRequest, servletContext);
但是沒有辦法從四郎SessionListener
存取權限的HttpServletRequest和參數servletContext。
任何想法如何解決這個問題,例如,你能回答這兩個問題中的一個嗎?
- 爲什麼舊的
javax.servlet.http.HttpSessionListener
不再叫 叫? - 如何將Shiro
Session
對象變爲HttpSession
shiroSessionListener
中的對象?
簡而言之,我舊的SessionListener中的所有代碼都被寫入與HttpSessions一起使用。我怎樣才能重用這段代碼,而不必將它全部重構爲使用Shiro Session對象?這將是相當多的工作。 –
@KarstenDaemen你正在使用什麼'HttpSession'方法? Shiro的'Session'也具有屬性設置器和getter,但顯然這些對於JSP等是不可用的。 –