Spring Cloud Gateway建立在Spring work 5,Project Reactor和Spring Boot 2之上,使用非阻塞API。 Websockets得到支持,并且由于它与Spring紧密集成,所以将会是一个更好的开发体验。
需要JAVA Spring Cloud大型企业分布式微服务云构建的B2B2C电子商务平台源码请加企鹅求求 :二一四七七七五六三三
1.添加maven依赖:
<dependency>
<groupId>org.spring work.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
<groupId>org.spring work.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.spring work.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
注:gateway是用过webflux实现,在项目中请不要引用webmvc,否则初始化会报错
2.配置过滤器:
public class loginfiler implements GlobalFilter {
@Override
public Mono<Void> filter(ServerWebExchange serverWebExchange, GatewayFilterChain gatewayFilterChain) {
。。。
return gatewayFilterChain.filter(serverWebExchange.mutate().request(build).build());
}
}
注:在这里可以实现记录日志和访问权限校验等
3.如果是前后端分离的项目,需要增加配置以解决跨域问题:
package com.gameley.config;
import org.spring work.cloud.client.discovery.DiscoveryClient;
import org.spring work.cloud.gateway.discovery.DiscoveryClientRouteDefinitionLocator;
import org.spring work.cloud.gateway.route.RouteDefinitionLocator;
import org.spring work.context.annotation.Bean;
import org.spring work.context.annotation.Configuration;
import org.spring work.http.HttpHeaders;
import org.spring work.http.HttpMethod;
import org.spring work.http.HttpStatus;
import org.spring work.http.server.reactive.ServerHttpRequest;
import org.spring work.http.server.reactive.ServerHttpResponse;
import org.spring work.web.cors.reactive.CorsUtils;
import org.spring work.web.server.ServerWebExchange;
import org.spring work.web.server.WebFilter;
import org.spring work.web.server.WebFilterChain;
import reactor.core.publisher.Mono;
/**
* @author wwmxd
* @create 2018/3/22.
*/
@Configuration
public class RouteConfiguration {
//这里为支持的请求头,如果有自定义的header字段请自己添加(不知道为什么不能使用*)
private static final String ALLOWED_HEADERS = \"x-requested-with, authorization, Content-Type, Authorization, credential, X-XSRF-TOKEN,token,username,client\";
private static final String ALLOWED_METHODS = \"*\";
private static final String ALLOWED_ORIGIN = \"*\";
private static final String ALLOWED_Expose = \"*\";
private static final String MAX_AGE = \"18000L\";
@Bean
public WebFilter corsFilter() {
return (ServerWebExchange ctx, WebFilterChain chain) -> {
ServerHttpRequest request = ctx.getRequest();
if (CorsUtils.isCorsRequest(request)) {
ServerHttpResponse response = ctx.getResponse();
HttpHeaders headers = response.getHeaders();
headers.add(\"Access-Control-Allow-Origin\", ALLOWED_ORIGIN);
headers.add(\"Access-Control-Allow-Methods\", ALLOWED_METHODS);
headers.add(\"Access-Control-Max-Age\", MAX_AGE);
headers.add(\"Access-Control-Allow-Headers\", ALLOWED_HEADERS);
headers.add(\"Access-Control-Expose-Headers\", ALLOWED_Expose);
headers.add(\"Access-Control-Allow-Credentials\", \"true\");
if (request.getMethod() == HttpMethod.OPTIONS) {
response.setStatusCode(HttpStatus.OK);
return Mono.empty();
}
}
return chain.filter(ctx);
};
}
/**
*
*如果使用了注册中心(如:Eureka),进行控制则需要增加如下配置
*/
@Bean
public RouteDefinitionLocator discoveryClientRouteDefinitionLocator(DiscoveryClient discoveryClient) {
return new DiscoveryClientRouteDefinitionLocator(discoveryClient);
}
}
继续阅读与本文标签相同的文章
上一篇 :
后摩尔时代,如何给你的CPU减负?
-
2019云栖大会 | 究竟哪款NoSQL数据库最适合你?
2026-05-18栏目: 教程
-
CNCF 宣布成立应用交付领域小组,正式开启云原生应用时代
2026-05-18栏目: 教程
-
蚂蚁金服体验科技精选1-3期
2026-05-18栏目: 教程
-
9月新规1天顶平时1个月的收入,消费再少也有返利? 再创日赚万元的日子迎接双11
2026-05-18栏目: 教程
-
《Apache Kafka实战》| 每日读本书
2026-05-18栏目: 教程
