构建SpringCloud网关服务

您所在的位置:网站首页 springcloud配置网关 构建SpringCloud网关服务

构建SpringCloud网关服务

#构建SpringCloud网关服务| 来源: 网络整理| 查看: 265

搭建网关                  org.springframework.cloud         spring-cloud-starter-gateway                        com.alibaba.cloud         spring-cloud-starter-alibaba-nacos-discovery     

他们的版本由父项目中的管理依赖提供:

             org.springframework.cloud         spring-cloud-dependencies         Hoxton.SR10         pom         import                   com.alibaba.cloud         spring-cloud-alibaba-dependencies         2.2.8.RELEASE         pom         import     

配置文件:

spring:   application:     name: gateway-api   cloud:     nacos:       server-addr: localhost:8848   # 配置nacos     gateway:       routes:         - id: user-service                # 路由的id,需要唯一 #          uri: http://127.0.0.1:8080     # 可直接指定服务地址,不会负载均衡           uri: lb://userservice           # 使用服务名称进行负载均衡           predicates:                     # 断言,制定路由规则             - Path=/user/**               # 按照路径进行匹配,需要以 /user/开头 server:   port: 9000路由断言工厂 Route Predict Factory名称说明示例After是某个时间点后的请求- After=2037-01-20T17:42:47.789-07:00[America/Denver]Before是某个时间点之前的请求- Before=2031-04-13T15:14:47.433+08:00[Asia/Shanghai]Between是某两个时间点之前的请求- Between=2037-01-20T17:42:47.789-07:00[America/Denver], 2037-01-21T17:42:47.789-07:00[America/Denver]Cookie请求必须包含某些cookie- Cookie=chocolate, ch.pHeader请求必须包含某些header- Header=X-Request-Id, \d+Host请求必须是访问某个host(域名)- Host=**.somehost.org,**.anotherhost.orgMethod请求方式必须是指定方式- Method=GET,POSTPath请求路径必须符合指定规则- Path=/red/{segment},/blue/**Query请求参数必须包含指定参数- Query=name, Jack或者- Query=nameRemoteAddr请求者的ip必须是指定范围- RemoteAddr=192.168.1.1/24Weight权重处理``路由过滤器 GatewayFilter

有31中不同的路由过滤器工厂(GatewayFilterFactory)。 Spring Cloud 提供了多种网关过滤器工厂(GatewayFilterFactory):网关过滤器工厂。 常见的过滤器工厂如下:

名称说明AddRequestHeader给当前请求添加一个请求头AddRequestParameter给当前请求添加一个参数RemoveRequestHeader移除请求中的一个请求头RemoveRequestParameter移除请求中的一个参数AddResponseHeader给响应结果中添加一个响应头RemoveResponseHeader从响应结果中移除有一个响应头RequestRateLimiter限制请求的流量spring:   cloud:     gateway:       routes:       - id: add_request_header_route         uri: https://example.org         filters:         - AddRequestHeader=X-Request-red, blue      # 将在header中添加 X-Request-red=blue默认过滤器

对所有路由生效,需要写到 default-filters 中。

spring:   application:     name: gateway-api   cloud:     nacos:       server-addr: localhost:8848   # 配置nacos     gateway:       routes:         - id: user-service                # 路由的id,需要唯一 #          uri: http://127.0.0.1:8080     # 可直接指定服务地址,不会负载均衡           uri: lb://userservice           # 使用服务名称进行负载均衡           predicates:                     # 断言,制定路由规则             - Path=/user/**               # 按照路径进行匹配,需要以 /user/开头           filters:             - AddRequestParameter=name, tom     # 只对user-service生效         - id: order-service           uri: lb://orderservice           predicates:             - Path=/order/**            # 默认配置对上面的所有routes生效       default-filters:         - AddRequestParameter=age,20全局过滤器GlobalFilter 的逻辑需要自己写代码实现,需要实现 GlobalFilter 接口。 使用 @Order 或者 Ordered 接口制定过滤器的优先级。(Order越小,优先级越高,越先执行)路由过滤器

defaultFilter

order

Spring

指定,默认是按照声明顺序从1递增

当过滤器的order值一样时,会按照 defaultFilter > 路由过滤器 > GlobalFilter 的顺序执行

//@Order(-1) @Component public class GatewayGlobalFilter implements GlobalFilter, Ordered {     @Override     public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {         ServerHttpRequest request = exchange.getRequest();         ServerHttpResponse response = exchange.getResponse();                  MultiValueMap queryParams = request.getQueryParams();         String username = queryParams.getFirst("username");         if("admin".equals(username)){             // 放行             return chain.filter(exchange);         }         // 添加 401 错误         response.setStatusCode(HttpStatus.UNAUTHORIZED);         return response.setComplete();     }     @Override     public int getOrder() {         return -1;     } }跨域问题处理

域名不同、端口不同时会发生跨域问题。需要是浏览器发起的请求,如果是各个服务之间的互相转发并不会涉及到跨域问题。

添加以下配置开放针对某些网站的跨域请求:

spring:   application:     name: gateway-api   cloud:     nacos:       server-addr: localhost:8848   # 配置nacos     gateway:       # 跨域处理       globalcors:         add-to-simple-url-handler-mapping: true     # 不拦截options请求         cors-configurations:           '[/**]':             allowed-origins:                        # 允许跨域的网站               - "http://localhost:8090"             allowed-methods:               - "GET"               - "POST"               - "DELETE"               - "PUT"               - "OPTIONS"             allowed-headers: "*"                    # 允许请求头中携带的头信息             allow-credentials : true                # 允许携带cookie             maxAge: 360000                          # 本次跨域检测的有效期

编程学习分享 » 构建SpringCloud网关服务

赞 (0) or 分享 (0)


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3