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 相关文章推荐
jquery 元素相对定位代码
Oct 15 Javascript
javascript 实现简单的table排序及table操作练习
Dec 28 Javascript
JavaScript 盒模型 尺寸深入理解
Dec 31 Javascript
js在IE与firefox的差异集锦
Nov 11 Javascript
html的DOM中document对象forms集合用法实例
Jan 21 Javascript
浅谈Sticky组件的改进实现
Mar 22 Javascript
jQuery插件实现文件上传功能(支持拖拽)
Aug 27 Javascript
jquery radio的取值_radio的选中_radio的重置方法
Sep 20 Javascript
js/jq仿window文件夹移动/剪切/复制等操作代码
Mar 08 Javascript
JavaScript使用readAsDataUrl方法预览图片
May 10 Javascript
import与export在node.js中的使用详解
Sep 28 Javascript
vue获取元素宽、高、距离左边距离,右,上距离等还有XY坐标轴的方法
Sep 05 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
thinkphp5.1 文件引入路径问题及注意事项
2018/06/13 PHP
CI框架实现创建自定义类库的方法
2018/12/25 PHP
从面试题学习Javascript 面向对象(创建对象)
2012/03/30 Javascript
滚动图片效果 jquery实现回旋滚动效果
2013/01/08 Javascript
JS关键字变色实现思路及代码
2013/02/21 Javascript
Javascript算符的优先级介绍
2013/03/20 Javascript
JavaScript常用脚本汇总(一)
2015/03/04 Javascript
如何改进javascript代码的性能
2015/04/02 Javascript
Angularjs整合微信UI(weui)
2016/03/15 Javascript
JS实现左右无缝轮播图代码
2016/05/01 Javascript
Angularjs验证用户输入的字符串是否为日期时间
2017/06/01 Javascript
ionic环境配置及问题详解
2017/06/27 Javascript
详解node服务器中打开html文件的两种方法
2017/09/18 Javascript
jQuery实现的模仿雨滴下落动画效果
2018/12/11 jQuery
vue.js仿hover效果的实现方法示例
2019/01/28 Javascript
JavaScript设计模式之门面模式原理与实现方法分析
2020/03/09 Javascript
[01:08]2014DOTA2展望TI 剑指西雅图LGD战队专访
2014/06/30 DOTA
Python查找相似单词的方法
2015/03/05 Python
利用Python演示数型数据结构的教程
2015/04/03 Python
基于python select.select模块通信的实例讲解
2017/09/21 Python
python解析html提取数据,并生成word文档实例解析
2018/01/22 Python
opencv python统计及绘制直方图的方法
2019/01/21 Python
关于python3中setup.py小概念解析
2019/08/22 Python
使用python客户端访问impala的操作方式
2020/03/28 Python
Python pickle模块常用方法代码实例
2020/10/10 Python
4款Python 类型检查工具,你选择哪个呢?
2020/10/30 Python
HTML5边玩边学(1)画布实现方法
2010/09/21 HTML / CSS
AmazeUI 点击元素显示全屏的实现
2020/08/25 HTML / CSS
法国家具及室内配件店:home24
2017/01/21 全球购物
应届毕业生个人自荐信范文
2013/11/30 职场文书
初中生期末评语大全
2014/04/24 职场文书
群众路线自查自纠工作情况报告
2014/10/28 职场文书
2015关爱留守儿童工作总结
2014/12/12 职场文书
2015年人民调解工作总结
2015/05/18 职场文书
爱护公物主题班会
2015/08/17 职场文书
Vue3 Composition API的使用简介
2021/03/29 Vue.js