shiroとspringは集積します

5215 ワード

Shroアプリケーションは、一例のSecurityManagerのインスタンスを持つアプリケーションが必要です.これは静的な単一の例ではないが、静的な単一の例であるかどうかにかかわらず、アプリケーションが使用できる例だけが必要である.
   Springアプリケーションでアプリケーション単一例SecurityManagerを有効にする一番簡単な設定:
<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
	<property name="staticMethod"value="org.apache.shiro.SecurityUtils.setSecurityManager" />
	<property name="arguments" ref="securityManager" />
</bean>
<!--       -->  
<bean id="securityManager" class="org.apache.shiro.mgt.DefaultSecurityManager">
	<property name="realm" ref="myRealm" />
</bean>
<bean id="myRealm" class="org.apache.shiro.realm.text.IniRealm">
	<property name="resourcePath" value="D:/wp/src/TestShiro.ini"></property>
</bean> 
注:セキュリティマネージャは、ウェブ環境用のDefault WebSecurityManagerを使用します.
 
  
 

在web.xml中:

<!-- DelegatingFilterProxy    Spring        shiroFilter bean  filter       -->
<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という名前のbeanを探して、filterの要求をそれに渡して処理します.
   springのappication Contect.xmlファイルでは、webサポートを定義するSecurityManagerと'shiro Filter'beanがweb.xmlに引用されます.
<!-- Shiro Web    ;shiroFilter:    ShiroFilterFactoryBean   ShiroFilter   ;filters            , ini    [filters]  ;filterChainDefinitions    url filter   , ini    [urls]  。-->  
	<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
		<property name="securityManager" ref="securityManager" />
		<!--        ,              -->
		<property name="loginUrl" value="/login.jsp" />
		<property name="unauthorizedUrl" value="/unauthorized.jsp" />
		<!-- filters       ,         filterChainDefinitions      filter。      filter 
			   shiro    ,         filter -->
		<property name="filters">
			<util:map>
				<!--   :  filter shiro    ,      filter        -->
				<entry key="authc" value-ref="formAuthenticationFilter" />
				<!--   :  filter      filter -->
				<entry key="jCaptchaValidate" value-ref="jCaptchaValidateFilter" />
			</util:map>
		</property>
		<property name="filterChainDefinitions">
			<value>
				<!--     urls,    url       filter -->
				/jcaptcha* = anon
				/logout = logout
				/login = jCaptchaValidate,authc
			</value>
		</property>
	</bean>
注:ShroFilter:ここでShroFilter FactoryBeanを使ってShroFilterフィルタを作成します.filters属性は、自分のフィルタ、すなわちini構成における「filters」部分を定義するために使用される.filterChanDefinitionsは、urlとfilterの関係、すなわちini構成における「urls」の部分を宣言するために使用されます.
<!--     form       -->
<bean id="formAuthenticationFilter" class="cn.javass.CustomFormAuthenticationFilter">
		......  
</bean>
<!--     SecurityManger、Realms  -->
<bean id="securityManager" class="org.apache.shiro.mgt.DefaultSecurityManager">
	<property name="realm" ref="myRealm" />
</bean>
<bean id="myRealm" class="org.apache.shiro.realm.text.IniRealm">
	<property name="resourcePath" value="D:/wp/src/TestShiro.ini"></property>
</bean>
<bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"depends-on="lifecycleBeanPo      stProcessor">
	<property name="proxyTargetClass" value="true" />
</bean>
<bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">
	<property name="securityManager" ref="securityManager" />
</bean>
注:フォームフォームに基づく認証フィルタです.ここで自分のFilter bean定義を追加できます.
<!--      -->
<bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"
	depends-on="lifecycleBeanPostProcessor">
	<property name="proxyTargetClass" value="true" />
</bean>
<bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttri
buteSourceAdvisor">
	<property name="securityManager" ref="securityManager" />
</bean>
まとめ:shiroとspringは統合して、springはshiroの各管理種類とフィルタを管理して、容器は管理して、応用は更に便利です.