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 相关文章推荐
Aptana调试javascript图解教程
Nov 30 Javascript
node.js中的console.trace方法使用说明
Dec 09 Javascript
JavaScript数组对象赋值用法实例
Aug 04 Javascript
JS及PHP代码编写八大排序算法
Jul 12 Javascript
Laravel中常见的错误与解决方法小结
Aug 30 Javascript
详谈Ajax请求中的async:false/true的作用(ajax 在外部调用问题)
Feb 10 Javascript
jquery.tableSort.js表格排序插件使用方法详解
Aug 12 Javascript
yii form 表单提交之前JS在提交按钮的验证方法
Mar 15 Javascript
Express URL跳转(重定向)的实现方法
Apr 07 Javascript
vue如何使用 Slot 分发内容实例详解
Sep 05 Javascript
node跨域转发 express+http-proxy-middleware的使用
May 31 Javascript
vue+SSM实现验证码功能
Dec 07 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调用shell的方法
2014/11/05 PHP
PHP中strtr字符串替换用法详解
2014/11/26 PHP
使用symfony命令创建项目的方法
2016/03/17 PHP
PHP实现上传图片到数据库并显示输出的方法
2018/05/31 PHP
Yii2处理密码加密及验证的方法
2019/05/12 PHP
PHP实现随机发放扑克牌
2020/04/21 PHP
javascript显示选择目录对话框的代码
2008/11/10 Javascript
JS实现判断滚动条滚到页面底部并执行事件的方法
2014/12/18 Javascript
jquery加载图片时以淡入方式显示的方法
2015/01/14 Javascript
jQuery实现的简单折叠菜单(折叠面板)效果代码
2015/09/16 Javascript
2016年最热门的15 款代码语法高亮工具,美化你的代码
2016/01/06 Javascript
深入学习AngularJS中数据的双向绑定机制
2016/03/04 Javascript
JQuery插件Marquee.js实现无缝滚动效果
2016/04/26 Javascript
JavaScript中清空数组的三种方式
2017/03/22 Javascript
基于Vue渲染与插件的加载顺序的问题详解
2018/03/05 Javascript
如何在项目中使用log4.js的方法步骤
2019/07/16 Javascript
利用JavaScript的Map提升性能的方法详解
2019/08/14 Javascript
如何解决jQuery 和其他JS库的冲突
2020/06/22 jQuery
[01:01:01]完美世界DOTA2联赛循环赛 GXR vs FTD BO2第一场 10.29
2020/10/29 DOTA
使用Python编写vim插件的简单示例
2015/04/17 Python
python中numpy.zeros(np.zeros)的使用方法
2017/11/07 Python
python爬取拉勾网职位数据的方法
2018/01/24 Python
Python分割指定页数的pdf文件方法
2018/10/26 Python
使用python制作一个为hex文件增加版本号的脚本实例
2019/06/12 Python
Python MOCK SERVER moco模拟接口测试过程解析
2020/04/13 Python
详解Python多线程下的list
2020/07/03 Python
使用HTML5的Canvas绘制曲线的简单方法
2015/09/08 HTML / CSS
斯洛伐克时尚服装网上商店:Cellbes
2016/10/20 全球购物
Argos官网:英国家喻户晓的百货零售连锁商
2017/04/03 全球购物
保洁主管岗位职责
2013/11/20 职场文书
文明班集体申报材料
2014/05/23 职场文书
房产协议书范本
2014/10/18 职场文书
女性健康知识讲座主持词
2015/07/04 职场文书
2019大学生实习报告
2019/06/21 职场文书
python 实现体质指数BMI计算
2021/05/26 Python
JMeter对MySQL数据库进行压力测试的实现步骤
2022/01/22 MySQL