Vue使用axios引起的后臺session不同操作
新項目前端用的Vue全家桶,使用axios代替ajax請求后臺接口,在調(diào)整注冊接口的時候,發(fā)現(xiàn)在session里取不到驗證碼,排查后才知道獲取驗證碼和注冊兩個請求的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 會導(dǎo)致后臺接收到的同一用戶的不同請求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,下面是修改后的結(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(); // 對接口配置跨域設(shè)置 source.registerCorsConfiguration("/**", buildConfig()); return new CorsFilter(source); } }
這是一個允許跨越請求的類
設(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ǔ)充知識:vue axios sessionID 每次請求都不同的原因,及修改方式
今天應(yīng)項目需要,需要在請求當(dāng)中加入sessionID的驗證,但是發(fā)現(xiàn)每一次發(fā)送給后臺的請求當(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` 表示跨域請求時是否需要使用憑證
withCredentials: false, // 默認(rèn)的
在我封裝的axios請求當(dāng)中,是沒有 withCredentials的配置的, 如果沒有配置為true,默認(rèn)為false則向后臺發(fā)送的請求當(dāng)中不攜帶cookie信息,如此每一次sessionID自然會不同。
而再加入這一行配置之后,再次測試,發(fā)現(xiàn)出現(xià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.
這個時候,就需要后臺的同事幫忙了,在后臺的跨域請求頭配置當(dāng)中,進(jìn)行如下兩行的配置:
response.setHeader("Access-Control-Allow-Origin", "*");// 不能是通配符*
而是:
作用是將訪問接口才ip注冊進(jìn)去。
第二個配置是:
Access-Control-Allow-Credentials: true
若是不設(shè)置成這個,也會出錯。
而這樣前后都設(shè)置完畢之后,再次請求,你會發(fā)現(xiàn),還是出錯了,那是因為,你需要在修改一個地址
host: 'localhost', // 這里要修改為你本機(jī)的ip地址,那少年,你就成功了 port: 8080, // 端口 autoOpenBrowser: false,
以上這篇Vue使用axios引起的后臺session不同操作就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue.js與element-ui實現(xiàn)菜單樹形結(jié)構(gòu)的解決方法
本文通過實例給大家介紹了vue.js與element-ui實現(xiàn)菜單樹形結(jié)構(gòu),非常不錯,具有參考借鑒價值,需要的朋友可以參考下2018-04-04解決vue項目中頁面調(diào)用數(shù)據(jù) 在數(shù)據(jù)加載完畢之前出現(xiàn)undefined問題
今天小編就為大家分享一篇解決vue項目中頁面調(diào)用數(shù)據(jù) 在數(shù)據(jù)加載完畢之前出現(xiàn)undefined問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11vue預(yù)覽 pdf、word、xls、ppt、txt文件的實現(xiàn)方法
這篇文章主要介紹了vue預(yù)覽 pdf、word、xls、ppt、txt文件的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-04-04Vuejs學(xué)習(xí)筆記之使用指令v-model完成表單的數(shù)據(jù)雙向綁定
表單類控件承載了一個網(wǎng)頁數(shù)據(jù)的錄入與交互,本章將介紹如何使用指令v-model完成表單的數(shù)據(jù)雙向綁定功能,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值。感興趣的朋友跟隨小編一起看看吧2019-04-04vue vite之LogicFlow安裝核心依賴及項目初始化詳解
這篇文章主要為大家介紹了vue vite之LogicFlow安裝核心依賴及項目初始化詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01Vue中v-if、v-if-else、v-else-if與v-show的基本使用
v-if,v-else,v-else-if,v-if指令用于條件性地渲染一塊內(nèi)容,這塊內(nèi)容只會在指令的表達(dá)式返回truth值的時候被渲染,這篇文章主要給大家介紹了關(guān)于Vue中v-if、v-if-else、v-else-if與v-show的基本使用,需要的朋友可以參考下2022-10-10ElementUi中select框在頁面滾動時el-option超出元素區(qū)域的問題解決
本文主要介紹了ElementUi中select框在頁面滾動時el-option超出元素區(qū)域的問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-08-08Vue路由的模塊自動化與統(tǒng)一加載實現(xiàn)
這篇文章主要介紹了Vue路由的模塊自動化與統(tǒng)一加載實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06