shiro与spring集成

   Shiro 应用程序需要一个具有单例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> 

注:安全管理器使用用于web环境的DefaultWebSecurityManager。


 

在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的applicationContext.xml 文件中,定义web 支持的SecurityManager
和'shiroFilter' 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>

注:shiroFilter:此处使用ShiroFilterFactoryBean来创建ShiroFilter过滤器;filters属性用于定义自己的过滤器,即ini配置中的[filters]部分;filterChainDefinitions用于声明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>

注:formAuthenticationFilter为基于Form表单的身份验证过滤器;此处可以再添加自己的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的各个管理类及过滤器,容器管理,应用更加方便。




  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值