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 相关文章推荐
在一个浏览器里呈现所有浏览器测试结果的前端测试工具的思路
Mar 02 Javascript
JS的千分位算法实现思路
Jul 31 Javascript
JavaScript调用传递变量参数的相关问题及解决办法
Nov 01 Javascript
详解jQuery中的deferred对象的使用(一)
May 27 Javascript
又一款js时钟!transform实现时钟效果
Aug 15 Javascript
Javascript仿京东放大镜的效果
Mar 01 Javascript
完美解决浏览器跨域的几种方法(汇总)
May 08 Javascript
深入理解React Native原生模块与JS模块通信的几种方式
Jul 24 Javascript
react-router4 配合webpack require.ensure 实现异步加载的示例
Jan 18 Javascript
Vue项目分环境打包的实现步骤
Apr 02 Javascript
JQuery animate动画应用示例
May 14 jQuery
layuiAdmin循环遍历展示商品图片列表的方法
Sep 16 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中如何同时使用session和cookie来保存用户登录信息
2013/07/05 PHP
Laravel框架路由配置总结、设置技巧大全
2014/09/03 PHP
PHP实现格式化文件数据大小显示的方法
2015/01/03 PHP
Thinkphp5 微信公众号token验证不成功的原因及解决方法
2017/11/12 PHP
php curl获取到json对象并转成数组array的方法
2018/05/31 PHP
Javascript中string转date示例代码
2013/11/01 Javascript
jquery中validate与form插件提交的方式小结
2016/03/26 Javascript
微信小程序  网络请求API详解
2016/10/25 Javascript
ES6新特性二:Iterator(遍历器)和for-of循环详解
2017/04/20 Javascript
浅谈Node.js ORM框架Sequlize之表间关系
2017/07/24 Javascript
浅析webpack 如何优雅的使用tree-shaking(摇树优化)
2017/08/16 Javascript
基于JavaScript 性能优化技巧心得(分享)
2017/12/11 Javascript
Nuxt.js实战详解
2018/01/18 Javascript
react.js组件实现拖拽复制和可排序的示例代码
2018/08/20 Javascript
Vue在页面数据渲染完成之后的调用方法
2018/09/11 Javascript
js实现导航跟随效果
2018/11/17 Javascript
React如何实现浏览器打印部分内容详析
2019/05/19 Javascript
解决Layui 表格自适应高度的问题
2019/11/15 Javascript
javascript 数组(list)添加/删除的实现
2020/12/17 Javascript
在Python中使用Neo4j数据库的教程
2015/04/16 Python
Python装饰器基础详解
2016/03/09 Python
Python使用struct处理二进制的实例详解
2017/09/11 Python
flask框架实现连接sqlite3数据库的方法分析
2018/07/16 Python
Python实现八皇后问题示例代码
2018/12/09 Python
Python单元测试与测试用例简析
2019/11/09 Python
python 写一个性能测试工具(一)
2020/10/24 Python
SkinCeuticals官网:美国药妆品牌
2018/04/19 全球购物
年终自我鉴定
2013/10/09 职场文书
写好求职信第一句话的技巧
2013/10/26 职场文书
运动会稿件200字
2014/02/07 职场文书
2014年机关植树节活动方案
2014/02/27 职场文书
党员一句话承诺大全
2014/03/28 职场文书
公司联欢会策划方案
2014/05/19 职场文书
组织鉴定材料
2014/06/02 职场文书
推普周国旗下讲话稿
2014/09/21 职场文书
DQL数据查询语句使用示例
2022/12/24 MySQL