国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 開(kāi)發(fā) > JS > 正文

Express + Node.js實(shí)現(xiàn)登錄攔截器的實(shí)例代碼

2024-05-06 16:38:11
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

介紹

這邊的攔截器,對(duì)應(yīng)于spring MVC中的filter,所有的http請(qǐng)求,通過(guò)攔截器處理之后才能訪問(wèn)到對(duì)應(yīng)的代碼/資源。

最典型的應(yīng)用場(chǎng)景就是實(shí)現(xiàn)訪問(wèn)權(quán)限控制,給予不同的用戶/用戶組不同的頁(yè)面和接口訪問(wèn)權(quán)限,僅能夠訪問(wèn)允許的頁(yè)面和接口。

場(chǎng)景

app.post('/login', function(request, res, next){// do something});app.post('/getData',function(request, res, next){// do something  var data="some data";  res.send({"data":data});});

如果不做任何處理,任何人發(fā)送getData的post請(qǐng)求可以直接從后臺(tái)讀取數(shù)據(jù),而不需要任何的登陸,只需要知道接口就可以。

對(duì)應(yīng)每個(gè)接口,如果在每個(gè)接口下面加上權(quán)限判斷,代碼會(huì)非常的重復(fù),于是面向切面就來(lái)了,可以通過(guò)把攔截器加在每個(gè)http請(qǐng)求之前,來(lái)實(shí)現(xiàn)權(quán)限判斷的功能。

實(shí)現(xiàn)

// 所有用戶可以訪問(wèn)index.html, error.html// admin可以訪問(wèn)admin.html, /getData// 登陸用戶可以訪問(wèn)home.htmlapp.all('/*', function(request, res, next){  // 思路:  // 得到請(qǐng)求的url  // 然后得到request的cookie,根據(jù)cookie得到當(dāng)前登陸的用戶  // 判斷用戶對(duì)應(yīng)url的權(quán)限  var jsPattern=//.js$/;  var url=request.orignalUrl;  if(jsPattern.test(url)){  // 公共部分,放行    next();    return;  }  if(url=='index.html'||url=='error.html'){    next();    return;  }  var cookie=JSON.stringify(req.cookies);  if(access){    next();  }  else{    res.redirect('error.html');  }});

實(shí)現(xiàn)思路:

1. 攔截所有請(qǐng)求(上面的就可以啦),得到當(dāng)前訪問(wèn)的url

2. 根據(jù)cookie得到當(dāng)前用戶

3. 根據(jù)url和用戶對(duì)應(yīng)的身份來(lái)判斷是否可以訪問(wèn)

4. 如果可以調(diào)用next();

5. 如果不能訪問(wèn),返回錯(cuò)誤信息

注意

  1. next(); 僅僅是一個(gè)函數(shù),對(duì)應(yīng)著原本處理請(qǐng)求的代碼,如前面的app.post(‘/getData'),當(dāng)這里的代碼處理完成后會(huì)回到對(duì)應(yīng)next(); 處,所以需要處理好對(duì)應(yīng)的關(guān)系,如果必要需要return結(jié)束當(dāng)前的函數(shù),不然會(huì)出錯(cuò)噠。
  2. 對(duì)于公共的部分,如js插件,部分圖片,還有css的部分,可以直接放行。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持VeVb武林網(wǎng)。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到JavaScript/Ajax教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 甘泉县| 怀仁县| 上虞市| 来宾市| 滨州市| 津市市| 安塞县| 花垣县| 喀喇沁旗| 柘荣县| 静海县| 怀仁县| 道真| 武义县| 治县。| 全南县| 辉县市| 花垣县| 山阴县| 江津市| 枝江市| 和林格尔县| 碌曲县| 海南省| 兴和县| 若尔盖县| 贵阳市| 汶川县| 东阿县| 剑川县| 靖边县| 策勒县| 牙克石市| 商水县| 南宁市| 桑植县| 建昌县| 平邑县| 湄潭县| 霍州市| 乐清市|