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 相关文章推荐
js解析与序列化json数据(三)json的解析探讨
Feb 01 Javascript
JS 退出系统并跳转到登录界面的实现代码
Jun 29 Javascript
jquery实现弹出层遮罩效果的简单实例
Mar 03 Javascript
详解JavaScript正则表达式之分组匹配及反向引用
Mar 09 Javascript
jQuery技巧之让任何组件都支持类似DOM的事件管理
Apr 05 Javascript
javascript实现无法关闭的弹框
Nov 27 Javascript
javascript中apply/call和bind的使用
Feb 15 Javascript
详解Node中导入模块require和import的区别
Aug 11 Javascript
JavaScript数组push方法使用注意事项
Oct 30 Javascript
使用async、enterproxy控制并发数量的方法详解
Jan 02 Javascript
少女风vue组件库的制作全过程
May 15 Javascript
详解vue修改elementUI的分页组件视图没更新问题
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
老照片 - 几十年前的收音机与人
2021/03/02 无线电
PhpMyAdmin出现export.php Missing parameter: what /export_type错误解决方法
2012/08/09 PHP
PHP生成指定随机字符串的简单实现方法
2015/04/01 PHP
WordPress中注册菜单与调用菜单的方法详解
2015/12/18 PHP
php简单获取复选框值的方法
2016/05/11 PHP
PHP文件上传处理案例分析
2016/10/15 PHP
PHPStrom 新建FTP项目以及在线操作教程
2016/10/16 PHP
对于Laravel 5.5核心架构的深入理解
2018/02/22 PHP
thinkPHP5.0框架验证码调用及点击图片刷新简单实现方法
2018/09/07 PHP
Jquery Ajax 学习实例2 向页面发出请求 返回JSon格式数据
2010/03/15 Javascript
基于jquery的自定义鼠标提示效果 jquery.toolTip
2010/11/14 Javascript
jQuery中data()方法用法实例
2014/12/27 Javascript
基于jquery实现的仿优酷图片轮播特效代码
2016/01/13 Javascript
jQuery绑定事件的几种实现方式
2016/05/09 Javascript
javascript iframe跨域详解
2016/10/26 Javascript
Javascript for in的缺陷总结
2017/02/03 Javascript
vue-cli 自定义指令directive 添加验证滑块示例
2017/10/19 Javascript
Nodejs实现爬虫抓取数据实例解析
2018/07/05 NodeJs
jQuery-ui插件sortable实现自由拖动排序
2018/12/01 jQuery
vue组件间的参数传递实例详解
2019/04/26 Javascript
Element Rate 评分的使用方法
2020/07/27 Javascript
Python获取linux主机ip的简单实现方法
2016/04/18 Python
Python 基础教程之闭包的使用方法
2017/09/29 Python
Django中的Signal代码详解
2018/02/05 Python
Django自定义用户认证示例详解
2018/03/14 Python
基于OpenCV python3实现证件照换背景的方法
2019/03/22 Python
Python eval的常见错误封装及利用原理详解
2019/03/26 Python
Python IDE Pycharm中的快捷键列表用法
2019/08/08 Python
CSS3 透明色 RGBA使用介绍
2013/08/06 HTML / CSS
请解释在new与override的区别
2012/10/29 面试题
军训学生自我鉴定
2014/02/12 职场文书
网页美工求职信
2014/02/15 职场文书
幼儿教师求职信
2014/05/24 职场文书
五年级学生期末评语
2014/12/26 职场文书
创业计划书之物流运送
2019/09/17 职场文书
golang DNS服务器的简单实现操作
2021/04/30 Golang