spring集成shiro做用户主证及资源授权
1 FormAuthenticationFilter过滤器来接收数据及验证码处理。
<!-- 基于Form表单的身份验证过滤器,为了控制验证码 -->
<bean id="authcFilter" class="com.shiro.RcFormAuthenticationFilter">
<!-- from表达提交参数的属性命名 -->
<property name="usernameParam" value="userName" />
<property name="passwordParam" value="passWord" />
<property name="rememberMeParam" value="rememberMe" />
<property name="loginUrl" value="/loginController/test" />
<property name="failureKeyAttribute" value="shiroLoginFailure" />
</bean>
2. 自定义Realm继承AuthorizingRealm,此类有两个核心方法doGetAuthenticationInfo(认证),doGetAuthorizationInfo(授权),未登陆用户shiro会自动调doGetAuthorizationInfo方法进行身份认证。shiro提供了加密配实现HashedCredentialsMatcher,HashedCredentialsMatcher可设置加密算法及加密次数。
代码中密码为123456
<!-- 凭证匹配器,做登录次数验证,和密码匹配验证 -->
<bean id="credentialsMatcher" class="com.shiro.RetryLimitHashedCredentialsMatcher">
<!-- 登录次数放入缓存 -->
<constructor-arg ref="cacheManager" />
<property name="hashAlgorithmName" value="md5" />
<!-- md5加密次数 -->
<property name="hashIterations" value="2" />
<property name="storedCredentialsHexEncoded" value="true" />
</bean>
<!-- 自定义的user Realm实现 -->
<bean id="userRealm" class="com.shiro.OperatorRealm">
<property name="credentialsMatcher" ref="credentialsMatcher" />
<!-- 启用缓存,默认false; -->
<property name="cachingEnabled" value="false" />
<!-- 启用身份验证缓存,即缓存AuthenticationInfo信息,默认false; -->
<!-- <property name="authenticationCachingEnabled" value="true"/> -->
<!-- 缓存AuthenticationInfo信息的缓存名称; -->
<!-- <property name="authenticationCacheName" value="authenticationCache"/> -->
<!-- 启用授权缓存,即缓存AuthorizationInfo信息,默认false; -->
<property name="authorizationCachingEnabled" value="true"/>
<!-- 缓存AuthorizationInfo信息的缓存名称; -->
<property name="authorizationCacheName" value="authorizationCache"/>
</bean>
3 安全管理器 是必须注入的,所有的过滤都被它管理着
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<property name="realm" ref="userRealm" />
</bean>
<!-- 相当于调用SecurityUtils.setSecurityManager(securityManager) -->
<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="staticMethod" value="org.apache.shiro.SecurityUtils.setSecurityManager" />
<property name="arguments" ref="securityManager" />
</bean>
4 shiro 主过虑器
<!-- Shiro主过滤器本身功能十分强大,其强大之处就在于它支持任何基于URL路径表达式的、自定义的过滤器的执行 -->
<!-- Web应用中,Shiro可控制的Web请求必须经过Shiro主过滤器的拦截,Shiro对基于Spring的Web应用提供了完美的支持 -->
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<property name="securityManager" ref="securityManager" /> <!-- 安全管理器 :必须注入-->
<!-- 登录controller的mapper地址 -->
<property name="loginUrl" value="/loginController/test" /><!-- 如果不写的话,默认去找login.jsp页面 -->
<!-- <property name="successUrl" value="/loginController"/>登陆成功跳转 -->
<property name="unauthorizedUrl" value="unauthorized.jsp" /> <!-- 认证不通过访问的页面 -->
<property name="filters">
<util:map>
<entry key="authc" value-ref="authcFilter" />
<!-- <entry key="rcCaptchaValidate" value-ref="rcCaptchaValidateFilter" /> -->
</util:map>
</property>
<property name="filterChainDefinitions">
<value>
<!-- Shiro的Web过滤器 -->
/rcCaptcha* = anon <!-- anon过滤器表示没有权限也可访问 -->
/unauthorized.jsp = anon
/common/** = anon
/dwz/** =anon
/favicon.ico=anon
/login = authc <!-- rcCaptchaValidate, 认证登录后才可访问。authc-->
/logout = logout <!-- 表示访问logout时就直接访问logout这个过滤器,即直接退出 -->
/** = authc
</value>
</property>
</bean>
5. 生命周期处理器 -
<!-- Shiro生命周期处理器 -->
<bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor" />
6 需在web.xml中加入shiro过滤器
<!-- shiro 安全过滤器 -->
<filter>
<filter-name>shiroFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
<async-supported>true</async-supported>
<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>
项目地址http://download.csdn.net/download/yjiwliuxin888/9969063