在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>
在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的各个管理类及过滤器,容器管理,应用更加方便。