上一篇文章讲过,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判断密码是否正确放行。