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 相关文章推荐
JS array 数组详解
Mar 22 Javascript
推荐20家国外的脚本下载网站
Apr 28 Javascript
jQuery判断对象是否存在的方法
Feb 05 Javascript
javascript创建动态表单的方法
Jul 25 Javascript
使用Object.defineProperty实现简单的js双向绑定
Apr 15 Javascript
浅析Javascript的自动分号插入(ASI)机制
Sep 29 Javascript
jQuery-mobile事件监听与用法详解
Nov 23 Javascript
基于百度地图api清除指定覆盖物(Overlay)的方法
Jan 26 Javascript
vuex的module模块用法示例
Nov 12 Javascript
详解webpack引入第三方库的方式以及注意事项
Jan 15 Javascript
Vue编程式跳转的实例代码详解
Jul 10 Javascript
实现一个简单得数据响应系统
Nov 11 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
关于js和php对url编码的处理方法
2014/03/04 PHP
php采用ajax数据提交post与post常见方法总结
2014/11/10 PHP
php进行支付宝开发中return_url和notify_url的区别分析
2014/12/22 PHP
PHP绕过open_basedir限制操作文件的方法
2018/06/10 PHP
解决laravel 出现ajax请求419(unknown status)的问题
2019/09/03 PHP
js中for in的用法示例解析
2013/12/25 Javascript
js日期对象兼容性的处理方法
2014/01/28 Javascript
js格式化输入框内金额、银行卡号
2016/02/01 Javascript
Easyui在treegrid添加控件的实现方法
2017/06/23 Javascript
小程序采集录音并上传到后台
2019/11/22 Javascript
JS实现排行榜文字向上滚动轮播效果
2019/11/26 Javascript
[36:41]完美世界DOTA2联赛循环赛FTD vs Magma第一场 10月30日
2020/10/31 DOTA
[01:08:30]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant BO3 第一场 2月28日
2021/03/11 DOTA
Python基于Floyd算法求解最短路径距离问题实例详解
2018/05/16 Python
Python异常处理知识点总结
2019/02/18 Python
详谈tensorflow gfile文件的用法
2020/02/05 Python
HTML5的结构和语义(1):前言
2008/10/17 HTML / CSS
中粮集团旗下食品网上购物网站:我买网
2016/09/22 全球购物
GafasWorld西班牙:购买太阳镜、眼镜和隐形眼镜
2019/09/08 全球购物
Prototype是怎么扩展DOM的
2014/10/01 面试题
会计实习生工作总结的自我评价
2013/10/07 职场文书
开业庆典邀请函
2014/01/08 职场文书
春季运动会广播稿大全
2014/02/19 职场文书
高一学生期末评语
2014/04/25 职场文书
以幸福为主题的活动方案
2014/08/22 职场文书
学校组织向国旗敬礼活动方案(中小学适用)
2014/09/27 职场文书
合法的离婚协议书范本
2014/10/23 职场文书
2014年药剂科工作总结
2014/11/26 职场文书
工作能力自我评价2015
2015/03/05 职场文书
学校2015年纠风工作总结
2015/05/15 职场文书
Golang 正则匹配效率详解
2021/04/25 Golang
Python内置数据结构列表与元组示例详解
2021/08/04 Python
JavaScript严格模式不支持八进制的问题讲解
2021/11/07 Javascript
升级 Win11 还是坚守 Win10?微软 Win11 新系统缺失功能大盘点
2022/04/05 数码科技
MySQL 数据 data 基本操作
2022/05/04 MySQL
单机多实例部署 MySQL8.0.20
2022/05/15 MySQL