volley封裝header頭信息青灼,利用頭信息區(qū)分和校驗用戶權(quán)限

小追兵專欄

在app后臺設(shè)計之初暴心,為了數(shù)據(jù)的安全,會設(shè)計一套檢驗系統(tǒng)杂拨。
只有通過這個校驗的請求才被認為是自己app的合法訪問专普。

怎樣確保每次的數(shù)據(jù)請求都是合法的呢?
我們在數(shù)據(jù)訪問的時候增加數(shù)據(jù)請求頭弹沽。也就是網(wǎng)絡(luò)訪問的header檀夹。

先看下面代碼,我們可以通過繼承復(fù)寫volley的JsonObjectRequest類策橘,來看看我們的實現(xiàn)類SignJsonRequest的具體做法:

header代碼封裝 :

package com.xxxx.xxxx.xxx;

import java.util.HashMap;
import java.util.Map;

import org.json.JSONObject;

import biz.lemeng.zhimianbao.Config;
import biz.lemeng.zhimianbao.app.MyApplication;
import biz.lemeng.zhimianbao.model.LoginHelper;
import biz.lemeng.zhimianbao.utils.StringUtils;

import com.android.volley.AuthFailureError;
import com.android.volley.Response.ErrorListener;
import com.android.volley.Response.Listener;
import com.android.volley.toolbox.JsonObjectRequest;

public class SignJsonRequest extends JsonObjectRequest {

    public SignJsonRequest(String url, JSONObject jsonRequest,
            Listener<JSONObject> listener, ErrorListener errorListener) {
        super(url, jsonRequest, listener, errorListener);
    }

    public SignJsonRequest(int method, String url, JSONObject jsonRequest,
            Listener<JSONObject> listener, ErrorListener errorListener) {
        super(method, url, jsonRequest, listener, errorListener);
    }

    // 重寫頭信息炸渡,為了服務(wù)器授權(quán)
    @Override
    public Map<String, String> getHeaders() throws AuthFailureError {

        HashMap<String, String> headers = new HashMap<String, String>();
        headers.put(Config.HEADER_KEY, StringUtils.getSign());
        
        //如果已經(jīng)登錄,追加頭信息
        if(LoginHelper.isLogin())
        {
            headers.put(Config.HEADER_LOGIN_KEY, MyApplication.gUserID+","+MyApplication.gUserToken);
        }
        
        return headers;
    }
}

可以看出我們實現(xiàn)了兩個構(gòu)造函數(shù)丽已,還有復(fù)寫了getHeaders()這個方法蚌堵。

  • 代碼很簡單,headers是我們new出一個HashMap集合促脉;

  • 其中Config.HEADER_KEY是我們和服務(wù)器定的一個字符串: public static final String HEADER_KEY ="x-xxx****-request-sign";辰斋;StringUtils.getSign()是我們一個工具類策州,返回的字符串是 MD5(“時間戳”+“APPKEY”)+“,”+時間戳宫仗;實例代碼如下:String sign = getMD5(timestamp+Config.ZHIMIANBAO_APPKEY)+","+timestamp;其中apply是一個隨機的字符串够挂,只要你和服務(wù)器商量好,寫入文檔中藕夫,這就是你們兩個人知道到密碼孽糖,別人是不知道的∫阒可以看出办悟,我們吧獲取的一個系統(tǒng)時間作為 時間戳 然后和我們的 APPKEY 拼接后,通過MD5后滩褥,得到一個唯一的字符串病蛉,這里我們假設(shè)這個字符串是‘a(chǎn)12345bcd’和我們的時間戳再拼接為新的字符串:得到一個新的字符串:‘a(chǎn)12345bcd,4221245’瑰煎,這就是我們工具類返回的結(jié)果铺然。

