日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

spring cloud gateway跨域全局CORS配置方式

瀏覽:133日期:2023-07-03 08:52:37

在Spring 5 Webflux中,配置CORS,可以通過自定義WebFilter實現:

注:此種寫法需真實跨域訪問,監控header中才會帶相應屬性。

代碼實現方式

import org.springframework.http.HttpHeaders;import org.springframework.http.HttpStatus;import org.springframework.http.server.reactive.ServerHttpRequest;import org.springframework.http.server.reactive.ServerHttpResponse;import org.springframework.web.cors.reactive.CorsUtils;import org.springframework.web.server.ServerWebExchange;import org.springframework.web.server.WebFilter;import org.springframework.web.server.WebFilterChain;import org.springframework.http.HttpMethod;import reactor.core.publisher.Mono; import static org.springframework.web.cors.CorsConfiguration.ALL;public class XXXApplication{public static void main(String[] args) { SpringApplication.run(XXXApplication.class, args);}private static final String MAX_AGE = '18000L';@Beanpublic WebFilter corsFilter() { return (ServerWebExchange ctx, WebFilterChain chain) -> {ServerHttpRequest request = ctx.getRequest();if (!CorsUtils.isCorsRequest(request)) { return chain.filter(ctx);}HttpHeaders requestHeaders = request.getHeaders();ServerHttpResponse response = ctx.getResponse();HttpMethod requestMethod = requestHeaders.getAccessControlRequestMethod();HttpHeaders headers = response.getHeaders();headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, requestHeaders.getOrigin());headers.addAll(HttpHeaders.ACCESS_CONTROL_ALLOW_HEADERS, requestHeaders.getAccessControlRequestHeaders());if (requestMethod != null) { headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS, requestMethod.name());}headers.add(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS, 'true');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 chain.filter(ctx); };}}配置實現方式

網上還提到一種配置寫法,實測好用:

