Shiro 集成Web時 web.xml詳解

Shiro集成Spring時web.xml中配置詳解

1、web.xml 中的 shiroFilter

  • Shiro提供了與Web 集成的支持,其通過一個ShiroFilter入口來攔截需要安全控制的URL,然後進行相應的控制

  • ShiroFilter類似於如Strut2/SpringMVC這種web 框架的前端控制器,是安全控制的入口點,其負責讀取配置(如ini配置文件),然後判斷URL 是否需要登錄/權限等工作。

	<!-- filter-name匹配Spring 的配置文件:applicationContext.xml中的“shiroFilter”bean的名稱 --> 	
	<filter>
        <filter-name>shiroFilter</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
        <init-param>
            <param-name>targetFilterLifecycle</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>

    <filter-mapping>
        <filter-name>shiroFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
	

DelegatingFilterProxy 作用是自動到 Spring 容器查找名字爲 shiroFilter(filter-name中的名字)的bean
並把所有Filter的操作委託給它。然後將ShiroFilter 配置到spring容器即可:

<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
	<property name="securityManager" ref="securityManager"/>
	<!—忽略其他,詳見與Spring 集成部分-->
</bean>

shiroFilter配置注意:

  • DelegatingFilterProxy 實際上是 Filter 的一個代理對象. 默認情況下, Spring 會到 IOC 容器中查找和
    <filter-name> 對應的 filter bean。也可以通過 ·targetBeanName· 的初始化參數來配置 filter bean 的 id。
  • Sping.xml 配置文件中id 必須和 web.xml 文件中配置的 DelegatingFilterProxy 的<filter-name> 一致.
    若不一致, 則會拋出: NoSuchBeanDefinitionException。 因爲 Shiro 會來 IOC 容器中查找和 <filter-name>名字對應的 filter bean.

Shiro集成 Webweb.xml 中配置詳解

1、web.xml 中的 shiroFilter

  • Shiro 1.2及以後版本的配置方式

從 Shiro 1.2 開始引入了Environment/WebEnvironment的概念,即由它們的實現提供相應的SecurityManager及其相應的依賴。ShiroFilter會自動找到Environment然後獲取相應的依賴。

	 <!--
    	從Shiro 1.2開始引入了Environment/WebEnvironment的概念,即由它們的實現提供相應的SecurityManager及其相應的依賴。
    	ShiroFilter會自動找到Environment然後獲取相應的依賴。
    	底層:返回反射創建shiroEnvironmentClass對象,調用其init方法.
    		shiroEnvironmentClass中的init方法創建SecurityManager實例並綁定到當前運行環境
     -->
    <listener>
        <listener-class>org.apache.shiro.web.env.EnvironmentLoaderListener</listener-class>
    </listener>


    <filter>
        <filter-name>shiroFilter</filter-name>
        <filter-class>org.apache.shiro.web.servlet.ShiroFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>shiroFilter</filter-name>
        <!-- 攔截所有的請求 -->
        <url-pattern>/*</url-pattern>
    </filter-mapping>

通 過EnvironmentLoaderListener 來創建相應的WebEnvironment , 並自動綁定到
ServletContext,默認使用IniWebEnvironment實現。

可以通過如下配置修改默認實現及其加載的配置文件位置:

<!--初始化securityManager對象所需要的環境配置-->
    <context-param>
        <param-name>shiroEnvironmentClass</param-name>
        <param-value>org.apache.shiro.web.env.IniWebEnvironment</param-value>
    </context-param>
    <context-param>
        <param-name>shiroConfigLocations</param-name>
        <param-value>classpath:shiro.ini</param-value>
    </context-param>

shiroConfigLocations 默認是“/WEB-INF/shiro.ini”,IniWebEnvironment 默認是先從
/WEB-INF/shiro.ini加載,如果沒有就默認加載classpath:shiro.ini。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章