shiro自定义密码匹配验证,密码加密验证

shiro自定义密码匹配验证,密码加密验证。

1.更改shiro安全管理配置

 

[html] view plain copy

 

  1. <!-- 定义Shiro安全管理配置 -->  
  2.     <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">  
  3. <!--         <property name="realm" ref="systemAuthorizingRealm" />  -->  
  4.         <property name="realm" ref="userRealm" />    
  5.         <property name="sessionManager" ref="sessionManager" />  
  6.         <property name="cacheManager" ref="shiroCacheManager" />  
  7.     </bean>  
  8.       
  9.     <!-- 3.1 直接配置继承了org.apache.shiro.realm.AuthorizingRealm的bean -->  
  10.      <bean id="userRealm" class="com.thinkgem.jeesite.modules.sys.security.SystemAuthorizingRealm">   
  11.         <!-- 配置密码匹配器 -->   
  12.        <property name="credentialsMatcher" ref="credentialsMatcher"/>     
  13.     </bean>  
  14.       
  15.      <!-- 凭证匹配器 -->  
  16.     <bean id="credentialsMatcher" class="com.thinkgem.jeesite.modules.sys.security.CustomCredentialsMatcher">  
  17.     </bean>   

19162740_tY5w.png


 

 

<property name="realm" ref="systemAuthorizingRealm" /> ,spring自动注入。

 

2.自定义密码验证

 

[java] view plain copy

 

  1. /** 
  2.  * Description: 告诉shiro如何验证加密密码,通过SimpleCredentialsMatcher或HashedCredentialsMatcher 
  3.  * @Author: wjl 
  4.  * @Create Date: 2017-3-14 
  5.  */  
  6.   
  7. public class CustomCredentialsMatcher extends SimpleCredentialsMatcher {  
  8.       
  9.     @Override   
  10.     public boolean doCredentialsMatch(AuthenticationToken authcToken, AuthenticationInfo info) {    
  11.              
  12.     UsernamePasswordToken token = (UsernamePasswordToken) authcToken;   
  13.     Object accountCredentials = getCredentials(info);  
  14. //  String pwd =encrypt32(String.valueOf(token.getPassword()));//md5 32位加密  
  15.     String pwdType =String.valueOf(token.getPassword());// 判断一下密码是否是用户输入的,还是JCIS传过来的  
  16.     if(pwdType.length() == 32){  
  17.     return equals(pwdType, accountCredentials); //密码长度=32位,说明是md5加密过,是从xx传进来的 32位加密。  
  18.     }   
  19.     String pwdUser =encrypt32(String.valueOf(token.getPassword()));//不等于32 是用户输入的密码。 如果用户输入的密码长度位32那么里面会有一个bug  
  20.     return equals(pwdUser, accountCredentials);  
  21.     //将密码加密与系统加密后的密码校验,内容一致就返回true,不一致就返回false   
  22.     //return super.doCredentialsMatch(token, info) ;  
  23.     }  
  24.       

3.更改密码验证,注释掉自带的。

[java] view plain copy

 

  1.     /** 
  2.      * 设定密码校验的Hash算法与迭代次数 
  3.      */  
  4. //  @PostConstruct  
  5. //  public void initCredentialsMatcher() {  
  6. //      HashedCredentialsMatcher matcher = new HashedCredentialsMatcher(SystemService.HASH_ALGORITHM);  
  7. //      matcher.setHashIterations(SystemService.HASH_INTERATIONS);  
  8. //      setCredentialsMatcher(matcher);  
  9. //    //  setCredentialsMatcher(new CustomCredentialsMatcher());    
  10. //  }  


 如果不注释就是用这种方式也可以。

 

[javascript] view plain copy

 

  1. /** 
  2.      * 设定密码校验的Hash算法与迭代次数 
  3.      */  
  4.     @PostConstruct  
  5.     public void initCredentialsMatcher() {    
  6.        setCredentialsMatcher(new CustomCredentialsMatcher());    
  7.     }  


 

 

 

转载于:https://my.oschina.net/u/3409039/blog/898150

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值