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 相关文章推荐
B/S开发中常用javaScript技术与代码
Mar 09 Javascript
用javascript获取当页面上鼠标光标位置和触发事件的对象的代码
Dec 09 Javascript
javascript 匿名函数的理解(透彻版)
Jan 28 Javascript
用js实现计算加载页面所用的时间
Apr 02 Javascript
javascript 通用简单的table选项卡实现
May 07 Javascript
关于递归运算的顺序测试代码
Nov 30 Javascript
jquery获取html元素的绝对位置和相对位置的方法
Jun 20 Javascript
javascript实现label标签跳出循环操作
Mar 06 Javascript
每日十条JavaScript经验技巧(一)
Jun 23 Javascript
JS实现鼠标移上去显示图片或微信二维码
Dec 14 Javascript
VueJS组件之间通过props交互及验证的方式
Sep 04 Javascript
Javascript实现动态时钟效果
Nov 17 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
风格模板初级不完全修改教程
2006/10/09 PHP
php 自写函数代码 获取关键字 去超链接
2010/02/08 PHP
PHP基于redis计数器类定义与用法示例
2018/02/08 PHP
php实现推荐功能的简单实例
2019/09/29 PHP
二行代码解决全部网页木马
2008/03/28 Javascript
为EasyUI的Tab标签添加右键菜单的方法
2012/07/14 Javascript
jquery 实现两级导航菜单附效果图
2014/03/07 Javascript
Node.js中AES加密和其它语言不一致问题解决办法
2014/03/10 Javascript
jQuery.parseJSON(json)将JSON字符串转换成js对象
2014/07/27 Javascript
了不起的node.js读书笔记之node的学习总结
2014/12/22 Javascript
js滚动条平滑移动示例代码
2016/03/29 Javascript
详解Javascript中prototype属性(推荐)
2016/09/03 Javascript
Three.js获取鼠标点击的三维坐标示例代码
2017/03/24 Javascript
详解angularjs的数组传参方式的简单实现
2017/07/28 Javascript
Node.js中的child_process模块详解
2018/06/08 Javascript
详解webpack4升级指南以及从webpack3.x迁移
2018/06/12 Javascript
微信小程序踩坑记录之解决tabBar.list[3].selectedIconPath大小超过40kb
2018/07/04 Javascript
谈谈React中的Render Props模式
2018/12/06 Javascript
bootstrap-treeview实现多级树形菜单 后台JSON格式如何组织?
2019/07/26 Javascript
[52:20]VP vs VG Supermajor小组赛 B组胜者组决赛 BO3 第一场 6.2
2018/06/03 DOTA
[54:43]DOTA2-DPC中国联赛 正赛 CDEC vs Dynasty BO3 第一场 2月22日
2021/03/11 DOTA
python局部赋值的规则
2013/03/07 Python
用Python读取几十万行文本数据
2018/12/24 Python
详解如何用TensorFlow训练和识别/分类自定义图片
2019/08/05 Python
自定义Django默认的sitemap站点地图样式
2020/03/04 Python
Python 通过监听端口实现唯一脚本运行方式
2020/05/05 Python
python实现数字炸弹游戏程序
2020/07/17 Python
用python写一个带有gui界面的密码生成器
2020/11/06 Python
python 指定源路径来解决import问题的操作
2021/03/04 Python
分享CSS3中必须要知道的10个顶级命令
2012/04/26 HTML / CSS
英国异国风情旅游网站:Travel Talk Tours(团体旅游、探险旅游、帆船假期)
2018/07/26 全球购物
英国DIY汽车维修配件网站:DIY Car Service Parts
2019/08/30 全球购物
英文简历自荐信范文
2013/12/11 职场文书
国际贸易实训报告
2014/11/05 职场文书
人事任命通知
2015/04/20 职场文书
2016师德师风学习心得体会
2016/01/12 职场文书