html网站优化,工作手机,成都建站,注册公司多少钱收费文章目录 Gateway服务网关快速入门断言工厂默认过滤器自定义过滤器过滤器执行顺序跨域问题处理 Gateway服务网关 网关#xff08;Gateway#xff09;是将两个使用不同协议的网络段连接在一起的设备。 网关的作用就是对两个网络段中的使用不同传输协议的数据进行互相的翻译转换… 文章目录 Gateway服务网关快速入门断言工厂默认过滤器自定义过滤器过滤器执行顺序跨域问题处理 Gateway服务网关 网关Gateway是将两个使用不同协议的网络段连接在一起的设备。 网关的作用就是对两个网络段中的使用不同传输协议的数据进行互相的翻译转换。 快速入门
创建服务 导入依赖 dependenciesdependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-gateway/artifactId/dependencydependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId/dependencydependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-loadbalancer/artifactId/dependency/dependencies编写启动类
package com.lhs;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;SpringBootApplication
public class GatewayApplication {public static void main(String[] args){SpringApplication.run(GatewayApplication.class,args);}
}添加配置
server:port: 10010 # 网关端口
spring:application:name: gateway # 服务的名称cloud:nacos:server-addr: localhost:8848 # nacos的地址gateway:routes: # 网关路由配置- id: user-service # 路由id自定义只要唯一即可# uri: http://127.0.0.1:8081 # 路由的目标地址 http就是固定地址uri: lb://userservice # 路由的目标地址 lb就是负载均衡后面跟服务名称predicates: # 路由断言也就是判断请求是否符合路由规则的条件- Path/user/** # 这个是按照路径匹配只要以/user/开头就符合要求断言工厂
Route Predicate Factories :: Spring Cloud Gateway
默认过滤器 对所有路径都生效 server:port: 10010 # 网关端口
spring:application:name: gateway # 服务的名称cloud:nacos:server-addr: localhost:8848 # nacos的地址gateway:routes: # 网关路由配置- id: user-service # 路由id自定义只要唯一即可# uri: http://127.0.0.1:8081 # 路由的目标地址 http就是固定地址uri: lb://userservice # 路由的目标地址 lb就是负载均衡后面跟服务名称predicates: # 路由断言也就是判断请求是否符合路由规则的条件- Path/user/** # 这个是按照路径匹配只要以/user/开头就符合要求default-filters: - AddRequestHeadername,lhs # 默认过滤器自定义过滤器 全局过滤器的作用也是处理一切进入网关的请求和微服务相应与网关过滤器的作用一样区别在于网关过滤器通过配置定义处理逻辑是固定的。而全局过滤器的逻辑需要自己写代码实现。定义方式是实现GlobalFilter接口。 代码实现7
Order(-1) // 设置优先级数字越小优先级越高
Component
public class AuthorizeFilter implements GlobalFilter {Overridepublic MonoVoid filter(ServerWebExchange exchange, GatewayFilterChain chain) {// 获取请求ServerHttpRequest request exchange.getRequest();// 获取请求参数MultiValueMapString, String queryParams request.getQueryParams();// 获取授权信息String authorization queryParams.getFirst(authorization);// 判断是否为管理员if(admin.equals(authorization)){// 如果是管理员则继续执行过滤器return chain.filter(exchange);}// 如果不是管理员则返回未授权exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);// 拦截请求return exchange.getResponse().setComplete();}
}过滤器执行顺序
每个过滤器都必须指定一个int类型的order值order值越小优先级越高执行顺序越靠前GlobalFilter通过实现Ordered接口或者添加Order注解来指定order值由我们自己指定路由过滤器和defaultFilter的order由Spring指定默认是按照声明顺序从1递增当过滤器的order值一样时会按照 defaultFilter 路由过滤器 GlobalFilter 的顺序执行
跨域问题处理 浏览器禁止请求的发起者与服务端发生跨域ajax请求 spring:application:name: gateway # 服务的名称cloud:nacos:server-addr: localhost:8848 # nacos的地址gateway:routes: # 网关路由配置- id: user-service # 路由id自定义只要唯一即可# uri: http://127.0.0.1:8081 # 路由的目标地址 http就是固定地址uri: lb://userservice # 路由的目标地址 lb就是负载均衡后面跟服务名称predicates: # 路由断言也就是判断请求是否符合路由规则的条件- Path/user/** # 这个是按照路径匹配只要以/user/开头就符合要求default-filters:- AddRequestHeadername,lhsglobalcors: # 全局的跨域配置add-to-simple-url-handler-mapping: true # 解决options请求被拦截问题# options请求 就是一种询问服务器是否浏览器可以跨域的请求# 如果每次跨域都有询问服务器是否浏览器可以跨域对性能也是损耗# 可以配置本次跨域检测的有效期maxAge# 在maxAge设置的时间范围内不去询问统统允许跨域corsConfigurations:[/**]:allowedOrigins: # 允许哪些网站的跨域请求 - http://localhost:8090allowedMethods: # 允许的跨域ajax的请求方式- GET- POST- DELETE- PUT- OPTIONSallowedHeaders: * # 允许在请求中携带的头信息allowCredentials: true # 允许在请求中携带cookiemaxAge: 360000 # 本次跨域检测的有效期(单位毫秒)# 有效期内跨域请求不会一直发option请求去增大服务器压力