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 ajax 登录验证实现代码
Sep 23 Javascript
jquery获取ASP.NET服务器端控件dropdownlist和radiobuttonlist生成客户端HTML标签后的value和text值
Jun 28 Javascript
20款超赞的jQuery插件 Web开发人员必备
Feb 26 Javascript
使用iframe window的scroll方法控制iframe页面滚动
Mar 05 Javascript
javascript实现粘贴qq截图功能(clipboardData)
May 29 Javascript
浅析上传头像示例及其注意事项
Dec 14 Javascript
JavaScript函数节流的两种写法
Apr 07 Javascript
Three.js利用orbit controls插件(轨道控制)控制模型交互动作详解
Sep 25 Javascript
捕获未处理的Promise错误方法
Oct 13 Javascript
bootstrap下拉框动态赋值方法
Aug 10 Javascript
详解如何在webpack中做预渲染降低首屏空白时间
Aug 22 Javascript
vue指令做滚动加载和监听等
May 26 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+MySQL 手工注入语句大全 推荐
2009/10/30 PHP
PHP中的函数嵌套层数限制分析
2011/06/13 PHP
PHP实现的登录,注册及密码修改功能分析
2016/11/25 PHP
thinkPHP中_initialize方法实例分析
2016/12/05 PHP
ThinkPHP框架实现的邮箱激活功能示例
2018/06/15 PHP
因str_replace导致的注入问题总结
2019/08/08 PHP
Javascript 判断Flash是否加载完成的代码
2010/04/12 Javascript
jQuery UI AutoComplete 使用说明
2011/06/20 Javascript
解决自定义$(id)的方法与jquery选择器$冲突的问题
2014/06/14 Javascript
非常酷炫的Bootstrap图片轮播动画
2016/05/27 Javascript
关于动态执行代码(js的Eval)实例详解
2016/08/15 Javascript
详解JS异步加载的三种方式
2017/03/07 Javascript
在Js页面通过POST传递参数跳转到新页面详解
2017/08/25 Javascript
基于angular6.0实现的一个组件懒加载功能示例
2018/04/12 Javascript
vue+element实现表格新增、编辑、删除功能
2019/05/28 Javascript
Vue 3.0 前瞻Vue Function API新特性体验
2019/08/12 Javascript
js基础之事件捕获与冒泡原理
2019/10/09 Javascript
Vue.js 无限滚动列表性能优化方案
2019/12/02 Javascript
JS实现TITLE悬停长久显示效果完整示例
2020/02/11 Javascript
[00:43]拉比克至宝魔导师密钥展示
2018/12/20 DOTA
python list中append()与extend()用法分享
2013/03/24 Python
Python的Tornado框架异步编程入门实例
2015/04/24 Python
python将字符串转换成数组的方法
2015/04/29 Python
Python中标准模块importlib详解
2017/04/16 Python
window下eclipse安装python插件教程
2017/04/24 Python
详解Python3 基本数据类型
2019/04/19 Python
PyCharm 专业版安装图文教程
2020/02/20 Python
Python3.6 中的pyinstaller安装和使用教程
2020/03/16 Python
Python 代码调试技巧示例代码
2020/08/11 Python
美国儿童珠宝在线零售商:Loveivy
2019/05/22 全球购物
各营销点岗位职责范本
2014/03/05 职场文书
房产分割协议书范文
2014/11/21 职场文书
万能检讨书开头与结尾怎么写
2015/02/17 职场文书
2015年学生会纪检部工作总结
2015/03/31 职场文书
Python实现8种常用抽样方法
2021/06/27 Python
使用 CSS 构建强大且酷炫的粒子动画效果
2022/08/14 HTML / CSS