Vue使用axios引起的后台session不同操作


Posted in Javascript onAugust 14, 2020

新项目前端用的Vue全家桶,使用axios代替ajax请求后台接口,在调整注册接口的时候,发现在session里取不到验证码,排查后才知道获取验证码和注册两个请求的session不同,sessionId不一样。

现在调整一下Vue的配置,修改main.js文件,添加如下两行代码

import axios from 'axios'

axios.defaults.withCredentials=true;

修改后

import Vue from 'vue'
import App from './App'
import router from './router'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css';
import axios from 'axios'
// 默认false 会导致后台接收到的同一用户的不同请求sessionid都不同,需要改为true
axios.defaults.withCredentials=true;
 
Vue.config.productionTip = false
Vue.use(ElementUI)
  /* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  components: { App },
  template: '<App/>'
})

同时后台也需要配合修改,后台用的是Spring Boot,下面是修改后的结果

@Configuration
public class CorsConfig {
  private CorsConfiguration buildConfig() {
    CorsConfiguration corsConfiguration = new CorsConfiguration();
    corsConfiguration.setAllowCredentials(true);
    // 设置setAllowCredentials = true后就不能设置为*了,要设置具体的
    corsConfiguration.addAllowedOrigin("http://192.168.0.35:8080");
    corsConfiguration.addAllowedOrigin("http://localhost:8080");
    // 允许任何头
    corsConfiguration.addAllowedHeader("*");
    // 允许任何方法(post、get等)
    corsConfiguration.addAllowedMethod("*");
    return corsConfiguration;
  }
 
  @Bean
  public CorsFilter corsFilter() {
    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    // 对接口配置跨域设置
    source.registerCorsConfiguration("/**", buildConfig());
    return new CorsFilter(source);
  }
}

这是一个允许跨越请求的类

设置

corsConfiguration.setAllowCredentials(true);

设置了上行代码后,addAllowedOrigin设置成*就不允许了

corsConfiguration.addAllowedOrigin("*")

需要设置成指定的地址

corsConfiguration.addAllowedOrigin("http://192.168.0.35:8080");

corsConfiguration.addAllowedOrigin("http://localhost:8080");

这样就ok了!

补充知识:vue axios sessionID 每次请求都不同的原因,及修改方式

今天应项目需要,需要在请求当中加入sessionID的验证,但是发现每一次发送给后台的请求当中,sessionID都是不一样的,那么原因是什么呢?

查阅度娘之后,发现自己封装的axios配置文件当中,缺少了一行:

import axios from 'axios'

axios.defaults.withCredentials = true

这是axios的文档: https://www.kancloud.cn/yunye/axios/234845

// `withCredentials` 表示跨域请求时是否需要使用凭证

withCredentials: false, // 默认的

在我封装的axios请求当中,是没有 withCredentials的配置的, 如果没有配置为true,默认为false则向后台发送的请求当中不携带cookie信息,如此每一次sessionID自然会不同。

而再加入这一行配置之后,再次测试,发现出现新的的问题:

Response to preflight request doesn't pass access control check: The value of the 'Access-Control-Allow-Origin' header in the response must not be the wildcard '*' when the request's credentials mode is 'include'. Origin 'http://localhost:8080' is therefore not allowed access. The credentials mode of requests initiated by the XMLHttpRequest is controlled by the withCredentials attribute.

这个时候,就需要后台的同事帮忙了,在后台的跨域请求头配置当中,进行如下两行的配置:

response.setHeader("Access-Control-Allow-Origin", "*");// 不能是通配符*

而是:

Vue使用axios引起的后台session不同操作

作用是将访问接口才ip注册进去。

第二个配置是:

Access-Control-Allow-Credentials: true

若是不设置成这个,也会出错。

而这样前后都设置完毕之后,再次请求,你会发现,还是出错了,那是因为,你需要在修改一个地址

host: 'localhost', // 这里要修改为你本机的ip地址,那少年,你就成功了
 port: 8080, // 端口
 autoOpenBrowser: false,

以上这篇Vue使用axios引起的后台session不同操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JQuery EasyUI的使用
Feb 24 Javascript
基于Jquery和html5实现炫酷的3D焦点图动画
Mar 02 Javascript
深入浅析JavaScript中数据共享和数据传递
Apr 25 Javascript
【经典源码收藏】jQuery实用代码片段(筛选,搜索,样式,清除默认值,多选等)
Jun 07 Javascript
jQuery实现带遮罩层效果的blockUI弹出层示例【附demo源码下载】
Sep 14 Javascript
yarn与npm的命令行小结
Oct 20 Javascript
tab栏切换原理
Mar 22 Javascript
vue实现页面加载动画效果
Sep 19 Javascript
用最少的JS代码写出贪吃蛇游戏
Jan 12 Javascript
vue中v-for加载本地静态图片方法
Mar 03 Javascript
在layui.use 中自定义 function 的正确方法
Sep 16 Javascript
详解Typescript里的This的使用方法
Jan 08 Javascript
解决VUE项目localhost端口服务器拒绝连接,只能用127.0.0.1的问题
Aug 14 #Javascript
vue项目在线上服务器访问失败原因分析
Aug 14 #Javascript
vue设置全局访问接口API地址操作
Aug 14 #Javascript
浅谈vue项目,访问路径#号的问题
Aug 14 #Javascript
解决vue单页面应用打包后相对路径、绝对路径相关问题
Aug 14 #Javascript
vue调用本地摄像头实现拍照功能
Aug 14 #Javascript
解决vue axios跨域 Request Method: OPTIONS问题(预检请求)
Aug 14 #Javascript
You might like
php基础知识:类与对象(4) 范围解析操作符(::)
2006/12/13 PHP
基于magic_quotes_gpc与magic_quotes_runtime的区别与使用介绍
2013/04/22 PHP
php使用timthumb生成缩略图的方法
2016/01/22 PHP
PHP实现QQ快速登录的方法
2016/09/28 PHP
Linux下安装Memcached服务器和客户端与PHP使用示例
2019/04/15 PHP
从JavaScript 到 JQuery (1)学习小结
2009/02/12 Javascript
Prototype RegExp对象 学习
2009/07/19 Javascript
第一个JavaScript入门基础 document.write输出
2010/02/22 Javascript
教你如何在 Javascript 文件里使用 .Net MVC Razor 语法
2014/07/23 Javascript
javascript批量修改文件编码格式的方法
2015/01/27 Javascript
jQuery实现简单的间隔向上滚动效果
2015/03/09 Javascript
jQuery实现响应鼠标背景变化的动态菜单效果代码
2015/08/27 Javascript
JS中用childNodes获取子元素换行会产生一个子元素
2016/12/08 Javascript
Nodejs调用WebService的示例代码
2017/09/29 NodeJs
微信小程序自定义导航栏
2018/12/31 Javascript
基于Vue和Element-Ui搭建项目的方法
2019/09/06 Javascript
es6函数之尾调用优化实例分析
2020/04/25 Javascript
JavaScript实现商品评价五星好评
2020/11/30 Javascript
Python正则表达式教程之三:贪婪/非贪婪特性
2017/03/02 Python
使用Python如何测试InnoDB与MyISAM的读写性能
2018/09/18 Python
Python 通过调用接口获取公交信息的实例
2018/12/17 Python
django admin后台添加导出excel功能示例代码
2019/05/15 Python
Appium+python自动化怎么查看程序所占端口号和IP
2019/06/14 Python
django 信号调度机制详解
2019/07/19 Python
python GUI库图形界面开发之PyQt5菜单栏控件QMenuBar的详细使用方法与实例
2020/02/28 Python
Window10上Tensorflow的安装(CPU和GPU版本)
2020/12/15 Python
详解background属性的8个属性值(面试题)
2020/11/02 HTML / CSS
Silk Therapeutics官网:清洁、抗衰老护肤品
2020/08/12 全球购物
个人评价范文分享
2014/01/11 职场文书
出国留学经济担保书
2014/04/01 职场文书
租车协议书
2015/01/27 职场文书
通知的格式范文
2015/04/27 职场文书
教师节随笔
2015/08/15 职场文书
军训决心书范文
2015/09/22 职场文书
高中物理教学反思
2016/02/19 职场文书
mysql中int(3)和int(10)的数值范围是否相同
2021/10/16 MySQL