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 相关文章推荐
各种效果的jquery ui(接口)介绍
Sep 17 Javascript
JavaScript数组Array对象增加和删除元素方法总结
Jan 20 Javascript
JavaScript 动态加载脚本和样式的方法
Apr 13 Javascript
Angular中$cacheFactory的作用和用法实例详解
Aug 19 Javascript
纯js和css完成贪吃蛇小游戏demo
Sep 01 Javascript
vue.js事件处理器是什么
Mar 20 Javascript
jQuery图片加载失败替换默认图片方法汇总
Nov 29 jQuery
浅谈vue中改elementUI默认样式引发的static与assets的区别
Feb 03 Javascript
VUE注册全局组件和局部组件过程解析
Oct 10 Javascript
Javascript和jquery在selenium的使用过程
Oct 31 jQuery
解决vue自定义全局消息框组件问题
Nov 22 Javascript
Flexible.js可伸缩布局实现方法详解
Nov 13 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桌面中心(二) 数据库写入
2007/03/11 PHP
WordPress判断用户是否登录的代码
2011/03/17 PHP
解析php中static,const与define的使用区别
2013/06/18 PHP
浅析PHP原理之变量分离/引用(Variables Separation)
2013/08/09 PHP
php计算多维数组中所有值总和的方法
2015/06/24 PHP
基础的prototype.js常用函数及其用法
2007/03/10 Javascript
对xmlHttp对象方法和属性的理解
2011/01/17 Javascript
JavaScript中for..in循环陷阱介绍
2013/11/12 Javascript
JavaScript实现班级随机点名小应用需求的具体分析
2014/05/12 Javascript
jquery.mobile 共同布局遇到的问题小结
2015/02/10 Javascript
使用npm发布Node.JS程序包教程
2015/03/02 Javascript
jquery submit()不能提交表单的解决方法
2017/04/24 jQuery
React中上传图片到七牛的示例代码
2017/10/10 Javascript
实例分析js事件循环机制
2017/12/13 Javascript
详解React项目的服务端渲染改造(koa2+webpack3.11)
2018/03/19 Javascript
vue.js实现带日期星期的数字时钟功能示例
2018/08/28 Javascript
原生js实现的金山打字小游戏(实例代码详解)
2020/03/16 Javascript
如何基于viewport vm适配移动端页面
2020/11/13 Javascript
python更新列表的方法
2015/07/28 Python
Python实现随机生成手机号及正则验证手机号的方法
2018/04/25 Python
简单介绍django提供的加密算法
2019/12/18 Python
Python JSON编解码方式原理详解
2020/01/20 Python
python中使用you-get库批量在线下载bilibili视频的教程
2020/03/10 Python
Python PyQt5运行程序把输出信息展示到GUI图形界面上
2020/04/27 Python
python自动化测试三部曲之request+django实现接口测试
2020/10/07 Python
时装界的“朋克之母”:Vivienne Westwood
2017/07/06 全球购物
英国现代市场:ARKET
2019/04/10 全球购物
大学自主招生自荐信
2013/12/16 职场文书
文秘人员工作职责
2014/01/31 职场文书
学习方法演讲稿
2014/05/10 职场文书
群众路线剖析材料范文
2014/10/09 职场文书
检讨书1000字
2014/10/11 职场文书
乡镇党建工作汇报材料
2014/10/27 职场文书
考试没考好检讨书(精选篇)
2014/11/16 职场文书
2014年女职工工作总结
2014/11/27 职场文书
Jpa Specification如何实现and和or同时使用查询
2021/11/23 Java/Android