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获得网页背景色和字体色的方法
Mar 21 Javascript
浅谈jQuery中 wrap() wrapAll() 与 wrapInner()的差异
Nov 12 Javascript
DOM基础教程之使用DOM控制表格
Jan 20 Javascript
javascript实现仿IE顶部的可关闭警告条
May 05 Javascript
理解JavaScript中Promise的使用
Jan 18 Javascript
Javascript日期格式化format函数的使用方法
Aug 30 Javascript
angular实现IM聊天图片发送实例
May 08 Javascript
在原生不支持的旧环境中添加兼容的Object.keys实现方法
Sep 11 Javascript
Vue 开发音乐播放器之歌手页右侧快速入口功能
Aug 08 Javascript
详解javascript设计模式三:代理模式
Mar 25 Javascript
推荐几个不错的console调试技巧实现
Dec 20 Javascript
JavaScript, select标签元素左右移动功能实现
May 14 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表单验证功能
2019/02/15 PHP
Thinkphp框架使用list_to_tree 实现无限级分类列出所有节点示例
2020/04/04 PHP
非常不错的一个javascript 类
2006/11/07 Javascript
jquery trim() 功能源代码
2011/02/14 Javascript
jQuery常见开发技巧详细整理
2013/01/02 Javascript
Javascript中valueOf与toString区别浅析
2013/03/19 Javascript
jQuery选择器全面总结
2014/01/06 Javascript
Javascript封装DOMContentLoaded事件实例
2014/06/12 Javascript
jQuery 过滤方法filter()选择具有特殊属性的元素
2014/06/15 Javascript
JS实现从表格中动态删除指定行的方法
2015/03/31 Javascript
详解用vue-cli来搭建vue项目和webpack
2017/04/20 Javascript
angularjs利用directive实现移动端自定义软键盘的示例
2017/09/20 Javascript
关于redux-saga中take使用方法详解
2018/02/27 Javascript
JS简单生成由字母数字组合随机字符串示例
2018/05/25 Javascript
vue实现滑动到底部加载更多效果
2020/10/27 Javascript
[44:40]2018DOTA2亚洲邀请赛3月30日 小组赛A组Liquid VS OG
2018/03/31 DOTA
python编程之requests在网络请求中添加cookies参数方法详解
2017/10/25 Python
Python内置模块ConfigParser实现配置读写功能的方法
2018/02/12 Python
python使用openCV遍历文件夹里所有视频文件并保存成图片
2020/01/14 Python
彻底搞懂 python 中文乱码问题(深入分析)
2020/02/28 Python
python和php哪个更适合写爬虫
2020/06/22 Python
使用bandit对目标python代码进行安全函数扫描的案例分析
2021/01/27 Python
用HTML5实现手机摇一摇的功能的教程
2012/10/30 HTML / CSS
葡萄牙鞋子品牌:Fair
2016/12/10 全球购物
专升本个人自我评价
2013/12/22 职场文书
业绩考核岗位职责
2014/02/01 职场文书
新闻学专业个人求职信写作
2014/02/04 职场文书
大学自我评价
2014/02/12 职场文书
重温入党誓词主持词
2015/06/29 职场文书
2016年优秀教师先进事迹材料
2016/02/26 职场文书
想要创业,那么你做好准备了吗?
2019/07/01 职场文书
创业计划书之面包店
2019/09/12 职场文书
python如何利用cv2模块读取显示保存图片
2021/06/04 Python
解决vue $http的get和post请求跨域问题
2021/06/07 Vue.js
Python selenium的这三种等待方式一定要会!
2021/06/10 Python
如何利用opencv判断两张图片是否相同详解
2021/07/07 Python