Vue使用axios引起的后臺(tái)session不同操作
新項(xiàng)目前端用的Vue全家桶,使用axios代替ajax請(qǐng)求后臺(tái)接口,在調(diào)整注冊(cè)接口的時(shí)候,發(fā)現(xiàn)在session里取不到驗(yàn)證碼,排查后才知道獲取驗(yàn)證碼和注冊(cè)兩個(gè)請(qǐng)求的session不同,sessionId不一樣。
現(xiàn)在調(diào)整一下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'
// 默認(rèn)false 會(huì)導(dǎo)致后臺(tái)接收到的同一用戶的不同請(qǐng)求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/>'
})
同時(shí)后臺(tái)也需要配合修改,后臺(tái)用的是Spring Boot,下面是修改后的結(jié)果
@Configuration
public class CorsConfig {
private CorsConfiguration buildConfig() {
CorsConfiguration corsConfiguration = new CorsConfiguration();
corsConfiguration.setAllowCredentials(true);
// 設(shè)置setAllowCredentials = true后就不能設(shè)置為*了,要設(shè)置具體的
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();
// 對(duì)接口配置跨域設(shè)置
source.registerCorsConfiguration("/**", buildConfig());
return new CorsFilter(source);
}
}
這是一個(gè)允許跨越請(qǐng)求的類
設(shè)置
corsConfiguration.setAllowCredentials(true);
設(shè)置了上行代碼后,addAllowedOrigin設(shè)置成*就不允許了
corsConfiguration.addAllowedOrigin("*")
需要設(shè)置成指定的地址
corsConfiguration.addAllowedOrigin("http://192.168.0.35:8080");
corsConfiguration.addAllowedOrigin("http://localhost:8080");
這樣就ok了!
補(bǔ)充知識(shí):vue axios sessionID 每次請(qǐng)求都不同的原因,及修改方式
今天應(yīng)項(xiàng)目需要,需要在請(qǐng)求當(dāng)中加入sessionID的驗(yàn)證,但是發(fā)現(xiàn)每一次發(fā)送給后臺(tái)的請(qǐng)求當(dāng)中,sessionID都是不一樣的,那么原因是什么呢?
查閱度娘之后,發(fā)現(xiàn)自己封裝的axios配置文件當(dāng)中,缺少了一行:
import axios from 'axios'
axios.defaults.withCredentials = true
這是axios的文檔: https://www.kancloud.cn/yunye/axios/234845
// `withCredentials` 表示跨域請(qǐng)求時(shí)是否需要使用憑證
withCredentials: false, // 默認(rèn)的
在我封裝的axios請(qǐng)求當(dāng)中,是沒(méi)有 withCredentials的配置的, 如果沒(méi)有配置為true,默認(rèn)為false則向后臺(tái)發(fā)送的請(qǐng)求當(dāng)中不攜帶cookie信息,如此每一次sessionID自然會(huì)不同。
而再加入這一行配置之后,再次測(cè)試,發(fā)現(xiàn)出現(xiàn)新的的問(wèn)題:
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.
這個(gè)時(shí)候,就需要后臺(tái)的同事幫忙了,在后臺(tái)的跨域請(qǐng)求頭配置當(dāng)中,進(jìn)行如下兩行的配置:
response.setHeader("Access-Control-Allow-Origin", "*");// 不能是通配符*
而是:

作用是將訪問(wèn)接口才ip注冊(cè)進(jìn)去。
第二個(gè)配置是:
Access-Control-Allow-Credentials: true
若是不設(shè)置成這個(gè),也會(huì)出錯(cuò)。
而這樣前后都設(shè)置完畢之后,再次請(qǐng)求,你會(huì)發(fā)現(xiàn),還是出錯(cuò)了,那是因?yàn)?,你需要在修改一個(gè)地址
host: 'localhost', // 這里要修改為你本機(jī)的ip地址,那少年,你就成功了 port: 8080, // 端口 autoOpenBrowser: false,
以上這篇Vue使用axios引起的后臺(tái)session不同操作就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue-router history模式服務(wù)器端配置過(guò)程記錄
vue路由有hash和history兩種模式,這篇文章主要給大家介紹了關(guān)于vue-router history模式服務(wù)器端配置的相關(guān)資料,需要的朋友可以參考下2021-06-06
vue項(xiàng)目如何使用$router.go(-1)返回時(shí)刷新原來(lái)的界面
這篇文章主要介紹了vue項(xiàng)目如何使用$router.go(-1)返回時(shí)刷新原來(lái)的界面問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09
vue3.x源碼剖析之?dāng)?shù)據(jù)響應(yīng)式的深入講解
這篇文章主要給大家介紹了關(guān)于vue3.x源碼剖析之?dāng)?shù)據(jù)響應(yīng)式的相關(guān)資料,在講解過(guò)程中,我們會(huì)對(duì)比Vue2.x的API特性,使用有哪些區(qū)別,需要的朋友可以參考下2022-01-01
vue項(xiàng)目中路由懶加載的三種方式(簡(jiǎn)潔易懂)
本文主要介紹了vue項(xiàng)目中路由懶加載的三種方式,主要包括vue異步組件,組件懶加載,webpack的require.ensure(),具有一定的參考價(jià)值,感興趣的可以了解一下2024-01-01
axios上傳文件錯(cuò)誤:Current?request?is?not?a?multipart?request
最近工作中使用vue上傳文件的時(shí)候遇到了個(gè)問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于axios上傳文件錯(cuò)誤:Current?request?is?not?a?multipart?request解決的相關(guān)資料,需要的朋友可以參考下2023-01-01
vue基于element-ui的三級(jí)CheckBox復(fù)選框功能的實(shí)現(xiàn)代碼
最近vue項(xiàng)目需要用到三級(jí)CheckBox復(fù)選框,需要實(shí)現(xiàn)全選反選不確定三種狀態(tài)。這篇文章主要介紹了vue基于element-ui的三級(jí)CheckBox復(fù)選框功能的實(shí)現(xiàn)方法,需要的朋友可以參考下2018-10-10
vue2.0與bootstrap3實(shí)現(xiàn)列表分頁(yè)效果
這篇文章主要為大家詳細(xì)介紹了vue2.0與bootstrap3實(shí)現(xiàn)列表分頁(yè)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11

