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 相关文章推荐
window.parent调用父框架时 ie跟火狐不兼容问题
Jul 30 Javascript
可恶的ie8提示缺少id未定义
Mar 20 Javascript
js数组中如何随机取出一个值
Jun 13 Javascript
JavaScript实现从数组中选出和等于固定值的n个数
Sep 03 Javascript
JavaScript队列、优先队列与循环队列
Nov 14 Javascript
JS实现的五级联动菜单效果完整实例
Feb 23 Javascript
JavaScript编写棋盘覆盖代码详解
Aug 28 Javascript
深入理解ES6 Promise 扩展always方法
Sep 26 Javascript
jQuery实现checkbox全选、反选及删除等操作的方法详解
Aug 02 jQuery
浅谈Vue.js之初始化el以及数据的绑定说明
Nov 14 Javascript
Vue学习之组件用法实例详解
Jan 06 Javascript
原生JavaScript实现贪吃蛇游戏
Nov 04 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
图书管理程序(二)
2006/10/09 PHP
PHP中IP地址与整型数字互相转换详解
2014/08/20 PHP
用 Composer构建自己的 PHP 框架之使用 ORM
2014/10/30 PHP
在php7中MongoDB实现模糊查询的方法详解
2017/05/03 PHP
用于table内容排序
2006/07/21 Javascript
如何判断图片地址是否失效
2007/02/02 Javascript
基于jquery的滑动样例代码
2010/11/20 Javascript
解析javascript 浏览器关闭事件
2013/07/08 Javascript
获取数组中最大最小值方法js代码(自写)
2013/08/12 Javascript
Javascript动态引用CSS文件的2种方法介绍
2014/06/06 Javascript
兼容IE、firefox以及chrome的js获取时间(getFullYear)
2014/07/04 Javascript
jQuery制作简洁的图片轮播效果
2015/04/03 Javascript
AngularJS基础 ng-include 指令简单示例
2016/08/01 Javascript
javascript中href和replace的比较(详解)
2016/11/25 Javascript
JavaScript仿微博输入框效果(案例分析)
2016/12/06 Javascript
JS实现侧边栏鼠标经过弹出框+缓冲效果
2017/03/29 Javascript
JS验证码实现代码
2017/09/14 Javascript
vue.js中引入vuex储存接口数据及调用的详细流程
2017/12/14 Javascript
Vue.js项目中管理每个页面的头部标签的两种方法
2018/06/25 Javascript
微信小程序实现选项卡效果
2018/11/06 Javascript
js+canvas实现图片格式webp/png/jpeg在线转换
2020/08/22 Javascript
Python中运行并行任务技巧
2015/02/26 Python
Python解惑之True和False详解
2017/04/24 Python
Python实现模拟登录网易邮箱的方法示例
2018/07/05 Python
Python面向对象思想与应用入门教程【类与对象】
2019/04/12 Python
CSS实现定位元素居中的方法
2015/06/23 HTML / CSS
加拿大花店:1800Flowers.ca
2016/11/16 全球购物
美国户外生活方式品牌:Eddie Bauer
2016/12/28 全球购物
美体小铺瑞典官方网站:The Body Shop瑞典
2018/01/27 全球购物
介绍一下grep命令的使用
2012/06/28 面试题
运动会班级口号
2014/06/09 职场文书
关于对大人不礼貌的检讨书
2014/09/29 职场文书
党性分析材料格式
2014/12/19 职场文书
公司年夜饭通知
2015/04/25 职场文书
python实现简单的井字棋
2021/05/26 Python
Python使用海龟绘图实现贪吃蛇游戏
2021/06/18 Python