gateway的基础应用
2025-03-03 14:47:41 1 举报
AI智能生成
gateway的基础应用,包括可实现功能举例、springboot集成、路由配置、断言、过滤器、跨域等
作者其他创作
大纲/内容
可实现的基础功能
统一入口
实现业务集群服务的统一访问地址http(s)://gatewayServer:port/
请求路由
将gateway注册到nacos的注册中心,网关就可以获取所有注册到nacos的服务,通过对routes的配置,可以实现不同服务的路由转发
负载均衡
默认使用Ribbon,自动通过负载均衡算法选择目标实例
可以通过继承LoadBalancerClientFilter,并重写choose方法
通过注解@ConditionalOnProperty实现按配置的方式实现不同的负载均衡策略
流量控制
通过集成sentinel,实现对网关的每个请求实现流量控制,做到全局限制
身份认证
可以实现身份认证功能,例如通过jwt实现token的生成,然后通过在全局过滤器中,增加限制,达到所有请求的授权访问的目的
协议转换
在请求过滤时,可以实现协议的转换,例如从http请求拿到请求数据,然后根据请求数据,再选择性的转发到其他类型的协议,比如dubbo
系统监控
因为所有请求都需要通过路由,因此可以记录请求的访问总量、请求起止时间、慢请求连接等
安全防护
可以对所有请求做XSS(跨站请求攻击)、SQL注入、跨域等防护措施
SpringBoot
配置nacos的参数
启动类添加@EnableDiscoveryClient
全局filter
需要实现GlobalFilter, Ordered两个接口
实现方法filter
实现方法getOrder,排序数字越小越靠前
spring.cloud.gateway
routes
id:路由id(代理微服务)
uri:转发的请求地址(lb://对应微服务名,也就是注册到nacos的名称)
predicates:断言
写法一
name:断言类型名
args:断言匹配参数或规则
写法二
name=args
自定义断言工厂
创建类,类名以RoutePredicateFactory结尾,并加上@Component注解,继承AbstractRoutePredicateFactory<XXXRoutePredicateFactory.Config>
重写apply方法,并在test方法中,返回true表示断言成功,false断言失败
通过重写shortcutFieldOrder方法,可以定义param和value的传值顺序
filters:过滤器
路径处理类
- RewritePath=/api/(?<segment>.*), /$\{segment} # 将 `/api/xxx` 重写为 `/xxx
通过正则表达式重写请求路径,常用于路径映射或版本控制
通过正则表达式重写请求路径,常用于路径映射或版本控制
- StripPrefix=1 # 去除路径中的第一个层级(如 `/api/user` → `/user`)
截断请求路径的前缀,通常与路由前缀配合使用。
截断请求路径的前缀,通常与路由前缀配合使用。
请求/响应头处理类
- AddRequestHeader=X-Request-Foo, Bar # 添加头 `X-Request-Foo: Bar`
向下游请求添加指定的请求头
向下游请求添加指定的请求头
- RemoveRequestHeader=Cookie # 删除 `Cookie` 头
删除请求中的指定头信息(如敏感头)
删除请求中的指定头信息(如敏感头)
- AddResponseHeader=Access-Control-Allow-Origin, * # 允许跨域
向响应中添加指定头信息(如 CORS 配置)
向响应中添加指定头信息(如 CORS 配置)
安全与校验类
- RequestSize=5MB # 限制请求体不超过 5MB
限制请求体大小,防止超大请求压垮服务
限制请求体大小,防止超大请求压垮服务
重试与重定向类
- Retry=3, 503 # 失败时重试 3 次,仅对 503 状态生效
根据响应状态码或异常自动重试请求(如网络抖动场景)
根据响应状态码或异常自动重试请求(如网络抖动场景)
- RedirectTo=302, https://example.com # 302 临时重定向
将请求重定向到指定 URL(如 HTTP 到 HTTPS)
将请求重定向到指定 URL(如 HTTP 到 HTTPS)
其他实用过滤器
- SetPath=/new-path # 将路径强制设为 `/new-path`
直接替换请求路径(与 RewritePath 类似,但语法更简洁)
直接替换请求路径(与 RewritePath 类似,但语法更简洁)
- SetStatus=401 # 强制返回 401 状态码
修改响应状态码(如统一错误码处理)
修改响应状态码(如统一错误码处理)
自定义过滤器
创建类,且类名必须以GatewayFilterFactory结尾,并添加注解@Component,以便加入spring容器
继承AbstractNameValueGatewayFilterFactory,并重写apply方法
在配置中添加过滤器配置:- OnceToken=参数名, 参数值(虽然是一个key-value,但是实际使用时,可以根据业务需要,任意配置,两者可以没有任何关系)
order:请求进来后,多个routes配置项的匹配顺序
default-filters
默认filter,每个请求都会经过默认过滤器
仅支持内置的过滤器,不支持自定义
globalcors
配置全局cors(全局跨域)
便于前后端联调时,为所有微服务添加跨域
0 条评论
下一页