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 小型打飞机游戏实现原理说明
Oct 28 Javascript
jquery remove方法应用详解
Nov 22 Javascript
在firefox和Chrome下关闭浏览器窗口无效的解决方法
Jan 16 Javascript
使用js画图之饼图
Jan 12 Javascript
javascript中sort()的用法实例分析
Jan 30 Javascript
详解JavaScript中的表单验证
Jun 16 Javascript
js正则表达式中exec用法实例
Jul 23 Javascript
jQuery ajaxSubmit 实现ajax提交表单局部刷新
Jul 04 Javascript
使用微信小程序开发前端【快速入门】
Dec 05 Javascript
EditPlus中的正则表达式 实战(4)
Dec 15 Javascript
js中getBoundingClientRect的作用及兼容方案详解
Feb 01 Javascript
Vue中在新窗口打开页面及Vue-router的使用
Jun 13 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
phpMyAdmin 安装配置方法和问题解决
2009/06/08 PHP
Smarty Foreach 使用说明
2010/03/23 PHP
php模拟asp中的XmlHttpRequest实现http请求的代码
2011/03/24 PHP
PHP 用session与gd库实现简单验证码生成与验证的类方法
2016/11/15 PHP
php从数据库中获取数据用ajax传送到前台的方法
2018/08/20 PHP
php数组函数array_push()、array_pop()及array_shift()简单用法示例
2020/01/26 PHP
tbody元素支持嵌套的注意方法
2007/03/24 Javascript
javascript 解析后的xml对象的读取方法细解
2009/07/25 Javascript
JavaScript中的方法重载实例
2015/03/16 Javascript
D3.js封装文本实现自动换行和旋转平移等功能
2016/10/14 Javascript
基于LayUI实现前端分页功能的方法
2017/07/22 Javascript
es6+angular1.X+webpack 实现按路由功能打包项目的示例
2017/08/16 Javascript
使用vue2实现购物车和地址选配功能
2018/03/29 Javascript
发布一款npm包帮助理解npm的使用
2019/01/03 Javascript
在微信小程序中使用mqtt服务的方法
2019/12/13 Javascript
React中Ref 的使用方法详解
2020/04/28 Javascript
理解JavaScript中的Proxy 与 Reflection API
2020/09/21 Javascript
JavaScript实现点击图片换背景
2020/11/20 Javascript
[54:17]DOTA2-DPC中国联赛定级赛 RNG vs iG BO3第二场 1月10日
2021/03/11 DOTA
Python 错误和异常小结
2013/10/09 Python
python中cPickle用法例子分享
2014/01/03 Python
Python聚类算法之凝聚层次聚类实例分析
2015/11/20 Python
PyChar学习教程之自定义文件与代码模板详解
2017/07/17 Python
Python中sort和sorted函数代码解析
2018/01/25 Python
python 爬虫 批量获取代理ip的实例代码
2018/05/22 Python
python函数不定长参数使用方法解析
2019/12/14 Python
Python版中国省市经纬度
2020/02/11 Python
浅析Python 字符编码与文件处理
2020/09/24 Python
Python 实现集合Set的示例
2020/12/21 Python
html5.2 dialog简介详解
2018/02/27 HTML / CSS
中国领先的专业家电网购平台:国美在线
2016/12/25 全球购物
加拿大领先的牛仔零售商:Bluenotes
2018/01/22 全球购物
美国顶级水上运动专业店:Marine Products
2018/04/15 全球购物
20年同学聚会感言
2014/02/03 职场文书
标准化管理实施方案
2014/02/25 职场文书
一篇文章带你学习Mybatis-Plus(新手入门)
2021/08/02 Java/Android