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 相关文章推荐
收集的10个免费的jQuery相册
Feb 26 Javascript
jQuery背景插件backstretch使用指南
Apr 21 Javascript
jQuery实现灰蓝风格标准二级下拉菜单效果代码
Aug 31 Javascript
javascript实现html页面之间参数传递的四种方法实例分析
Dec 15 Javascript
关于JS中二维数组的声明方法
Sep 24 Javascript
JavaScript基础——使用Canvas绘图
Nov 02 Javascript
jQuery使用Layer弹出层插件闪退问题
Dec 22 Javascript
Angular 4依赖注入学习教程之ValueProvider的使用(七)
Jun 04 Javascript
原生JS实现隐藏显示图片 JS实现点击切换图片效果
Jan 27 Javascript
JavaScript时间戳与时间日期间相互转换
Dec 11 Javascript
vue请求本地自己编写的json文件的方法
Apr 25 Javascript
JavaScript中的LHS和RHS分析详情
Apr 06 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
让你同时上传 1000 个文件 (二)
2006/10/09 PHP
php实现的在线人员函数库
2008/04/09 PHP
php 模拟GMAIL,HOTMAIL(MSN),YAHOO,163,126邮箱登录的详细介绍
2013/06/18 PHP
查找php配置文件php.ini所在路径的二种方法
2014/05/26 PHP
PHP的文件操作与算法实现的面试题示例
2015/08/10 PHP
php上传大文件失败的原因及应对策略
2015/10/20 PHP
PHP实现页面静态化的超简单方法
2016/09/06 PHP
PHP实现Redis单据锁以及防止并发重复写入
2018/04/10 PHP
PHP代码加密的方法总结
2020/03/13 PHP
javascript在一段文字中的光标处插入其他文字
2007/08/26 Javascript
innerhtml用法 innertext用法 以及innerHTML与innertext的区别
2009/10/26 Javascript
Javascript中的方法链(Method Chaining)介绍
2015/03/15 Javascript
JavaScript编写Chrome扩展实现与浏览器的交互及时间通知
2016/05/16 Javascript
JS清除字符串中重复值的实现方法
2016/08/03 Javascript
vue.js初学入门教程(1)
2016/11/03 Javascript
PHP获取当前页面完整URL的方法
2016/12/02 Javascript
vue2.0实现导航菜单切换效果
2017/05/08 Javascript
JavaScript输入框字数实时统计更新
2017/06/17 Javascript
Python的Django框架使用入门指引
2015/04/15 Python
wxPython使用系统剪切板的方法
2015/06/16 Python
详解python3百度指数抓取实例
2016/12/12 Python
python清除字符串中间空格的实例讲解
2018/05/11 Python
浅析Python pandas模块输出每行中间省略号问题
2018/07/03 Python
Python+OpenCV实现实时眼动追踪的示例代码
2019/11/11 Python
浅谈PyQt5中异步刷新UI和Python多线程总结
2019/12/13 Python
Django 路由层URLconf的实现
2019/12/30 Python
中国旅游网站:同程旅游
2016/09/11 全球购物
中国领先的专业家电网购平台:国美在线
2016/12/25 全球购物
shell的种类有哪些
2015/04/15 面试题
安全检查与奖惩制度
2014/01/23 职场文书
学生打架检讨书
2014/02/14 职场文书
小学生新年寄语
2014/04/03 职场文书
2014年健康教育工作总结
2014/11/20 职场文书
2015年人力资源部工作总结
2015/04/30 职场文书
CSS实现单选折叠菜单功能
2021/11/01 HTML / CSS