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 相关文章推荐
巧妙破除网页右键禁用的十大绝招
Aug 12 Javascript
二级域名转向类
Nov 09 Javascript
JS getStyle获取最终样式函数代码
Apr 01 Javascript
js替换字符串的所有示例代码
Jul 23 Javascript
探讨JavaScript标签位置的存放与功能有无关系
Jan 15 Javascript
web前端开发upload上传头像js示例代码
Oct 22 Javascript
EasyUI的TreeGrid的过滤功能的解决思路
Aug 08 Javascript
js中如何完美的解析数据
Mar 18 Javascript
浅析vue-router原理
Oct 19 Javascript
javascript获取元素的计算样式
May 24 Javascript
JS实现提示框跟随鼠标移动
Aug 27 Javascript
Vue中keep-alive的两种应用方式
Jul 15 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获取MSN好友列表类的实现代码
2013/06/23 PHP
PHP 9 大缓存技术总结
2015/09/17 PHP
[推荐]javascript 面向对象技术基础教程
2009/03/03 Javascript
使用JavaScript库还是自己写代码?
2010/01/28 Javascript
JavaScript的类型转换(字符转数字 数字转字符)
2010/08/30 Javascript
25个非常棒的jQuery滑块插件和教程小结
2011/09/02 Javascript
jquery.Jwin.js 基于jquery的弹出层插件代码
2012/05/23 Javascript
js在指定位置增加节点函数insertBefore()用法实例
2015/01/12 Javascript
readonly和disabled属性的区别
2015/07/26 Javascript
jQuery动画显示和隐藏效果实例演示(附demo源码下载)
2015/12/31 Javascript
浏览器兼容的JS写法总结
2016/04/27 Javascript
jquery-mobile表单的创建方法详解
2016/11/23 Javascript
获取当前月(季度/年)的最后一天(set相关操作及应用)
2016/12/27 Javascript
Vue报错:Uncaught TypeError: Cannot assign to read only property’exports‘ of object’#‘的解决方法
2017/06/17 Javascript
JavaScript获取用户所在城市及地理位置
2018/04/21 Javascript
nodejs实现获取本地文件夹下图片信息功能示例
2019/06/22 NodeJs
VUE中使用HTTP库Axios方法详解
2020/02/05 Javascript
jQuery实现中奖播报功能(让文本滚动起来) 简单设置数值即可
2020/03/20 jQuery
axios封装与传参示例详解
2020/10/18 Javascript
pyqt4教程之实现半透明的天气预报界面示例
2014/03/02 Python
Python中join和split用法实例
2015/04/14 Python
Python中的自省(反射)详解
2015/06/02 Python
python创建临时文件夹的方法
2015/07/06 Python
Python django实现简单的邮件系统发送邮件功能
2017/07/14 Python
简单了解Django模板的使用
2017/12/20 Python
Python遍历文件夹 处理json文件的方法
2019/01/22 Python
Python3.5迭代器与生成器用法实例分析
2019/04/30 Python
CSS3按钮鼠标悬浮实现光圈效果源码
2016/09/11 HTML / CSS
悬挂训练绳:TRX
2017/12/14 全球购物
联想台湾官网:Lenovo TW
2018/05/09 全球购物
介绍一下游标
2012/01/10 面试题
应届本科毕业生求职信
2014/07/23 职场文书
竞选班干部演讲稿600字
2014/08/20 职场文书
四风问题专项整治工作情况报告
2014/10/28 职场文书
2014年安全保卫工作总结
2014/11/13 职场文书
三好学生竞选稿
2015/11/21 职场文书