spring cloud gateway跨域問題

關注微信公眾號:程序猿的日常分享机错,定期更新分享卒煞。

1、在和axios聯(lián)調(diào)鑒權的時候發(fā)現(xiàn)行疏,在增加自定義header的時候會出現(xiàn)跨域問題


image.png

2匆光、因為是跨域請求,前端會首先發(fā)送一個options的嗅探請求酿联,一次真正的請求
所以會出現(xiàn)兩個403

3终息、網(wǎng)關之前設置的是全局filter

package net.youqu.micro.service.filter;

import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;

/**
 * description: 跨域訪問
 *
 * @author wangpeng
 * @date 2018/09/25
 */
@Component
public class CrossOriginFilter implements GlobalFilter, Ordered {
    private static final String ALL = "*";
    private static final String MAX_AGE = "18000L";


    @Override
    public Mono<Void> filter(ServerWebExchange serverWebExchange, GatewayFilterChain gatewayFilterChain) {
        ServerHttpRequest request = serverWebExchange.getRequest();
//        if (!CorsUtils.isCorsRequest(request)) {
//            return gatewayFilterChain.filter(serverWebExchange);
//        }
        ServerHttpResponse response = serverWebExchange.getResponse();
        HttpHeaders headers = response.getHeaders();
        headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, "*");
        headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS, "POST, GET, PUT, OPTIONS, DELETE, PATCH");
        headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS, "true");
        headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_HEADERS, "*");
        headers.add(HttpHeaders.ACCESS_CONTROL_EXPOSE_HEADERS, ALL);
        headers.add(HttpHeaders.ACCESS_CONTROL_MAX_AGE, MAX_AGE);
        if (request.getMethod() == HttpMethod.OPTIONS) {
            response.setStatusCode(HttpStatus.OK);
            return Mono.empty();
        }
        return gatewayFilterChain.filter(serverWebExchange);
    }

    @Override
    public int getOrder() {
        return -300;
    }
}

然而并沒有什么卵用,這個是百度出來的配置货葬,看起來沒問題采幌,但在前端請求的時候根本就沒有進入到這里,就直接拒絕了休傍。
之后又想了下是否是容器層給拒絕了,由于gateway確實用的人比較少蹲姐,百度了半天都是互相抄的文章磨取,半天有用的沒有,只能采用老的辦法了柴墩,去github上gateway的項目里問作者了忙厌。


image.png

結(jié)果發(fā)現(xiàn)根源在Webflux上邊,由于gateway使用的是webflux江咳,而不是springmvc逢净,需要覆蓋掉webflux默認的CORS處理配置,通過注冊新的CorsWebFilter Bean來解決跨域問題

package net.youqu.micro.service.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.reactive.CorsWebFilter;
import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;
import org.springframework.web.util.pattern.PathPatternParser;

/**
 * description:
 *
 * @author wangpeng
 * @date 2019/01/02
 */
@Configuration
public class CorsConfig {
    @Bean
    public CorsWebFilter corsFilter() {
        CorsConfiguration config = new CorsConfiguration();
        config.addAllowedMethod("*");
        config.addAllowedOrigin("*");
        config.addAllowedHeader("*");

        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(new PathPatternParser());
        source.registerCorsConfiguration("/**", config);

        return new CorsWebFilter(source);
    }
}

配置式:

spring:
  cloud:
    gateway:
      discovery:
      # 跨域
      globalcors:
        corsConfigurations:
          '[/**]':
            allowedHeaders: "*"
            allowedOrigins: "*"
            allowedMethods:
            - GET
              POST
              DELETE
              PUT
              OPTION

關注微信公眾號:程序猿的日常分享,定期更新分享爹土。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末甥雕,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子胀茵,更是在濱河造成了極大的恐慌社露,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件琼娘,死亡現(xiàn)場離奇詭異峭弟,居然都是意外死亡,警方通過查閱死者的電腦和手機脱拼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門瞒瘸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人熄浓,你說我怎么就攤上這事挨务。” “怎么了玉组?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長丁侄。 經(jīng)常有香客問我惯雳,道長,這世上最難降的妖魔是什么鸿摇? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任石景,我火速辦了婚禮,結(jié)果婚禮上拙吉,老公的妹妹穿的比我還像新娘潮孽。我一直安慰自己,他們只是感情好筷黔,可當我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布往史。 她就那樣靜靜地躺著,像睡著了一般佛舱。 火紅的嫁衣襯著肌膚如雪椎例。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天请祖,我揣著相機與錄音订歪,去河邊找鬼。 笑死肆捕,一個胖子當著我的面吹牛刷晋,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼眼虱,長吁一口氣:“原來是場噩夢啊……” “哼喻奥!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起蒙幻,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤映凳,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后邮破,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體诈豌,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年抒和,在試婚紗的時候發(fā)現(xiàn)自己被綠了矫渔。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡摧莽,死狀恐怖庙洼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情镊辕,我是刑警寧澤油够,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站征懈,受9級特大地震影響石咬,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜卖哎,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一鬼悠、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧亏娜,春花似錦焕窝、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至幸缕,卻和暖如春群发,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背发乔。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工熟妓, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人栏尚。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓起愈,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子抬虽,可洞房花燭夜當晚...
    茶點故事閱讀 43,446評論 2 348