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 相关文章推荐
jquery 注意事项与常用语法小结
Jun 07 Javascript
js时间日期和毫秒的相互转换
Feb 22 Javascript
jquery子元素过滤选择器使用示例
Jun 24 Javascript
浅析JavaScript中的同名标识符优先级
Dec 06 Javascript
js实现仿QQ秀换装效果的方法
Mar 04 Javascript
基于vuejs+webpack的日期选择插件
May 21 Javascript
如何通过非数字与字符的方式实现PHP WebShell详解
Jul 02 Javascript
详解使用nvm管理多版本node的方法
Aug 30 Javascript
学习使用ExpressJS 4.0中的新Router的用法
Nov 06 Javascript
浅谈Fetch 数据交互方式
Dec 20 Javascript
JavaScript实现旋转木马轮播图
Mar 16 Javascript
浅谈vue中$event理解和框架中在包含默认值外传参
Aug 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
3
2006/10/09 PHP
PHP 强制下载文件代码
2010/10/24 PHP
用php实现选择排序的解决方法
2013/05/04 PHP
php中访问修饰符的知识点总结
2019/01/27 PHP
在PHP中实现使用Guzzle执行POST和GET请求
2019/10/15 PHP
jquery 事件执行检测代码
2009/12/09 Javascript
JSQL 基于客户端的成绩统计实现方法
2010/05/05 Javascript
超简单JS二级、多级联动的简单实例
2014/02/18 Javascript
js简单抽奖代码
2015/01/16 Javascript
jquery捕捉回车键及获取checkbox值与异步请求的方法
2015/12/24 Javascript
原生js和jQuery实现淡入淡出轮播效果
2015/12/25 Javascript
Spring MVC中Ajax实现二级联动的简单实例
2016/07/06 Javascript
完美实现八种js焦点轮播图(上篇)
2016/07/18 Javascript
node.js中http模块和url模块的简单介绍
2017/10/06 Javascript
Canvas实现微信红包照片效果
2018/08/21 Javascript
Node.js Buffer模块功能及常用方法实例分析
2019/01/05 Javascript
JS call()及apply()方法使用实例汇总
2020/07/11 Javascript
vue中v-for循环选中点击的元素并对该元素添加样式操作
2020/07/17 Javascript
python正则表达式re模块详细介绍
2014/05/29 Python
解决Django的request.POST获取不到内容的问题
2018/05/28 Python
Python版名片管理系统
2018/11/30 Python
python+ffmpeg批量去视频开头的方法
2019/01/09 Python
解决pyPdf和pyPdf2在合并pdf时出现异常的问题
2020/04/03 Python
使用Python-OpenCV消除图像中孤立的小区域操作
2020/07/05 Python
Python 实现一个计时器
2020/07/28 Python
Python多分支if语句的使用
2020/09/03 Python
python zip()函数的使用示例
2020/09/23 Python
Django model class Meta原理解析
2020/11/14 Python
个人找工作的自我评价
2013/10/17 职场文书
争论的故事教学反思
2014/02/06 职场文书
自我推荐信范文
2014/05/09 职场文书
大学生学习计划书
2014/09/15 职场文书
教师节祝酒词
2015/08/11 职场文书
护士工作心得体会
2016/01/25 职场文书
用Python简陋模拟n阶魔方
2021/04/17 Python
Redis+Lua脚本实现计数器接口防刷功能(升级版)
2022/02/12 Redis