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 相关文章推荐
sina的lightbox效果。
Jan 09 Javascript
javascript 装载iframe子页面,自适应高度
Mar 20 Javascript
UserData用法总结 lanyu出品
Jul 01 Javascript
Javascript中的几种URL编码方法比较
Jan 23 Javascript
原生node.js案例--前后台交互
Feb 20 Javascript
微信小程序实现实时圆形进度条的方法示例
Feb 24 Javascript
JS数组操作中的经典算法实例讲解
Jul 26 Javascript
js 奇葩技巧之隐藏代码
Aug 11 Javascript
jquery+php后台实现省市区联动功能示例
May 23 jQuery
javascript function(函数类型)使用与注意事项小结
Jun 10 Javascript
有趣的JavaScript隐式类型转换操作实例分析
May 02 Javascript
Vue+TypeScript中处理computed方式
Apr 02 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
Laravel 5框架学习之数据库迁移(Migrations)
2015/04/08 PHP
浅析ThinkPHP缓存之快速缓存(F方法)和动态缓存(S方法)(日常整理)
2015/10/26 PHP
PHP面向对象继承用法详解(优化与减少代码重复)
2016/12/02 PHP
详解PHP文件的自动加载(autoloading)
2018/02/04 PHP
JavaScript入门教程(5) js Screen屏幕对象
2009/01/31 Javascript
javascript或asp实现的判断身份证号码是否正确两种验证方法
2009/11/26 Javascript
ext jquery 简单比较
2010/04/07 Javascript
JavaScript中的类继承
2010/11/25 Javascript
jquery(live)中File input的change方法只起一次作用的解决办法
2011/10/21 Javascript
图片翻转效果具体实现代码
2014/01/09 Javascript
javascript获取form里的表单元素的示例代码
2014/02/14 Javascript
基于javascript实现仿百度输入框自动匹配功能
2016/01/03 Javascript
第三章之Bootstrap 表格与按钮功能
2016/04/25 Javascript
JS简单判断字符在另一个字符串中出现次数的2种常用方法
2017/04/20 Javascript
vue checkbox 全选 数据的绑定及获取和计算方法
2018/02/09 Javascript
详解微信小程序胶囊按钮返回|首页自定义导航栏功能
2019/06/14 Javascript
vue 使用外部JS与调用原生API操作示例
2019/12/02 Javascript
SpringBoot+Vue开发之Login校验规则、实现登录和重置事件
2020/10/19 Javascript
vue项目实现减少app.js和vender.js的体积操作
2020/11/12 Javascript
[02:26]DOTA2英雄米拉娜基础教程
2013/11/25 DOTA
Python使用MYSQLDB实现从数据库中导出XML文件的方法
2015/05/11 Python
Python导出数据到Excel可读取的CSV文件的方法
2015/05/12 Python
Python循环语句之break与continue的用法
2015/10/14 Python
Python算法输出1-9数组形成的结果为100的所有运算式
2017/11/03 Python
numpy.linspace函数具体使用详解
2019/05/27 Python
关于sys.stdout和print的区别详解
2019/12/05 Python
解析PyCharm Python运行权限问题
2020/01/08 Python
探秘TensorFlow 和 NumPy 的 Broadcasting 机制
2020/03/13 Python
高考考python编程是真的吗
2020/07/20 Python
HTML5实现直播间评论滚动效果的代码
2020/05/27 HTML / CSS
单位介绍信范文
2014/01/18 职场文书
心理健康课教学反思
2014/02/13 职场文书
技能比武方案
2014/05/21 职场文书
服务员岗位职责范本
2015/04/09 职场文书
Node实现搜索框进行模糊查询
2021/06/28 Javascript
Python通过loop.run_in_executor执行同步代码 同步变为异步
2022/04/11 Python