Shiro 登錄、退出、校驗是否登錄涉及到的Session和Cookie


前提

我們的使用的是DefaultWebSessionManager而不是ServletContainerSessionManager。這就意味着前者的session為Shiro的,后者的session為Tomcat的。

登錄

  DefaultWebSessionManager調用start()方法(在AbstractNativeSessionManager中)創建Session(SimpleSession),創建過程中會將Session放到介質(Redis)中,再調用onStart()方法將sessionId放入到瀏覽器的Cookie中。

  我們已經拿到Session(SimpleSession)了可以將用戶相關信息放到其中:session.setAttribute("userName", userName);,這個過程是放到了SimpleSession的一個Map屬性中,同時更新介質中的SimpleSession。

退出

  DefaultWebSessionManager調用stop(SessionKey key)方法(在AbstractNativeSessionManager中),SimpleSession設置停止時間戳,再調用onStop()方法設置最后訪問時間戳並更新介質中的session,清除瀏覽器中關於session的Cookie。

校驗是否登錄

  我們可以通過Session是否存在並且session中的用戶信息是否存在來判斷或者是Cookie是否存在或者是Subject.isAuthenticated()是否為false,有其一不成立就執行退出操作。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM