前言
在爲移動端做API接口時,Java服務器端對接口一般需要做兩種處理。
1.對請求的接口在interceptor 做authorize鑑權
2.對請求過來的參數進行加密校驗,防止參數在傳遞過程中被篡改。
鑑權
1.session
2.cookie
3.oauth2.0
對於這三種方式,以後細講下。在此不再多說。
加密
對於傳輸過程中防止參數被篡改,可以使用HTTPS來有效的增強安全性。
對於重要的數據傳輸,除了需要https來認證,還需要對傳入參數進行加密解密的校驗,達到雙層保證。
一般處理思路:
將傳入參數組合成字符串,然後做加密,得到加密的token值;調用接口時,同時將此值傳入。服務器拿到此值,根據對應的加密方式解密比對。
來驗證傳入值的完整性。
關於加密方式,這裏不再贅述。可根據接口的重要程度來選擇。
如哈希算法md5、對稱加密的DES、非對稱的RSA或者一些加鹽加密。
以md5爲例,使用Java的SortedMap,對請求參數進行MD5,並傳入。
SortedMap<Object, Object> requestParams = new TreeMap<Object, Object>();
requestParams.put("version", "1");
requestParams.put("userName", "123456");
requestParams.put("password", "123456");
StringBuffer requestParamsStringBuffer = new StringBuffer();
System.out.println("排序之後的Key Value:");
for (Map.Entry<Object, Object> entry : requestParams.entrySet()) {
System.out.println(entry.getKey() + " " + entry.getValue());
requestParamsStringBuffer.append(entry.getKey() + "" + entry.getValue());
}
System.out.println(requestParamsStringBuffer.toString());
String md5="";
try {
md5 = MD5.getMd5(requestParamsStringBuffer.toString());
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
System.out.println("request params md5加密後:" + md5);
//request params md5加密後:d42fdf5e525386c648b1303fa2aa5aab
//當我們傳入傳入參數時,將token=d42fdf5e525386c648b1303fa2aa5aab 與其他參數平級傳入,來防止請求被篡改
接下來,我們在接口文檔中對token進行解釋,並要求移動端此過程調用即可。
bingo!