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写的一个链表实现代码
Oct 25 Javascript
jQuery队列控制方法详解queue()/dequeue()/clearQueue()
Dec 02 Javascript
ExtJS自定义主题(theme)样式详解
Nov 18 Javascript
javascript操作数组详解
Dec 17 Javascript
JQuery控制radio选中和不选中方法总结
Apr 15 Javascript
JQuery显示、隐藏div的几种方法简明总结
Apr 16 Javascript
SpringMVC返回json数据的三种方式
Dec 10 Javascript
jQuery动态生成不规则表格(前后端)
Feb 21 Javascript
前端页面文件拖拽上传模块js代码示例
May 19 Javascript
js评分组件使用详解
Jun 06 Javascript
Vue实现远程获取路由与页面刷新导致404错误的解决
Jan 31 Javascript
vue请求本地自己编写的json文件的方法
Apr 25 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
Yii针对添加行的增删改查操作示例
2016/10/18 PHP
CI框架教程之优化验证码机制详解【验证码辅助函数】
2019/04/16 PHP
laravel 解决多库下的DB::transaction()事务失效问题
2019/10/21 PHP
laravel框架中控制器的创建和使用方法分析
2019/11/23 PHP
javascript 兼容所有浏览器的DOM扩展功能
2012/08/01 Javascript
javascript alert乱码的解决方法
2013/11/05 Javascript
jQuery根据ID获取input、checkbox、radio、select的示例
2014/08/11 Javascript
JavaScript之数组(Array)详解
2015/04/01 Javascript
js简单实现调整网页字体大小的方法
2016/07/23 Javascript
根据输入邮箱号跳转到相应登录地址的解决方法
2016/12/13 Javascript
详解AngularJS脏检查机制及$timeout的妙用
2017/06/19 Javascript
实例讲解Vue.js中router传参
2018/04/22 Javascript
详解vue填坑之解决部分浏览器不支持pushState方法
2018/07/12 Javascript
通过JS运行机制的角度说说作用域
2019/03/12 Javascript
小程序和web画三角形实现解析
2019/09/02 Javascript
利用JS判断元素是否为数组的方法示例
2021/01/08 Javascript
浅析Python中将单词首字母大写的capitalize()方法
2015/05/18 Python
python中argparse模块用法实例详解
2015/06/03 Python
python celery分布式任务队列的使用详解
2019/07/08 Python
python正则表达式匹配IP代码实例
2019/12/28 Python
python使用配置文件过程详解
2019/12/28 Python
python实现126邮箱发送邮件
2020/05/20 Python
Python3.9 beta2版本发布了,看看这7个新的PEP都是什么
2020/06/10 Python
CSS实现聊天气泡效果
2020/04/26 HTML / CSS
巴西购物网站:Estrela10
2018/12/13 全球购物
Farah官方网站:男士服装及配件
2019/11/01 全球购物
好的演讲稿开场白
2013/12/30 职场文书
五好家庭申报材料
2014/12/20 职场文书
清明节扫墓活动总结
2015/02/09 职场文书
婚宴来宾致辞
2015/07/28 职场文书
2019客服个人年终工作总结范文
2019/07/08 职场文书
Django使用channels + websocket打造在线聊天室
2021/05/20 Python
开机音效回归! Windows 11重新引入开机铃声
2021/11/21 数码科技
《勇者辞职不干了》上卷BD发售宣传CM公开
2022/04/08 日漫
Ubuntu18.04下QT开发Android无法连接设备问题解决实现
2022/06/01 Java/Android
windows server2012 R2下安装PaddleOCR服务的的详细步骤
2022/09/23 Servers