header的作用:安全校驗,權(quán)限校驗

  • 我們通過volley請求服務(wù)器的時候酒甸,服務(wù)器會得到我們velloy的頭信息魄健。即得到里a12345bcd,4221245插勤,服務(wù)器會通過“沽瘦,”把拆分為兩部分:‘a(chǎn)12345bcd’和‘4221245’,拿著4221245’這個時間戳农尖,也做和上面通用的處理:MD5(“時間戳”+“APPKEY”)析恋,會得到一個新的字符串,如果你們用的是同一個APPKEY,和通一個“時間戳”卤橄,服務(wù)器也會得到相同的字符串‘a(chǎn)12345bcd’绿满,你請求頭里的,和服務(wù)器自己MD5的到的是相同的窟扑,說明請求是合法的喇颁,也就是自己的應(yīng)用請求數(shù)據(jù)。加入請求在別修改嚎货,或者是第三方的程序修改橘霎,他們是不知道APPKEY的,所以得不到MD5以后殖属,和服務(wù)器的MD5后的字符串不同姐叁,服務(wù)器一比較,就知道是不合法的請求。
  • 同理:我們在限定登錄用戶外潜,和非登錄用戶訪問權(quán)限的時候原环,也是給服務(wù)器發(fā)送請求頭。如果登錄了处窥,volley的頭信息是已登錄的頭信息嘱吗,如果沒有登錄,volley的頭信息是非登錄頭信息滔驾,服務(wù)器可以根據(jù)頭信息谒麦,返回不同的數(shù)據(jù)。

最后:有需要Shadowsock翻墻賬號可以私聊哆致。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末绕德,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子摊阀,更是在濱河造成了極大的恐慌耻蛇,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,332評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件驹溃,死亡現(xiàn)場離奇詭異城丧,居然都是意外死亡延曙,警方通過查閱死者的電腦和手機豌鹤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,508評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來枝缔,“玉大人布疙,你說我怎么就攤上這事≡感叮” “怎么了灵临?”我有些...
    開封第一講書人閱讀 157,812評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長趴荸。 經(jīng)常有香客問我儒溉,道長,這世上最難降的妖魔是什么发钝? 我笑而不...
    開封第一講書人閱讀 56,607評論 1 284
  • 正文 為了忘掉前任顿涣,我火速辦了婚禮,結(jié)果婚禮上酝豪,老公的妹妹穿的比我還像新娘涛碑。我一直安慰自己,他們只是感情好孵淘,可當我...
    茶點故事閱讀 65,728評論 6 386
  • 文/花漫 我一把揭開白布蒲障。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪揉阎。 梳的紋絲不亂的頭發(fā)上庄撮,一...
    開封第一講書人閱讀 49,919評論 1 290
  • 那天,我揣著相機與錄音毙籽,去河邊找鬼重窟。 笑死,一個胖子當著我的面吹牛惧财,可吹牛的內(nèi)容都是我干的巡扇。 我是一名探鬼主播,決...
    沈念sama閱讀 39,071評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼垮衷,長吁一口氣:“原來是場噩夢啊……” “哼厅翔!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起搀突,我...
    開封第一講書人閱讀 37,802評論 0 268
  • 序言:老撾萬榮一對情侶失蹤刀闷,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后仰迁,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體甸昏,經(jīng)...
    沈念sama閱讀 44,256評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,576評論 2 327
  • 正文 我和宋清朗相戀三年徐许,在試婚紗的時候發(fā)現(xiàn)自己被綠了施蜜。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,712評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡雌隅,死狀恐怖翻默,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情恰起,我是刑警寧澤修械,帶...
    沈念sama閱讀 34,389評論 4 332
  • 正文 年R本政府宣布,位于F島的核電站检盼,受9級特大地震影響肯污,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜吨枉,卻給世界環(huán)境...
    茶點故事閱讀 40,032評論 3 316
  • 文/蒙蒙 一蹦渣、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧东羹,春花似錦剂桥、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽美尸。三九已至,卻和暖如春斟薇,著一層夾襖步出監(jiān)牢的瞬間师坎,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,026評論 1 266
  • 我被黑心中介騙來泰國打工堪滨, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留胯陋,地道東北人。 一個月前我還...
    沈念sama閱讀 46,473評論 2 360
  • 正文 我出身青樓袱箱,卻偏偏與公主長得像遏乔,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子发笔,可洞房花燭夜當晚...
    茶點故事閱讀 43,606評論 2 350

推薦閱讀更多精彩內(nèi)容