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 replace()正则替换实现代码
Feb 26 Javascript
javascript 闭包疑问
Dec 30 Javascript
10个基于浏览器的JavaScript调试工具分享
Feb 07 Javascript
javascript中alert()与console.log()的区别
Aug 26 Javascript
Flow之一个新的Javascript静态类型检查器
Dec 21 Javascript
jQuery validate 验证radio实例
Mar 01 Javascript
vue2.0结合DataTable插件实现表格动态刷新的方法详解
Mar 17 Javascript
如何获取TypeScript的声明文件.d.ts
May 01 Javascript
在Vue项目中取消ESLint代码检测的步骤讲解
Jan 27 Javascript
axios实现简单文件上传功能
Sep 25 Javascript
javascript 对象 与 prototype 原型用法实例分析
Nov 11 Javascript
Vue OpenLayer测距功能的实现
Apr 20 Vue.js
浅析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
无线电广播与收音机发展的历史回眸
2021/03/02 无线电
关于session在PHP5的配置文件中的详细设置参数说明
2011/04/20 PHP
thinkphp5 加载静态资源路径与常量的方法
2017/12/24 PHP
php微信公众号开发之微信企业付款给个人
2018/10/04 PHP
jquery 与NVelocity 产生冲突的解决方法
2011/06/13 Javascript
jquery中对于批量deferred的处理方法
2014/01/22 Javascript
Javascript的&&和||的另类用法
2014/07/23 Javascript
jQuery取消ajax请求的方法
2015/06/09 Javascript
jQuery简单实现两级下拉菜单效果代码
2015/09/15 Javascript
浅析nodejs实现Websocket的数据接收与发送
2015/11/19 NodeJs
Angular4自制一个市县二级联动组件示例
2017/11/21 Javascript
ElementUI radio组件选中小改造
2019/08/12 Javascript
nodejs简单抓包工具使用详解
2019/08/23 NodeJs
vue 使用插槽分发内容操作示例【单个插槽、具名插槽、作用域插槽】
2020/03/06 Javascript
python统计多维数组的行数和列数实例
2018/06/23 Python
pandas 条件搜索返回列表的方法
2018/10/30 Python
python实现贪吃蛇游戏
2020/03/21 Python
Python爬取爱奇艺电影信息代码实例
2019/11/26 Python
python统计文章中单词出现次数实例
2020/02/27 Python
Python如何执行精确的浮点数运算
2020/07/31 Python
python 自动识别并连接串口的实现
2021/01/19 Python
浅析HTML5中的 History 模式
2017/06/22 HTML / CSS
h5使用canvas画布实现手势解锁
2019/01/04 HTML / CSS
巴西图书和电子产品购物网站:Saraiva
2017/06/07 全球购物
美国背景检查、公共记录和人物搜索网站:BeenVerified
2018/02/25 全球购物
Moss Bros官网:英国排名第一的西装店
2020/02/26 全球购物
荷兰家电销售网站:Welhof
2020/12/08 全球购物
程序集与命名空间有什么不同
2014/07/25 面试题
一道Delphi上机题
2012/06/04 面试题
股权转让协议书范本
2014/04/12 职场文书
单位绩效考核方案
2014/05/11 职场文书
物联网工程专业推荐信
2014/09/08 职场文书
2015年副班长工作总结
2015/05/15 职场文书
《藏戏》教学反思
2016/02/23 职场文书
JavaScript原型链详解
2021/11/07 Javascript
Go并发4种方法简明讲解
2022/04/06 Golang