最近公司在做搜尋,要求下拉提示使用阿里的下拉提示,其他都還好說,就是這個簽名機制,弄了一下午,也是遇到了坑,特此記錄。
阿里簽名機制文件
//簽名
public
static
final string algorithm = "hmacsha1";
public
static
final string encoding = "utf-8";
//分隔符
public
static
final string separator = "&";
/*** 請求引數
*/public okrequestparams getrequestparams()
/*** 根據請求引數獲得簽名
*@param urlparams
*@return
*/private string getsignature(okrequestparams urlparams) );
arrays.sort(sortedkeys);
// 生成stringtosign字串
stringbuilder stringtosign = new stringbuilder();
stringbuilder canonicalizedquerystring = new stringbuilder();
for (string key : sortedkeys)
//對canonicalizedquerystring進行編碼
//用stringtosign計算簽名hmac值
string key = secret + separator;
mac mac = mac.getinstance(algorithm);
mac.init(new secretkeyspec(key.getbytes(encoding), algorithm));
byte signdata = mac.dofinal(stringtosign.tostring().getbytes(encoding));
//按照base64編碼規則把上面的hmac值編碼成字串
signature = base64.encodetostring(signdata, base64.default);
} catch (invalidkeyexception e) catch (unsupportedencodingexception e) catch (nosuchalgorithmexception e) catch (illegalstateexception e)
return signature;
}
/**
* rfc3986編碼規則:編碼後的字串中加號(+)替換成%20、星號(*)替換成%2a、%7e替換回波浪號(~)即可
*@param value
*@return
*@throws unsupportedencodingexception
*/private string percentencode(string value) throws unsupportedencodingexception
/**
* 本地時間轉utc時間
*@param localtime
*@return
*/public
static string local2utc(long localtime)
/**
* 獲取count個隨機數
*@param count
*@return
*/public
static string getnewrandomstr(int count)
return sb.tostring();
}
說說坑,第乙個坑就是getsignature(params)這裡沒有去空格,導致編碼多出個空格的編碼;
//簽名:需要以上引數共同參與才能得出簽名
params.put("signature", getsignature(params).trim());
第二個坑就是對簽名多進行了一次編碼,文件中說
注意: 得到的簽名值在作為最後的請求引數值提交給opensearch伺服器的時候,要和其他引數一樣,按照rfc3986的規則進行url編碼)
好吧,怪我自己沒有注意到我們的網路請求框架已經對請求引數進行了編碼,結果我自己又多編碼了一次。 Vue 百度搜尋下拉提示框
一 vue.js框架 1 乙個mvvm框架 2 vue的好處 簡單,易上手,個易維護,更適合移動端,不足 不相容低版本ie 3 指令 v model v for 這些都稱為指令 4 事件 事件已v on 開頭,縮寫是 click 一條原本的介面 去掉多餘的 wd a這個是使用者搜尋的內容,a在下文被...
vue實現百度搜尋下拉提示功能例項
這段 用到vuejs和vue resouece。實現對接智慧型提示介面,並通過上下鍵選擇提示項,按enter進行搜尋 程式設計客棧 lang en document 效果圖 這個ajax請求沒有做節流,很多時候需要限制ajax頻繁請求,可以小改一下 document 程式設計客棧 model tt ...
angularjs 下拉搜尋框
前兩天研究了一下angularjs,不得不說angularjs的mvc思想還是很強大的。對應偏重於資料處理的專案還是非常有優勢的。寫了個搜尋下拉框的demo,注釋在裡邊都寫了,就不再這羅嗦了。1文字框做輸入,並監控器change事件,在change事件中獲取輸入值,獲取的輸入值與選擇框中的各個下拉項...