博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
shiro-自定义的Realm中使用自己的密码验证规则
阅读量:7095 次
发布时间:2019-06-28

本文共 1773 字,大约阅读时间需要 5 分钟。

hot3.png

然后在 **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();  
  
    }  

}

 

转载于:https://my.oschina.net/u/2351011/blog/885608

你可能感兴趣的文章
Direct2D (36) : RenderTarget.DrawText() 与 IDWriteTextFormat
查看>>
一句话判断网络是否联通
查看>>
再学 GDI+[85]: TGPImage(5) - RotateFlip - 旋转与镜像
查看>>
Delphi 与 DirectX 之 DelphiX(42): TDIB.GaussianBlur();
查看>>
获取时间戳 和 备用ajax案例
查看>>
rsyslog+mysql+loganalyzer构建日志服务器
查看>>
linux文件最大连接数问题---bash:ulimit:open files:cannot modify limit:Operation not permitted...
查看>>
使用exp进行SQL报错注入
查看>>
iKcamp新书上市《Koa与Node.js开发实战》
查看>>
2015年十大测试工具你认识几个
查看>>
基于订阅的服务通讯架构体系
查看>>
grpc server线程退出
查看>>
JMX在Tomcat中的应用
查看>>
appache的日志和关闭错误日志的方法
查看>>
Python3 破冰
查看>>
squid常用命令集
查看>>
掰弯Wicket: 让wicketstuff-restannotations与wicket-spri
查看>>
emacs 下载地址
查看>>
mysql 表导出/导入
查看>>
Java垃圾回收简介
查看>>