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中常用的SET和GET$(”#msg”).html循环介绍
Oct 09 Javascript
jQuery中操控hidden、disable等无值属性的方法
Jan 06 Javascript
JavaScript类属性的访问方式详解
Feb 11 Javascript
一个通过script自定义属性传递配置参数的方法
Sep 15 Javascript
jQuery子窗体取得父窗体元素的方法
May 11 Javascript
js简单工厂模式用法实例
Jun 30 Javascript
javascript嵌套函数和在函数内调用外部函数的区别分析
Jan 31 Javascript
D3.js实现直方图的方法详解
Sep 25 Javascript
详解AngularJS controller调用factory
May 19 Javascript
JQuery省市联动效果实现过程详解
May 08 jQuery
解决vscode进行vue格式化,会自动补分号和双引号的问题
Oct 26 Javascript
vue-cli中实现响应式布局的方法
Mar 02 Vue.js
详解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
Win2003服务器安全加固设置--进一步提高服务器安全性
2007/05/23 PHP
MySQL时间字段究竟使用INT还是DateTime的说明
2012/02/27 PHP
zend framework框架中url大小写问题解决方法
2014/08/19 PHP
JSON两种结构之对象和数组的理解
2016/07/19 PHP
php与python实现的线程池多线程爬虫功能示例
2016/10/12 PHP
php有效防止图片盗用、盗链的两种方法
2016/11/01 PHP
Alliance vs Liquid BO3 第二场2.13
2021/03/10 DOTA
jQuery实现简单隔行变色的方法
2016/02/20 Javascript
JavaScript重定向URL参数的两种方法小结
2016/10/19 Javascript
利用VUE框架,实现列表分页功能示例代码
2017/01/12 Javascript
js实现鼠标左右移动,图片也跟着移动效果
2017/01/25 Javascript
原生js实现简单的模态框示例
2017/09/08 Javascript
详解利用Angular实现多团队模块化SPA开发框架
2017/11/27 Javascript
详解webpack4升级指南以及从webpack3.x迁移
2018/06/12 Javascript
微信小程序 行的删除和增加操作实现详解
2019/09/29 Javascript
微信小程序手动添加收货地址省市区联动
2020/05/18 Javascript
Flexible.js可伸缩布局实现方法详解
2020/11/13 Javascript
使用js获取身份证年龄的示例代码
2020/12/11 Javascript
python创建临时文件夹的方法
2015/07/06 Python
Python环境下安装使用异步任务队列包Celery的基础教程
2016/05/07 Python
VTK与Python实现机械臂三维模型可视化详解
2017/12/13 Python
Python输出各行命令详解
2018/02/01 Python
python自动生成model文件过程详解
2019/11/02 Python
如何修复使用 Python ORM 工具 SQLAlchemy 时的常见陷阱
2019/11/19 Python
Python 字典一个键对应多个值的方法
2020/09/29 Python
澳大利亚家具和家居用品在线商店:Interiors Online
2018/03/05 全球购物
TUMI新加坡官网:国际领先的商旅箱包品牌
2019/01/12 全球购物
为什么要做架构设计
2015/07/08 面试题
物理系毕业生自荐书范文
2014/02/22 职场文书
写求职信要注意什么问题
2014/04/12 职场文书
企业安全生产演讲稿
2014/05/09 职场文书
积极向上的团队口号
2014/06/06 职场文书
婚前财产协议书范本
2014/10/19 职场文书
八一建军节慰问信
2015/02/14 职场文书
2016元旦主持人开场白
2015/12/03 职场文书
详解MySQL的Seconds_Behind_Master
2021/05/18 MySQL