vue跨域問題處理

前后端分離開發(fā),開發(fā)完打包放入springboot部署。vue跨域問題的處理。

方法一:代理服務(wù)器(完美解決)

使用代理服務(wù)器可以在開發(fā)環(huán)境解決跨域,但一旦打包放到springboot里,開發(fā)環(huán)境配置的代理服務(wù)器就不管用了。

所以axiso請(qǐng)求的base_url不能寫死,需要?jiǎng)討B(tài)獲取。根據(jù)瀏覽器中輸入的地址來(lái)獲取base_url。

let SQIMS_request =axios.create({

? ? baseURL: window.location.protocol+'//'+window.location.host,

})

這里的window.location.host獲取到的值是不帶http://的。

這樣子設(shè)置后,后端無(wú)需做任何跨域設(shè)置


方法二:前后端配置跨域(有點(diǎn)問題)

前端設(shè)置:

let SQIMS_request =axios.create({

? ? baseURL: window.location.protocol+'//'+window.location.host,

??? withCredentials:true? //開啟憑證,axios在請(qǐng)求的時(shí)候會(huì)攜帶 JSESSIONID,用以shiro驗(yàn)證。如無(wú)需驗(yàn)證,則不設(shè)置此項(xiàng)。配合后端全局跨域設(shè)置,也可解決跨域問題

})


后端設(shè)置

后端全局跨域配置

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.web.cors.CorsConfiguration;

import org.springframework.web.cors.UrlBasedCorsConfigurationSource;

import org.springframework.web.filter.CorsFilter;

/**

* 跨域配置,允許跨域

*/

public class GlobalCorsConfig {

? ? private CorsConfiguration buildConfig() {

? ? ? ? CorsConfiguration corsConfiguration = new CorsConfiguration();

? ? ? ? corsConfiguration.addAllowedOrigin("*"); // 允許任何域名使用

? ? ?? // corsConfiguration.setAllowCredentials(true);

? ? ? ? corsConfiguration.addAllowedHeader("*"); // 允許任何頭

? ? ? ? corsConfiguration.addAllowedMethod("*"); // 允許任何方法(post、get等)

? ? ? ? return corsConfiguration;

? ? }

? ? public CorsFilter corsFilter() {

? ? ? ? UrlBasedCorsConfigurationSource source = new???????? UrlBasedCorsConfigurationSource();

? ? ? ? source.registerCorsConfiguration("/**", buildConfig()); // 對(duì)接口配置跨域設(shè)置

? ? ? ? return new CorsFilter(source);

? ? }

}

withCredentials開啟后,后端全局跨域配置的

corsConfiguration.addAllowedOrigin("*");

就失效了。

需要指定具體的host。例如

corsConfiguration.addAllowedOrigin("http://127.0.0.1:8080");

并且開啟

corsConfiguration.setAllowCredentials(true);


但此方法未能奏效,且沒法根據(jù)請(qǐng)求的host動(dòng)態(tài)設(shè)置。

也可以采用跨域過濾器,在響應(yīng)時(shí),動(dòng)態(tài)設(shè)置 headers

import org.springframework.stereotype.Component;

import javax.servlet.*;

import javax.servlet.annotation.WebFilter;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import java.io.IOException;

//@Component

//@WebFilter(urlPatterns = "/*", filterName = "CorsFilter")

public class CorsFilter implements Filter {

? ? @Override

? ? public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {

? ? ? ? HttpServletResponse response = (HttpServletResponse) res;

? ? ? ? HttpServletRequest reqs = (HttpServletRequest) req;

? ? ? ? String curOrigin = reqs.getHeader("Origin");

? ? ? ? response.setHeader("Access-Control-Allow-Origin", curOrigin == null ? "true" : curOrigin);

? ? ? ? response.setHeader("Access-Control-Allow-Credentials", "true");

? ? ? ? response.setHeader("Access-Control-Allow-Methods", "POST, GET, PATCH, DELETE, PUT");

? ? ? ? response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");

? ? ? ? chain.doFilter(req, res);

? ? }

? ? @Override

? ? public void init(FilterConfig filterConfig) {

? ? }

? ? @Override

? ? public void destroy() {}

}

似乎也未奏效

方法三

使用 jwt(sqims2采用的方式) + 后端全局跨域配置

此方式不需要代理服務(wù)器了,而且前后端無(wú)論是打包部署還是分別部署均可使用

備注

如果是前后端分離部署,

方法一

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ## React項(xiàng)目中基本配置及常見坑的解決 ### 一、創(chuàng)建React項(xiàng)目 ```xml-dtd # 全局安裝腳...
    別回頭丶_77d2閱讀 280評(píng)論 0 0
  • Table of Contents 引言[http://www.itdecent.cn/writer#%E5%B...
    Java零基礎(chǔ)教閱讀 362評(píng)論 0 1
  • 一個(gè)CORS請(qǐng)求的流程 發(fā)送一個(gè)預(yù)檢請(qǐng)求都為Options請(qǐng)求,因?yàn)镺ptions請(qǐng)求不會(huì)對(duì)服務(wù)器做出任何改動(dòng)。且...
    dsjaikdnsajdnua閱讀 1,661評(píng)論 0 1
  • 場(chǎng)景:前后端分離,頁(yè)面和后端項(xiàng)目部署在不同服務(wù)器,出現(xiàn)請(qǐng)求跨域問題。 原因:CORS:跨來(lái)源資源共享(CORS)是...
    某月某日_5ced閱讀 3,312評(píng)論 0 1
  • 備注:有時(shí)候項(xiàng)目有點(diǎn)忙,都忘記思考,一次面試中提出的跨域的問題,才恍然大悟,做了一下小的總結(jié),望指正! 過濾攔截請(qǐng)...
    Cherry300閱讀 683評(píng)論 0 3

友情鏈接更多精彩內(nèi)容