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 相关文章推荐
javascript延时重复执行函数 lLoopRun.js
Jun 29 Javascript
基于jquery的不规则矩形的排列实现代码
Apr 16 Javascript
不要使用jQuery触发原生事件的方法
Mar 03 Javascript
jquery获取tagName再进行判断
May 29 Javascript
node.js中的fs.write方法使用说明
Dec 15 Javascript
JQuery PHP图片在线裁剪实例
Jul 27 Javascript
jQuery实现页面滚动时智能浮动定位
Jan 08 Javascript
分享Bootstrap简单表格、表单、登录页面
Aug 04 Javascript
JS数组中对象去重操作示例
Jun 04 Javascript
Vue中跨域及打包部署到nginx跨域设置方法
Aug 26 Javascript
jquery实现拖拽小方块效果
Dec 10 jQuery
javascript实现下拉菜单效果
Feb 09 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自定义函数之递归删除文件及目录
2010/08/08 PHP
php验证手机号码
2015/11/11 PHP
Javascript学习笔记1 数据类型
2010/01/11 Javascript
一个很简单的jquery+xml+ajax的无刷新树结构(无css,后台是c#)
2010/06/02 Javascript
window.open的页面如何刷新(父页面)上层页面
2012/12/28 Javascript
jquery中选择块并改变属性值的方法
2013/07/31 Javascript
angularJS 中$attrs方法使用指南
2015/02/09 Javascript
JavaScript模拟重力状态下抛物运动的方法
2015/03/03 Javascript
面向切面编程(AOP)的理解
2015/05/01 Javascript
js实现兼容性好的微软官网导航下拉菜单效果
2015/09/07 Javascript
webpack踩坑之路图片的路径与打包
2017/09/05 Javascript
vue2.x集成百度UEditor富文本编辑器的方法
2018/09/21 Javascript
详解Vue This$Store总结
2018/12/17 Javascript
Vue组件为什么data必须是一个函数
2020/06/11 Javascript
Antd-vue Table组件添加Click事件,实现点击某行数据教程
2020/11/17 Javascript
vue动态合并单元格并添加小计合计功能示例
2020/11/26 Vue.js
[35:29]Secret vs VG 2018国际邀请赛淘汰赛BO3 第三场 8.23
2018/08/24 DOTA
跟老齐学Python之开始真正编程
2014/09/12 Python
python实现爬山算法的思路详解
2019/04/09 Python
Pycharm最常用的快捷键及使用技巧
2020/03/05 Python
浅谈python3打包与拆包在函数的应用详解
2020/05/02 Python
Django contrib auth authenticate函数源码解析
2020/11/12 Python
CSS3中的Transition过度与Animation动画属性使用要点
2016/05/20 HTML / CSS
canvas实现圆形进度条动画的示例代码
2017/12/26 HTML / CSS
建筑学推荐信
2013/11/03 职场文书
医学实习生自我鉴定
2013/12/12 职场文书
业绩考核岗位职责
2014/02/01 职场文书
信息服务专业毕业生求职信
2014/03/02 职场文书
表彰会主持词
2014/03/26 职场文书
写求职信要注意什么问题
2014/04/12 职场文书
党员三严三实心得体会
2014/10/13 职场文书
2015年度质量工作总结报告
2015/04/27 职场文书
2015年村党支部工作总结
2015/04/30 职场文书
为什么不建议在go项目中使用init()
2021/04/12 Golang
ztree+ajax实现文件树下载功能
2021/05/18 Javascript
MySQL数据库 任意ip连接方法
2022/05/20 MySQL