shiro自定义验证密码

发布时间:2018-07-04 浏览次数:4117 文章来源:个人博客

上一篇文章讲过,shiro通过简单配置,就能实现验证,但是如果想要自己验证密码呢?怎么实现?

其实我们可以找到我们自定义的:(一切文件命名都基于上篇文章)

ShiroConfig文件中,找到

@Bean
public MyShiroRealm myShiroRealm(){
    MyShiroRealm myShiroRealm = new MyShiroRealm();
    myShiroRealm.setCredentialsMatcher(hashedCredentialsMatcher());
    return myShiroRealm;
}

这段代码,这代码中,myShiroRealm.setCredentialsMatcher(hashedCredentialsMatcher());

即在调用认证密码的函数,所以我们可以在这边重新这样写。

@Bean
public MyShiroRealm myShiroRealm(CredentialsMatcher matcher){
    //CredentialsMatcher是新定义的类
    MyShiroRealm myShiroRealm = new MyShiroRealm();
    myShiroRealm.setCredentialsMatcher(matcher);
    return myShiroRealm;

}

我们自定义一个CredentialsMatcher这个类,类中的代码如下:

package com.syiti.bzf.web.admin.config;

import com.syiti.bzf.util.support.CryptoUtil;
import org.apache.shiro.authc.AuthenticationInfo;
import org.apache.shiro.authc.AuthenticationToken;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.authc.credential.SimpleCredentialsMatcher;

public class CredentialsMatcher extends SimpleCredentialsMatcher{
   @Override
    public boolean doCredentialsMatch(AuthenticationToken token, AuthenticationInfo info) {
        UsernamePasswordToken utoken = (UsernamePasswordToken) token;
        //获得用户输入的密码:(可以采用加盐(salt)的方式去检验)
        String inPassword = new String(utoken.getPassword());
         //简单加密:密码做MD5加密
        String encryptPassword = CryptoUtil.getMD5(inPassword);  
        //获得数据库中的密码
        String dbPassword = (String) info.getCredentials();
        //进行密码的比对
        return this.equals(encryptPassword, dbPassword);
    }
}

根据return 回来的结果,shiro判断密码是否正确放行。

key-word
spring boot shiro 自定义密码验证