中小学教师兼职做网站,网店详情页设计,静态网页制作,大理旅游网站建设网关的作用 对用户请求做身份认证、权限校验将用户请求路由到微服务#xff0c;并实现负载均衡对用户请求做限流 搭建网关服务
创建新module#xff0c;命名为Gateway#xff0c;引入依赖#xff08;1.SpringCloudGateway依赖#xff1b;2.Eureka客户端依赖或者nacos的服…网关的作用 对用户请求做身份认证、权限校验将用户请求路由到微服务并实现负载均衡对用户请求做限流 搭建网关服务
创建新module命名为Gateway引入依赖1.SpringCloudGateway依赖2.Eureka客户端依赖或者nacos的服务发现依赖。在本案例中使用的是Eureka。
!--网关依赖--dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-gateway/artifactId/dependency!--Eureka客户端依赖--
dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-netflix-eureka-client/artifactId
/dependency!--nacos服务发现依赖--
dependency groupIdcom.alibaba.cloud/groupId artifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId
/dependency配置Application.yml的网关服务 路由id路由的唯一标示路由目标uri路由的目标地址http代表固定地址lb代表根据服务名负载均衡路由断言predicates判断路由的规则路由过滤器filters对请求或响应做处理 server:port: 10010 # 网关端口
spring:application:name: gateway # 服务名称cloud:gateway:routes: # 网关路由配置- id: user-service # 路由id自定义只要唯一即可# uri: http://127.0.0.1:8081 # 路由的目标地址 http就是固定地址uri: lb://userservice # 路由的目标地址 lb就是负载均衡后面跟服务名称predicates: # 路由断言也就是判断请求是否符合路由规则的条件- Path/user/** # 这个是按照路径匹配只要以/user/开头就符合要求- id: order-service # 路由id自定义只要唯一即可uri: lb://orderservicepredicates:- Path/order/**
# nacos:
# server-addr: localhost:8848 # nacos地址
eureka:client:service-url:defaultZone: http://127.0.0.1:10086/eureka/ # 注册到eureka启动测试 目录结构 服务 浏览器的测试结果可见当给网关服务发送请求时对应于orderservice和userservice的请求被成功转发到对应路由 总结搭建网关服务的流程
路由断言工厂 predicates路由断言判断请求是否符合要求符合则转发到路由目的地 路由过滤器GatewayFilter
spring官方文档 用RequestHeader来获取 给所有的微服务都加一个请求头用默认过滤器
spring: application: name: gateway # 服务名称 cloud: nacos: server-addr: localhost:8848 # nacos地址 gateway: routes: # 网关路由配置 - id: user-service uri: lb://userservice predicates: - Path/user/** - id: order-service uri: lb://orderservice predicates: - Path/order/** default-filters: # 默认过滤器会对所有的路由请求都生效 - AddRequestHeaderTruth, Itcast is freaking awesome! # 添加请求头
全局过滤器 需求定义全局过滤器拦截请求判断请求的参数是否满足下面条件 参数中是否有authorization authorization参数值是否为admin 如果同时满足则放行否则拦截 Order(-1) //顺序越小越靠前
Component //定义组件
public class AuthorizeFilter implements GlobalFilter{ Override public MonoVoid filter(ServerWebExchange exchange, GatewayFilterChain chain) {// 1.获取请求参数 MultiValueMapString, String params exchange.getRequest().getQueryParams(); // 2.获取authorization参数 String auth params.getFirst(authorization); // 3.校验 if (admin.equals(auth)) { // 放行 return chain.filter(exchange); } // 4.拦截 // 4.1.禁止访问 exchange.getResponse().setStatusCode(HttpStatus.FORBIDDEN); // 4.2.结束处理 return exchange.getResponse().setComplete(); }
} 路由过滤器、defaultFilter、全局过滤器的执行顺序 1、order值越小优先级越高 2、当order值一样时顺序是defaultFilter最先然后是局部的路由过滤器最后是全局过滤器 cors跨域配置