spring+shiro

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值