北京好用的h5建站,网页设计课程的总结,企业公示信息查询系统辽宁,尚海整装和沪佳哪个好作用
身份认证#xff1a;用户能不能访问
服务路由#xff1a;用户访问到那个服务中去
负载均衡#xff1a;一个服务可能有多个实例#xff0c;甚至集群#xff0c;负载均衡就是你的请求到哪一个实例上去 请求限流功能#xff1a;对请求进行流量限制#xff0c;对服务…作用
身份认证用户能不能访问
服务路由用户访问到那个服务中去
负载均衡一个服务可能有多个实例甚至集群负载均衡就是你的请求到哪一个实例上去 ·请求限流功能对请求进行流量限制对服务进行请求限制
两种网关实现 搭建网关 流程 1.首先咱们先将服务以及网关注册到Nacos注册中心 2.然后用户请求网关路由进行判断地址是不是以/user或者/order开头的如果是则跳转路由目标地址uri然后请求地址则会代理到userservice或者是orderservice 3.然后再从Nacos注册中心里根据服务orderservice或者是xxxservice找到对应的地址 4.最后根据负载均衡找到实例 1.创建gateway网关模块 略 2.导入nacos服务发现依赖和gateway依赖说明是个网关 略 3.然后进行配置文件的配置配置服务的信息以及地址将其注册到Nacos中。还有路由的信息1.路由标示2.目标地址3.路由断言
server:port: 10010
spring:application:name: gatewaycloud:nacos:server-addr: localhost:80 #nacos地址 因为我在上一章中还是使用的nacos集群启动 Nginx反向代理的 端口是80 正常的话是8848 gateway:routes:- id: user-service # 路由标示必须唯一uri: lb://userservice # 路由的目标地址predicates: # 路由断言判断请求是否符合规则- Path/user/** # 路径断言判断路径是否以/user开头如果是则符合跳转路由- id: order-serviceuri: lb://orderservicepredicates:- Path/order/**然后我们访问10010端口断言predicate设置的path路径正确即可访问
路由断言
Predicate作用将断言规则解析成条件作为请求过来的判断 server:port: 10010
spring:application:name: gatewaycloud:nacos:server-addr: localhost:8848 #nacos地址gateway:routes:- id: user-service # 路由标示必须唯一uri: lb://userservice # 路由的目标地址predicates: # 路由断言判断请求是否符合规则- Path/user/** # 路径断言判断路径是否以/user开头如果是则符合跳转路由- id: order-serviceuri: lb://orderservicepredicates:- Path/order/**- After2022-05-14T15:14:47.43308:00[Asia/Shanghai] # (这个时间点之后的才能访问)Gateway中的路由过滤器配置 过滤器可以对于请求进行过滤比如请求头请求体请求参数… 也可以对响应进行过滤给到用户服务想给的内容 过滤器案例 加请求头 1.我们直接在配置文件中进行配置即可
第一种在路由中配置这是一个服务的范围对于访问这个服务会有过滤
第二种与routes范围一样是对于整个全局的所有服务; gateway:routes:- id: user-service # 路由标示必须唯一uri: lb://userservice # 路由的目标地址predicates: # 路由断言判断请求是否符合规则- Path/user/** # 路径断言判断路径是否以/user开头如果是则符合跳转路由- id: order-serviceuri: lb://orderservicepredicates:- Path/order/**filters: # 过滤器添加一个请求头- AddRequestHeaderTruth,Itcast is freaking aowsome!default-filters: # 对所有路由生效- AddRequestHeaderTruth,Itcast is freaking awesome!这里我们对用户服务增加一个请求头信息访问localhost:10010/user/1服务器就会打印过滤器中的信息 GetMapping(/{id})public User queryById(PathVariable(id) Long id,RequestHeader(valueTruth,required false) String truth) {System.out.println(truth:truth);return userService.queryById(id);}结果
全局过滤器
作用处理一切进入网关的请求和微服务的响应与GatewayFilter的作用一样
与GatewayFilter区别前者通过自定义配置可以处理逻辑后者的逻辑需要自己写代码实现 案例定义全局过滤器拦截用户判断身份 步骤
我们直接定义一个全局过滤器即可实现GlobalFilter
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;/*** author diao 2022/5/9*/
Order(-1)
Component
public class AuthorizeFilter implements GlobalFilter {/**** param exchange里面有request和response* param chain过滤器链* return*/Overridepublic MonoVoid filter(ServerWebExchange exchange, GatewayFilterChain chain) {ServerHttpRequest request exchange.getRequest();//1.得到request中的所有参数MultiValueMapString, String params request.getQueryParams();//2.获取里面含有authorization的参数String auth params.getFirst(authorization);//3.判断参数是否符合:authorizationadminif(admin.equals(auth)){return chain.filter(exchange);}//4.进行拦截,并且设置响应状态码exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);return exchange.getResponse().setComplete();}
}当request请求参数authorization!admin被拦截的情况 当加上请求参数并且值符合 总结
跟Gateway过滤器最大的区别就是它可以自定义 过滤器执行顺序 可以发现GlobalFilter和DefaultFilter、当前路由器是同一种 执行顺序注意事项
1.order值越小优先级越高优先看order值
2.当order值一样时顺序好似defaultFilter优先因为它是排在路由routes 跨域请求处理
跨域域名不一致
端口不一致8080与8081
跨域问题浏览器禁止请求的发起者与服务端发生跨域的ajax请求请求被浏览器拦截的问题——像我们之前的订单服务调用用户服务就不属于跨域问题
CORS方案
模板 globalcors: # 全局的跨域处理add-to-simple-url-handler-mapping: true # 网关放行请求cors-configurations:[/**]:allowedOrigins: # 允许哪些网站跨域请求- http://localhost:8090- http://www.leyou.comallowedMethods: #运行跨域ajax的请求方式- GET- POST- DELETE- PUTallowedHeaders: * #允许在请求中有头信息allowCredentials: true # 是否允许携带cookiemaxAge: 3600对比于寻常的nginx除了负载均衡之外我们的gateway可以对异常进行统一处理包括权限设置跨域等等 主要是通过nacos中拉去服务通过服务名称进行拉取