使用手册:https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/
1,gateway作用
1,统一入口
2,过滤请求
3,负载均衡
2,工作图示
3,操作步骤
1,引入依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>
2,配置文件
server:port: 19000spring:application:name: gateway//服务名profiles: local-dev//环境,local-dev代表使用本地的yml配置文件,nacos-dev代表使用nacos上的配置文件cloud:gateway:enabled: truediscovery:locator:lower-case-service-id: trueroutes:- id: base //路由唯一标识uri: lb://base //路由目标,HTTP表示固定地址,lb代表负载均衡predicates://断言,判断路由规则- Path=/base/**filters://路由过滤器,对请求做出处理- StripPrefix=1# 忽略认证的路由secure:ignore:uris:#- /**
4,基础配置
1,路由断言工厂
如下:此路由匹配 年 1 月 20 日 17:42 山地时间(丹佛)之后提出的任何请求。
2,过滤器
2.1,路由过滤器 filters
给所有进入网关且符合路由规则uri( )的请求添加一个请求头,
key为 X-Request-red
value为 blue
在服务中通过注解 @RequestHeader 来接收 blue 数值
2.2,默认过滤 default-filters:
对所有符合路由规则的请求过滤
如果要给响应结果添加多个响应头
如图
2.3,全局过滤 Global Filters
对所有路由都生效,且可自定义处理逻辑
步骤:
实现GlobalFilter接口
添加@Order()注解
编写处理逻辑
import org.springframework.cloud.gateway.filter.GatewayFilterChain;import org.springframework.cloud.gateway.filter.GlobalFilter;import org.springframework.core.annotation.Order;import org.springframework.http.HttpStatus;import org.springframework.http.server.reactive.ServerHttpRequest;import org.ponent;import org.springframework.util.MultiValueMap;import org.springframework.web.server.ServerWebExchange;import reactor.core.publisher.Mono;@Component@Order(1)public class AuthorizeFilter implements GlobalFilter {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain){// 1, 获取请求参数ServerHttpRequest request=exchange.getRequest();// 2,获取参数MultiValueMap<String, String> param= request.getQueryParams();String auth=param.getFirst("Authorization");// 3,验证参数值if ("admin".equals(auth)){// 4,是,放行return chain.filter(exchange);}// 5,否,拦截,并设置状态码exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);return exchange.getResponse().setComplete();}}
结论:
3,网关跨域 CORS Configuration
spring:cloud:gateway:globalcors: # 全局跨域add-to-simple-url-handler-mapping: true # 解决option请求被拦截问题cors-configurations:'[/**]':allowedOrigins: "https://docs.spring.io" # 允许哪些网站的跨域请求allowedMethods: # 允许跨域ajax的请求方式- GET- POSTmaxage: 10000 # 跨域检测的有效期allowedHeaders: "*" #允许在请求中携带头信息allowCredentials: true #允许携带cookie
如果觉得《微服务网关 gateway》对你有帮助,请点赞、收藏,并留下你的观点哦!