编辑
2025-09-08
java
00

目录

1.为什么需要网关
2.操作
(1)创建项目引入依赖服务发现和gateway网关依赖
(2)实现请求路由功能
(3)总结
(4)路由断言工厂
(5)过滤器工厂
(6)跨域问题

1.为什么需要网关

image.png

2.操作

(1)创建项目引入依赖服务发现和gateway网关依赖

image.png

pom
<dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> </dependencies>

(2)实现请求路由功能

image.png

config
spring: application: name: gateway cloud: nacos: server-addr: localhost:80 gateway: routes: - id: user-service uri: lb://userservice # 路由的目标地址 predicates: - Path=/user/** # 判断路径是否是user开头 - id: order-service uri: lb://orderservice predicates: - Path=/order/** server: port: 10010

(3)总结

image.png

(4)路由断言工厂

image.png

(5)过滤器工厂

image.png 代码示例

config
gateway: routes: - id: user-service uri: lb://userservice # 路由的目标地址 predicates: - Path=/user/** # 判断路径是否是user开头 - id: order-service uri: lb://orderservice predicates: - Path=/order/** filters: - AddRequestHeader=Truth,Hello world # 添加的过滤器

向所有微服务添加过滤器 默认过滤器 image.png 全局过滤器 编写代码自定义过滤逻辑 实现golabalFilter接口 image.png 案例:

image.png

java
package cn.itcast.gateway; 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.springframework.stereotype.Component; import org.springframework.util.MultiValueMap; import org.springframework.web.server.ServerWebExchange; import reactor.core.publisher.Mono; @Order(-1) // 定义过滤器的顺序 默认最低 数字越小最先执行 @Component public class AuthorizeFilter implements GlobalFilter { @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { // 1.获取请求参数 ServerHttpRequest request =exchange.getRequest(); MultiValueMap<String,String> params= request.getQueryParams(); // 2获取参数中的authorization String auth = params.getFirst("authorization"); if ("admin".equals(auth)){ return chain.filter(exchange); // 放行 } // 否 拦截 // 设置状态码 exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED); // 拦截请求 return exchange.getResponse().setComplete(); // } }

过滤器执行顺序 1.当前路由过滤器 2.DefaultFilter 3.GlobalFilter image.png image.png image.png

(6)跨域问题

image.png

本文作者:钱小杰

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!