实现一个简单的token认证

来源:互联网 发布:数据共享交换 编辑:程序博客网 时间:2024/06/06 08:47

1.对前台的请求地址做处理,对请求参数进行排序后,拼入请求地址.

2.在排序后的参数结尾拼入约定的key,进行MD5计算得出一个token拼入请求地址,发送请求.

3.请求的接收方得到地址,截取出所传的参数(去掉尾部的token)在结尾拼入约定的key,进行MD5计算得出token与传过来的token进行比较.

4.下面给出关键部分的代码

public class HttpUtils{

private static String keyStr = "keyTest";//双方约定的key

public static String createNewUrl(String oldUrl){

int index = oldUrl.indexOf("?");//返回“?”的索引

String url = oldUrl.subString(0,index+1);//截取请求路径+"?"

String addVersionStr = urlParam.substring(index + 1, urlParam.length());//截取请求参数

String[] strArr = addVersionStr.split("&");//将请求参数分隔成数组

Arrays.sort(strArr);//对请求参数数组进行排序

StringBuffer strBuffer = new StringBuffer();

//将请求参数进行重新拼接

for (String str : strArr) {
            strBuffer.append(str + "&");
        }

String result = strBuffer.substring(0, strBuffer.length() - 1);//得到新的请求参数字符串

return url + result + "&token=" + md5(result + "&" + keyStr);//对请求参数进行MD5计算,得出token值一起拼到请求路径后面

}

 /**
      * MD5加密
      *
      * @param string
      */
    public static String md5(String string) {
        byte[] hash;
        try {
            hash = MessageDigest.getInstance("MD5").digest(string.getBytes("UTF-8"));
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException("MD5 should be supported?", e);
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException("UTF-8 should be supported?", e);
        }
        StringBuilder hex = new StringBuilder(hash.length * 2);
        for (byte b : hash) {
            if ((b & 0xFF) < 0x10)
                hex.append("0");
            hex.append(Integer.toHexString(b & 0xFF));
        }
        return hex.toString();
    }

接受方的核心代码基本如上,这里不做累述.

}

0 0
原创粉丝点击