Express + Node.js实现登录拦截器的实例代码


Posted in Javascript onJuly 01, 2017

介绍

这边的拦截器,对应于spring MVC中的filter,所有的http请求,通过拦截器处理之后才能访问到对应的代码/资源。

最典型的应用场景就是实现访问权限控制,给予不同的用户/用户组不同的页面和接口访问权限,仅能够访问允许的页面和接口。

场景

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});
});

如果不做任何处理,任何人发送getData的post请求可以直接从后台读取数据,而不需要任何的登陆,只需要知道接口就可以。

对应每个接口,如果在每个接口下面加上权限判断,代码会非常的重复,于是面向切面就来了,可以通过把拦截器加在每个http请求之前,来实现权限判断的功能。

实现

// 所有用户可以访问index.html, error.html
// admin可以访问admin.html, /getData
// 登陆用户可以访问home.html
app.all('/*', function(request, res, next){
  // 思路:
  // 得到请求的url
  // 然后得到request的cookie,根据cookie得到当前登陆的用户
  // 判断用户对应url的权限
  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');
  }
});

实现思路:

1. 拦截所有请求(上面的就可以啦),得到当前访问的url

2. 根据cookie得到当前用户

3. 根据url和用户对应的身份来判断是否可以访问

4. 如果可以调用next();

5. 如果不能访问,返回错误信息

注意

  1. next(); 仅仅是一个函数,对应着原本处理请求的代码,如前面的app.post(‘/getData'),当这里的代码处理完成后会回到对应next(); 处,所以需要处理好对应的关系,如果必要需要return结束当前的函数,不然会出错哒。
  2. 对于公共的部分,如js插件,部分图片,还有css的部分,可以直接放行。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 动态添加表格行
Jun 22 Javascript
js转义字符介绍
Nov 05 Javascript
jsMind通过鼠标拖拽的方式调整节点位置
Apr 13 Javascript
JavaScript数据库TaffyDB用法实例分析
Jul 27 Javascript
jQuery解析json数据实例分析
Nov 24 Javascript
浅谈JQuery+ajax+jsonp 跨域访问
Jun 25 Javascript
JavaScript队列、优先队列与循环队列
Nov 14 Javascript
js实现背景图自适应窗口大小
Jan 10 Javascript
js实现移动端导航点击自动滑动效果
Jul 18 Javascript
vue组件实现进度条效果
Jun 06 Javascript
webuploader实现上传图片到服务器功能
Aug 16 Javascript
vue实现路由切换改变title功能
May 28 Javascript
详解node-ccap模块生成captcha验证码
Jul 01 #Javascript
vue元素实现动画过渡效果
Jul 01 #Javascript
JavaScript学习总结之正则的元字符和一些简单的应用
Jun 30 #Javascript
node.js + socket.io 实现点对点随机匹配聊天
Jun 30 #Javascript
详解vue中computed 和 watch的异同
Jun 30 #Javascript
JS 组件系列之Bootstrap Table 冻结列功能IE浏览器兼容性问题解决方案
Jun 30 #Javascript
vue2.0 axios前后端数据处理实例代码
Jun 30 #Javascript
You might like
DC最新动画电影:《战争之子》为何内容偏激,毁了一个不错的漫画
2020/04/09 欧美动漫
实用函数7
2007/11/08 PHP
php日历制作代码分享
2014/01/20 PHP
PHP按行读取文件时删除换行符的3种方法
2014/05/04 PHP
php解析http获取的json字符串变量总是空白null
2015/03/02 PHP
PHP APP微信提现接口代码
2018/09/30 PHP
php中isset与empty函数的困惑与用法分析
2019/07/05 PHP
js实现的网站首页随机公告随机公告
2007/03/14 Javascript
JQuery给元素绑定click事件多次执行的解决方法
2014/05/29 Javascript
jQuery插件StickUp实现网页导航置顶
2015/04/12 Javascript
JS实现动态表格的添加,修改,删除功能(推荐)
2016/06/15 Javascript
jQuery插件扩展测试实例
2016/06/21 Javascript
Nodejs 和Session 原理及实战技巧小结
2017/08/25 NodeJs
AngularJS表单验证功能
2017/10/19 Javascript
JS/HTML5游戏常用算法之碰撞检测 像素检测算法实例详解
2018/12/12 Javascript
Vue微信公众号网页分享的示例代码
2020/05/28 Javascript
Python对list列表结构中的值进行去重的方法总结
2016/05/07 Python
解决Python 爬虫URL中存在中文或特殊符号无法请求的问题
2018/05/11 Python
python初学者,用python实现基本的学生管理系统(python3)代码实例
2019/04/10 Python
python实现文件批量编码转换及注意事项
2019/10/14 Python
python将邻接矩阵输出成图的实现
2019/11/21 Python
python如何通过闭包实现计算器的功能
2020/02/22 Python
python实现canny边缘检测
2020/09/14 Python
python爬取代理IP并进行有效的IP测试实现
2020/10/09 Python
html标签之Object和EMBED标签详解
2013/07/04 HTML / CSS
canvas绘图按照contain或者cover方式适配并居中显示
2019/02/18 HTML / CSS
MCM英国官网:奢侈皮具制品
2017/04/18 全球购物
美国体育用品商店:Rally House(NCAA、NFL、MLB、NBA、NHL和MLS)
2018/01/03 全球购物
颇特女士:NET-A-PORTER(直邮中国)
2020/07/11 全球购物
主键(Primary Key)约束和唯一性(UNIQUE)约束的区别
2013/05/29 面试题
《长征》教学反思
2014/04/27 职场文书
管理建议书范文
2014/05/13 职场文书
职务任命书范本
2014/06/05 职场文书
建设办主任四风问题整改思路和措施
2014/09/20 职场文书
小学课改工作总结
2015/08/13 职场文书
Nginx开启Brotli压缩算法实现过程详解
2021/03/31 Servers