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 相关文章推荐
Colortip基于jquery的信息提示框插件在IE6下面的显示问题修正方法
Dec 06 Javascript
详细介绍8款超实用JavaScript框架
Oct 25 Javascript
jquery html动态生成select标签出问题的解决方法
Nov 20 Javascript
简单js代码实现selece二级联动(推荐)
Feb 18 Javascript
实现checkbox全选、反选、取消JavaScript小脚本异常
Apr 10 Javascript
jQuery仿天猫实现超炫的加入购物车
May 04 Javascript
jQuery实现表格展开与折叠的方法
May 04 Javascript
JS去除空格和换行的正则表达式(推荐)
Jun 14 Javascript
jQuery插件FusionCharts绘制的2D双柱状图效果示例【附demo源码】
May 13 jQuery
webpack手动配置React开发环境的步骤
Jul 02 Javascript
使用gulp构建前端自动化的方法示例
Dec 25 Javascript
使用Typescript开发微信小程序的步骤详解
Jan 12 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
使用 php4 加速 web 传输
2006/10/09 PHP
php出现内存位置访问无效错误问题解决方法
2014/08/16 PHP
PHP针对字符串开头和结尾的判断方法
2016/07/11 PHP
跟着JQuery API学Jquery 之三 筛选
2010/04/09 Javascript
jquery关于图形报表的运用实现代码
2011/01/06 Javascript
深入理解JavaScript系列(6):S.O.L.I.D五大原则之单一职责SRP
2012/01/15 Javascript
Jquery时间验证和转换工具小例子
2013/07/01 Javascript
jQuery父级以及同级元素查找介绍
2013/09/04 Javascript
JavaScript中“过于”犀利地for/in循环使用示例
2013/10/22 Javascript
JS简单实现登陆验证附效果图
2013/11/19 Javascript
JS代码防止SQL注入的方法(超简单)
2016/04/12 Javascript
Easyui 之 Treegrid 笔记
2016/04/29 Javascript
js绘制购物车抛物线动画
2020/11/18 Javascript
JavaScript触发onScroll事件的函数节流详解
2016/12/14 Javascript
从零开始学习Node.js系列教程二:文本提交与显示方法
2017/04/13 Javascript
vue+axios实现登录拦截的实例代码
2017/05/22 Javascript
详解使用nvm管理多版本node的方法
2017/08/30 Javascript
利用百度地图API获取当前位置信息的实例
2017/11/06 Javascript
element el-tree组件的动态加载、新增、更新节点的实现
2020/02/27 Javascript
功能完善的小程序日历组件的实现
2020/03/31 Javascript
用Python的Django框架来制作一个RSS阅读器
2015/07/22 Python
基于python脚本实现软件的注册功能(机器码+注册码机制)
2016/10/09 Python
Caffe均值文件mean.binaryproto转mean.npy的方法
2018/07/09 Python
Django REST Framework序列化外键获取外键的值方法
2019/07/26 Python
耐克波兰官方网站:Nike波兰
2019/09/03 全球购物
上党课的心得体会
2014/09/02 职场文书
树转促学习心得体会
2014/09/10 职场文书
2015年中学元旦晚会活动方案
2014/12/09 职场文书
体育教师个人总结
2015/02/09 职场文书
教师个人培训总结
2015/02/11 职场文书
2015年全国爱耳日活动总结
2015/02/27 职场文书
培训学校2015年度工作总结
2015/07/20 职场文书
2016年过年放假安排通知
2015/08/18 职场文书
2016高一新生军训心得体会
2016/01/11 职场文书
MySQL系列之十一 日志记录
2021/07/02 MySQL
Go语言特点及基本数据类型使用详解
2022/03/21 Golang