Vue2.0 axios前后端登陆拦截器(实例讲解)


Posted in Javascript onOctober 27, 2017

vue更新到2.0之后,作者就宣告不再对vue-resource更新,而是推荐使用axios。前段时间第一次在项目里用到vue,关于登陆问题,这里写一下心得。

首先后端:

import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

import com.lovnx.gateway.po.User;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LoginInterceptor extends HandlerInterceptorAdapter{

  @Override
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

    User user = (User)request.getSession().getAttribute("user");
    if(user == null){
    response.sendError(401);
      return false;
    }else
      return true;
  }
}

这里做的处理就是:如果session里面没有user了,就向前端返回401错误。

前端:

import Vue from 'vue'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-default/index.css'
import App from './App'
import router from './router'
import axios from 'axios'


// http response 拦截器
axios.interceptors.response.use(
  response => {
    return response;
  },
  error => {
    if (error.response) {
      if (error.response.status == 401) {
          store.commit(types.LOGOUT);
          router.replace({
            path: 'login',
            query: {redirect: router.currentRoute.fullPath}
          })
      }
    }
    return Promise.reject(error.response.data)  // 返回接口返回的错误信息
  }
);

注意,这里的拦截器写在main.js中。

//———————————?分割线————————————?//

当然,以上的这种方式是把登陆页面写在了Vue工程里面,下面介绍一种用独立的登陆页面结合Vue工程的例子。

工程目录:

Vue2.0 axios前后端登陆拦截器(实例讲解)

其中的static和index.html是webpack打包后的东西。

这里的思想要结合以前写的一篇博文: 重写ajax实现session超时跳转到登陆页面

大概思想就是:请求任何一个页面,后端拦截器拦截到请求,查看session里的用户信息存在与否,如果不存在就跳转到这个login.html;如果存在就正常响应数据。这里要对前端拦截器稍微改动一下:

import Vue from 'vue'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-default/index.css'
import App from './App'
import router from './router'
import axios from 'axios'


// http response 拦截器
axios.interceptors.response.use(
  response => {
  //这个判断是关键,如果返回登陆页面内容了,就刷新当前页面,经后端处理就会跳转到登陆页面了
  var temp = response.data + "";
      if (temp.indexOf('lkdjoifdgjdfgjdfgjfh14546') > -1) {
        router.go(0);
      }
    return response;
  },
  error => {
    if (error.response) {
      //退出登陆的时候就响应401即可
      if (error.response.status == 401) {
          router.go(0);
      }
    }
    return Promise.reject(error.response.data)  // 返回接口返回的错误信息
  }
);

其中,lkdjoifdgjdfgjdfgjfh14546这个是写在登陆页面一个hidden域里面的。

后端拦截器:

import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

import com.lovnx.gateway.po.User;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LoginInterceptor extends HandlerInterceptorAdapter{

  @Override
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    String requestUri = request.getRequestURI();
    String contextPath = request.getContextPath();

    if (requestUri.indexOf("/login.html") > -1 || requestUri.indexOf("/system/login") > -1) {
      return true;
    }

    User user = (User)request.getSession().getAttribute("user");
    if(user == null){
      // 未登录跳转到login页面!");
        response.sendRedirect(contextPath + "/login.html");
      return false;
    }else
      return true;
  }

}

以上这篇Vue2.0 axios前后端登陆拦截器(实例讲解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
帮助避免错误的Javascript陷阱清单
May 31 Javascript
jquery ajax同步异步的执行最终解决方案
Apr 26 Javascript
扩展IE中一些不兼容的方法如contains、startWith等等
Jan 09 Javascript
jQuery如何获取同一个类标签的所有值(默认无法获取)
Sep 25 Javascript
jQuery中使用each处理json数据
Apr 23 Javascript
jquery实现简单的自动播放幻灯片效果
Jun 13 Javascript
微信开发 使用picker封装省市区三级联动模板
Oct 28 Javascript
Vue.js实现一个SPA登录页面的过程【推荐】
Apr 29 Javascript
JavaScript实现新年倒计时效果
Nov 17 Javascript
JS使用百度地图API自动获取地址和经纬度操作示例
Apr 16 Javascript
js实现无限瀑布流实例方法
Sep 16 Javascript
微信小程序向Java后台传输参数的方法实现
Dec 10 Javascript
浅析Javascript中双等号(==)隐性转换机制
Oct 27 #Javascript
微信小程序promsie.all和promise顺序执行
Oct 27 #Javascript
JS+CSS实现网页加载中的动画效果
Oct 27 #Javascript
vue-resource拦截器设置头信息的实例
Oct 27 #Javascript
Vue-resource拦截器判断token失效跳转的实例
Oct 27 #Javascript
vue2里面ref的具体使用方法
Oct 27 #Javascript
初学者AngularJS的环境搭建过程
Oct 27 #Javascript
You might like
关于php微信订阅号开发之token验证后自动发送消息给订阅号但是没有消息返回的问题
2015/12/21 PHP
一个js实现的所谓的滑动门
2007/05/23 Javascript
关于viewport,Ext.panel和Ext.form.panel的关系
2009/05/07 Javascript
什么是MEAN?JavaScript编程中的MEAN是什么意思?
2014/12/18 Javascript
jQuery使用$.get()方法从服务器文件载入数据实例
2015/03/25 Javascript
JavaScript中操作Mysql数据库实例
2015/04/02 Javascript
基于jquery实现轮播焦点图插件
2016/03/31 Javascript
AngularJS ng-controller 指令简单实例
2016/08/01 Javascript
关于微信jssdk实现多图片上传的一点心得分享
2016/12/13 Javascript
canvas实现爱心和彩虹雨效果
2017/03/09 Javascript
JS遍历DOM文档树的方法实例详解
2018/04/03 Javascript
小程序最新获取用户昵称和头像的方法总结
2019/09/23 Javascript
JavaScript canvas绘制渐变颜色的矩形
2020/02/18 Javascript
python使用htmllib分析网页内容的方法
2015/05/08 Python
在Python的Django框架中创建语言文件
2015/07/27 Python
举例讲解Python面向对象编程中类的继承
2016/06/17 Python
Python用imghdr模块识别图片格式实例解析
2018/01/11 Python
Python 类的特殊成员解析
2018/06/20 Python
python实现将一个数组逆序输出的方法
2018/06/25 Python
Python3.4学习笔记之 idle 清屏扩展插件用法分析
2019/03/01 Python
python groupby 函数 as_index详解
2019/12/16 Python
基于Python爬取51cto博客页面信息过程解析
2020/08/25 Python
css3实现针线缝合效果(图解步骤)
2013/02/04 HTML / CSS
HTML5中的websocket实现直播功能
2018/05/21 HTML / CSS
销售文员的岗位职责
2013/11/20 职场文书
《满井游记》教学反思
2014/02/26 职场文书
2014年个人工作总结报告
2014/11/27 职场文书
2015年企业新年寄语
2014/12/08 职场文书
监考失职检讨书
2015/01/26 职场文书
2015年化验员工作总结
2015/04/10 职场文书
储备店长岗位职责
2015/04/14 职场文书
农村党员干部承诺书
2015/05/04 职场文书
护士岗位竞聘书
2015/09/15 职场文书
2019年英语版感谢信(8篇)
2019/09/29 职场文书
Python初识逻辑与if语句及用法大全
2021/08/07 Python
Spring IOC容器Bean的作用域及生命周期实例
2022/05/30 Java/Android