shiro之入口:EnvironmentLoaderListener

一、ServletContextListener是Web容器提供的用來監聽Web應用的生命週期事件(好比出生,死亡)的。EnvironmentLoaderListener就是這樣一種監聽器。web

二、EnvironmentLoaderListener是shiro的入口,它實現了ServletContextListener接口,繼承了EnvironmentLoader類。如圖:框架

三、EnvironmentLoaderListener本身表面上作了兩件事情:監聽容器的啓動與關閉事件;xml

(1)容器啓動時,能夠從 ServletContextEvent 中直接獲取 ServletContext 對象,從而獲取web.xml裏的一些配置,好比我最想知道的.ini文件加載的地址。從中獲取 WebEnvironment 接口的實現類(默認是 IniWebEnvironment),初始化該實例,並將其加載到 ServletContext 中對象

 

(2)當容器關閉時,銷燬 WebEnvironment 實例,並從 ServletContext 將其移除。繼承

四、實際上,上面兩件事都是EnvironmentLoader作的接口

五、EnvironmentLoaderListener的兩個方法是實現了ServletContextListener接口的contextInitialized和contextDestroyed。生命週期

總結:EnvironmentLoaderListener在容器啓動時建立 WebEnvironment 對象,並由該對象來讀取 Shiro 配置文件,建立WebSecurityManager 與 FilterChainResolver 對象,它們都在後面將要出現的 ShiroFilter 中起到了重要做用。從 web.xml 中一樣能夠得知,ShiroFilter 是整個 Shiro 框架的門面,由於它攔截了全部的請求,後面是須要 Authentication(認證)仍是須要 Authorization(受權)都由它說了算。事件

相關文章
相關標籤/搜索