1.產(chǎn)生原因 app 應(yīng)用需要訪問服務(wù)器,,此過程中涉及到身份認(rèn)證和權(quán)限控制的問題,,如何搭建 app 和服務(wù)器之間信任的橋梁? 我們都知道,,session,、cookie 是作為瀏覽器里面的用戶和服務(wù)器之間認(rèn)證的一個(gè)方式,而app 和服務(wù)器之間的交流也是使用的 http 請(qǐng)求,,很明顯它們遇到的問題是差不多的,,但是因?yàn)?app 和瀏覽器又不完全一樣(瀏覽器可以存放 cookie),所以我們可以借鑒瀏覽器和服務(wù)器的思想來解決 app 和服務(wù)器端的 cookie,、session 的實(shí)現(xiàn)方式: cookie 的實(shí)現(xiàn)方式是瀏覽器本身支持服務(wù)器端向?yàn)g覽器寫入鍵值對(duì)數(shù)據(jù),,當(dāng)然客戶端可以禁止服務(wù)器向客戶端寫入 cookie。 session 的實(shí)現(xiàn)方式是根據(jù)客戶端的請(qǐng)求來找出當(dāng)前客戶端在服務(wù)器端的存放信息,,有兩種實(shí)現(xiàn)方式: 1.使用 cookie 寫入 jsessionid=xxx 2.使用 url 重寫(相當(dāng)于在 url 后面加入 jsessionid=xxx) 無論使用哪種實(shí)現(xiàn)方式,,最后都可以根據(jù)當(dāng)前的客戶端請(qǐng)求來確定當(dāng)前請(qǐng)求的 request 在當(dāng)前服務(wù)器中對(duì)應(yīng)的 session,所以才會(huì)有 HttpSession session = request.getSession(); 因?yàn)閟ession的確定必須從 request 里面拿到它的 jsessionid 才能取到對(duì)應(yīng)的 session,。 通過對(duì)瀏覽器和服務(wù)器交互的實(shí)現(xiàn)方式我們知道了要記錄當(dāng)前用戶的信息我們需要在瀏覽器和服務(wù)器之間進(jìn)行交互時(shí)傳遞一個(gè) jsessionid 來標(biāo)記當(dāng)前用戶,,于是我們也可以通過同樣的方式來記錄app和服務(wù)器之間的交互,,也就是 app 用戶在登錄之后我們都會(huì)給它一個(gè) token 字符串來唯一標(biāo)識(shí)當(dāng)前用戶,,這樣當(dāng)下次這個(gè)人來的時(shí)候我們就可以根據(jù) token 來取出當(dāng)前用戶的數(shù)據(jù)信息(用戶個(gè)人信息,、權(quán)限...),而且我們可以通過設(shè)定 token 的實(shí)效時(shí)間來控制用戶的在線時(shí)間 2.實(shí)現(xiàn)方式 通過上面的分析我們知道了,,我們只需要為每一個(gè)訪問用戶記錄下來一個(gè)唯一的 token 即可(不可重復(fù)),,之后我們就可以根據(jù)用戶的 token來實(shí)現(xiàn) app 端和服務(wù)器端之間的相對(duì)安全的交互了。 使用 token 是為了信息安全,,我們可以根據(jù)設(shè)置 token 的失效時(shí)間來控制用戶是不是可以對(duì)服務(wù)器進(jìn)行訪問,,而且可以控制指定用戶的訪問保證用戶數(shù)據(jù)的安全性。 |
|