shiro自定义验证密码的方式

1.更改shiro安全管理配置

    <!-- 定义Shiro安全管理配置 -->  
    <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">  
	<property name="realm" ref="systemAuthorizingRealm" />
        <property name="realm" ref="userRealm" />    
        <property name="sessionManager" ref="sessionManager" />  
        <property name="cacheManager" ref="shiroCacheManager" />  
    </bean>  
      
    <!-- 3.1 直接配置继承了org.apache.shiro.realm.AuthorizingRealm的bean -->  
     <bean id="userRealm" class="com.thinkgem.jeesite.modules.sys.security.SystemAuthorizingRealm">   
        <!-- 配置密码匹配器 -->   
       <property name="credentialsMatcher" ref="credentialsMatcher"/>     
    </bean>  
      
     <!-- 凭证匹配器 -->  
    <bean id="credentialsMatcher" class="com.thinkgem.jeesite.modules.sys.security.CustomCredentialsMatcher">  
    </bean>   

2.自定义密码验证

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

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

    /** 
     * 设定密码校验的Hash算法与迭代次数 
     */  
//  @PostConstruct  
//  public void initCredentialsMatcher() {  
//      HashedCredentialsMatcher matcher = new HashedCredentialsMatcher(SystemService.HASH_ALGORITHM);  
//      matcher.setHashIterations(SystemService.HASH_INTERATIONS);  
//      setCredentialsMatcher(matcher);  
//    //  setCredentialsMatcher(new CustomCredentialsMatcher());    
//  } 
  如果不注释就是用这种方式也可以。
    /** 
     * 设定密码校验的Hash算法与迭代次数 
     */ 
    @PostConstruct  
    public void initCredentialsMatcher() {    
       setCredentialsMatcher(new CustomCredentialsMatcher());    
    } 
搞定!


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值