spring: cloud: gateway: globalcors:corsConfigurations: ’[/**]’: allowedOrigins: '*' allowedMethods: '*' allowedHeaders: '*'springcloud gateway 跨域的解決

springcloud gateway提供的自帶的跨域過濾器有問題,前端還是會報跨域。zuul不會有這個問題。調試發現主要是游覽器發送嗅探請求(OPTIONS)時,沒有返回跨域的響應頭,從而游覽器報跨域問題。

驗證

由于springcloud gateway為webflux與zuul不一樣,同一個服務,采用spring內置的跨域過濾器,zuul可以通過而gateway報錯。具體配置如下:

1、gateway跨域配置

spring: cloud: gateway: globalcors:cors-configurations: ’[/**]’: # 允許攜帶認證信息 # 允許跨域的源(網站域名/ip),設置*為全部 # 允許跨域請求里的head字段,設置*為全部 # 允許跨域的method, 默認為GET和OPTIONS,設置*為全部 # 跨域允許的有效期 allow-credentials: true allowed-origins: ’*’ allowed-headers: Content-Type,Content-Length, Authorization, Accept,X-Requested-With allowed-methods: ’*’ exposed-headers: Content-Type,Content-Length, Authorization, Accept,X-Requested-With max-age: 3600

此配置無效,前端還是會報跨域問題,主要是前端發送OPTIONS請求時沒有返回跨域信息

2、zuul網關或者其它微服務servlet

向容器中注入跨域過濾器

import lombok.extern.slf4j.Slf4j;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;import org.springframework.boot.web.servlet.FilterRegistrationBean;import org.springframework.context.annotation.Bean;import org.springframework.core.Ordered;import org.springframework.web.cors.CorsConfiguration;import org.springframework.web.cors.UrlBasedCorsConfigurationSource;import org.springframework.web.filter.CorsFilter;/** * @author ZhouChuGang * @version 1.0 * @project langangkj-commonm * @date 2020/5/4 12:24 * @Description 跨域過濾器配置 */@Slf4j@configuration@ConditionalOnMissingBean(CorsFilter.class)@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET)public class CorsFilterConfiguration { public CorsFilterConfiguration() {log.info('==========注入跨域過濾器============='); } @Bean('corsFilter') public CorsFilter corsFilter() {UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();CorsConfiguration config = new CorsConfiguration();// #允許向該服務器提交請求的URI,*表示全部允許config.addAllowedOrigin(CorsConfiguration.ALL);// 允許cookies跨域config.setAllowCredentials(true);// #允許訪問的頭信息,*表示全部config.addAllowedHeader(CorsConfiguration.ALL);// 允許提交請求的方法,*表示全部允許config.addAllowedMethod(CorsConfiguration.ALL);source.registerCorsConfiguration('/**', config);return new CorsFilter(source); } @Autowired @Qualifier('corsFilter') private CorsFilter corsFilter; /** * 配置跨域過濾器 */ @Bean public FilterRegistrationBean<CorsFilter> corsFilterRegistration() {FilterRegistrationBean<CorsFilter> registration = new FilterRegistrationBean<>();registration.setFilter(corsFilter);registration.addUrlPatterns('/*');registration.setName('corsFilter');registration.setOrder(Ordered.HIGHEST_PRECEDENCE);return registration; }}

此方案可以完美解決跨域問題。但是springcloud gateway 不是servlet 規范。

解決方案1、gateway后面的微服務實現跨域

跨域由網關后面的服務實現。

2、實現一個過濾器,來做跨域允許

需要在響應頭中加入以下信息

# 這個為請求頭中的 originadd_header ’Access-Control-Allow-Origin’ ’$http_origin’ ;add_header ’Access-Control-Allow-Credentials’ ’true’ ;add_header ’Access-Control-Allow-Methods’ ’PUT,POST,GET,DELETE,OPTIONS’ ;add_header ’Access-Control-Allow-Headers’ ’Content-Type,Content-Length,Authorization,Accept,X-Requested-With’ ;3、采用nginx做代理,配置跨域響應頭。(強烈推薦)

請求先到nginx,nginx再去請求gateway, 由nginx添加跨域響應頭

add_header ’Access-Control-Allow-Origin’ ’$http_origin’ ;add_header ’Access-Control-Allow-Credentials’ ’true’ ;add_header ’Access-Control-Allow-Methods’ ’PUT,POST,GET,DELETE,OPTIONS’ ;add_header ’Access-Control-Allow-Headers’ ’Content-Type,Content-Length,Authorization,Accept,X-Requested-With’ ;

這里本人為了方便,采用第3中方案,測試完美解決!

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产a久久精品一区二区三区| 国产精品一级在线观看| 毛片不卡一区二区| 国产乱子精品一区二区在线观看 | 久久精品二区亚洲w码| 视频一区二区中文字幕| 好看不卡的中文字幕| 激情欧美日韩一区| 免费精品国产的网站免费观看| 欧美日韩视频网站| 黄在线观看免费网站ktv| 精品视频网站| 精品在线网站观看| 丰满少妇一区| 国产福利片在线观看| 久久久久免费| 日韩在线看片| 136国产福利精品导航网址| 伊人久久大香线蕉av不卡| 欧美成人国产| 亚洲一级二级| 另类av一区二区| 日本欧洲一区二区| 免费精品视频最新在线| 蜜臀91精品一区二区三区| 日韩中文字幕| 欧美日韩亚洲一区在线观看| 国产精品免费大片| 日本久久精品| 成人精品中文字幕| 国产精品外国| 日本综合视频| 久久精品国产999大香线蕉| 日韩深夜视频| 最新日韩欧美| 亚洲影视一区二区三区| 国产精品欧美在线观看| 国产suv精品一区二区四区视频 | 国产精品一区二区三区av麻| 精品视频一区二区三区四区五区 | 蜜臀av免费一区二区三区| 亚洲欧洲美洲国产香蕉| 欧美激情视频一区二区三区免费 | 国产精品1区在线| 亚洲h色精品| 午夜电影一区| 9999国产精品| 欧美日韩国产欧| 日本强好片久久久久久aaa| 久久99偷拍| 久久午夜影院| 国产一区日韩一区| 色婷婷成人网| 欧美国产极品| 最新日韩欧美| 国产亚洲观看| 欧美黄色一区二区| 色婷婷色综合| 欧美不卡高清| 亚洲精品麻豆| 久久99久久人婷婷精品综合| 欧美日韩国产v| 久久国产精品亚洲77777| 欧美天堂在线| 精品国产欧美日韩| 日韩视频一区| 国产精品一页| 日韩欧美国产精品综合嫩v| 狠狠色综合网| 婷婷综合一区| 日韩国产一区二区| 国产高清一区二区| 日本h片久久| 伊人久久国产| 日韩一区二区三区在线看| 成人在线黄色| 久久最新视频| 精品国产日韩欧美精品国产欧美日韩一区二区三区 | 久久精品一本| 欧美在线亚洲综合一区| 久久国产精品免费一区二区三区| 成人国产精品| 久久亚洲图片| 日韩1区2区| 亚洲欧美日韩国产综合精品二区| 国产精品草草| 宅男噜噜噜66国产日韩在线观看| 欧美中文高清| 亚洲特色特黄| 伊人久久大香线蕉av超碰演员| 青青在线精品| 欧美高清一区| 精品国产麻豆| 亚洲精品高潮| 日韩免费高清| 91精品国产一区二区在线观看| 久久久久网站| 国产精品伊人| 久久午夜精品| 久久伊人国产| 日韩精品乱码av一区二区| 欧洲av一区二区| 日韩高清电影免费| 亚洲高清二区| 精品五月天堂| 伊人影院久久| 婷婷激情一区| 久久成人av| 亚洲一区二区毛片| 亚洲91视频| 国产一区二区三区成人欧美日韩在线观看| 国产亚洲一级| 久久久一二三| 欧美国产不卡| 另类av一区二区| 久久精品123| 精品中国亚洲| 国产香蕉精品| 午夜影院欧美| 日韩一区二区久久| 日韩在线高清| 精品国产精品国产偷麻豆| 日产欧产美韩系列久久99| 国产一区清纯| 亚洲综合在线电影| 国产成人精品亚洲线观看 | 亚洲天堂日韩在线| 亚洲午夜久久久久久尤物| 精品色999| 欧美日韩网址| 亚洲一区网站| 在线国产一区| 国产尤物精品| 色88888久久久久久影院| 国产一区二区三区网| 嫩呦国产一区二区三区av| 亚洲深深色噜噜狠狠爱网站| 精品精品99| 久久男女视频| 亚洲黄色免费av| 国产精品22p| 日韩精品免费视频人成| 亚洲三级精品| 亚洲免费资源| 亚洲tv在线| 亚洲毛片在线免费| 亚洲成人精选| 日韩午夜高潮| 三级欧美在线一区| 老司机久久99久久精品播放免费| 黄页网站一区| 丝袜美腿亚洲色图| 日韩精品一级二级 | 国产一区二区色噜噜| 久久av国产紧身裤| 久久国产精品免费一区二区三区 | 日韩网站在线| 午夜在线视频一区二区区别| 亚洲一区二区免费看| 免费日韩av片| 欧美福利一区| 99国产精品久久久久久久成人热| 国产精品99一区二区| 91九色精品| 亚洲欧美高清| 日本一区二区中文字幕| 欧美视频精品全部免费观看| 久久wwww| 精品一区二区三区四区五区| 九九久久国产| xxxxx性欧美特大| 免费视频久久| 欧美亚洲一级| 电影91久久久| 九九久久电影| 亚洲视频国产精品| 国产日韩在线观看视频| 欧美极品一区二区三区| 国产精品麻豆久久| 国产日韩欧美中文在线| 精品国产中文字幕第一页| 日韩精品专区| 在线综合视频| 日韩不卡一二三区| 久久精品国产一区二区| 久久九九电影| 亚洲在线免费| 天堂久久一区| 韩日一区二区| 免费在线观看精品| 久久一区视频| 欧美在线资源| 青草国产精品久久久久久| 久久精品毛片| 99精品视频在线| 亚洲人成高清| 久久久久伊人| 亚洲一二av| 国产精品18| 欧美成a人国产精品高清乱码在线观看片在线观看久|