在Shiro之前的版本中,密码加密一般采用如下代码:
String digestString = new Sha256Hash(password, salt, numIterations).toBase64();
密码比对一般采用HashedCredentialsMatcher或Sha256CredentialsMatcher等相关比对类,在新版1.2中,增添了一项重要的功能就是密码服务,使得加密和比对更加方便。
比如:
加密就只需要密码这个参数PasswordService svc = new DefaultPasswordService();
svc.encryptPassword(password);
比对就用如下语句:encrypted是密文
svc.passwordsMatch(password, encrypted);
看到上述代码,一个感觉就是:程序逻辑很清晰。
同样的,在1.2中,同样可以通过密码服务配置,实现与jdbc中的密码密文进行比对。直接上代码了:
以下是shiro.ini
passwordService = org.apache.shiro.authc.credential.DefaultPasswordService
passwordMatcher = com.helloweb.shm.PasswordMatcherEx
passwordMatcher.passwordService = $passwordService
ds = com.mysql.jdbc.jdbc2.o