然后在 **Realm类里 加个
/** * 设定Password校验. */ @PostConstruct public void initCredentialsMatcher() {//该句作用是重写shiro的密码验证,让shiro用我自己的验证 setCredentialsMatcher(new CustomCredentialsMatcher()); }
package com.abel.shiro.security;
import java.security.MessageDigest;
import org.apache.shiro.authc.AuthenticationInfo; import org.apache.shiro.authc.AuthenticationToken; import org.apache.shiro.authc.credential.HashedCredentialsMatcher;public class CustomCredentialsMatcher extends HashedCredentialsMatcher{
public static void main(String[] args) { string2MD5(1); } public boolean doCredentialsMatch(AuthenticationToken token, AuthenticationInfo info) { String s = ""; for (char c:(char[])token.getCredentials()) { s=s+c; } Object tokenCredentials = encrypt(s); String pwd = (String)info.getCredentials(); return equals(tokenCredentials, pwd); } private Object encrypt(Object credentials) { try { credentials = string2MD5(credentials); return credentials; } catch (Exception e) { System.err.println("DES算法,加密数据出错!"); e.printStackTrace(); } return null; } public static String string2MD5(Object obj){ String inStr = obj.toString(); MessageDigest md5 = null; try{ md5 = MessageDigest.getInstance("MD5"); }catch (Exception e){ System.out.println(e.toString()); e.printStackTrace(); return ""; } char[] charArray = inStr.toCharArray(); byte[] byteArray = new byte[charArray.length]; for (int i = 0; i < charArray.length; i++) byteArray[i] = (byte) charArray[i]; byte[] md5Bytes = md5.digest(byteArray); StringBuffer hexValue = new StringBuffer(); for (int i = 0; i < md5Bytes.length; i++){ int val = ((int) md5Bytes[i]) & 0xff; if (val < 16) hexValue.append("0"); hexValue.append(Integer.toHexString(val)); } return hexValue.toString(); }}