客户管理系统开发定制springCloud_Gateway服务网关

文章目录

Gateway服务

SpringCloud客户管理系统开发定制中网关的实现包括两种:① gateway② zuulzuul是基于servlet的实现,客户管理系统开发定制属于阻塞式编程,而springcloudgateway则是基于spring5中提供的webflux,客户管理系统开发定制属于响应式编程的实现,客户管理系统开发定制具备更好的性能.
  • 1
  • 2
  • 3
  • 4
gateway快速入门
1 创建新的module,引入SpringCloudGetaway的依赖和nacos的服务发现依赖	<!--网关依赖-->    <dependency>    	<groupId>org.springframework.cloud</groupId>    	<artifactId>spring-cloud-starter-gateway</artifactId>    </dependency>    <!--nacos服务发现依赖-->    <dependency>    	<groupId>com.alibaba.cloud</groupId>    	<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>    </dependency>2 编写路由配置及nacos地址	server:	  port: 10010	spring:	  application:	    name: gateway	  cloud:	    nacos:	      server-addr: nacos:8848 # nacos地址	    gateway:	      routes:	        - id: user-service # 路由标示,必须唯一	          uri: lb://userservice # 路由的目标地址	          predicates: # 路由断言,判断请求是否符合规则	            - Path=/user/** # 路径断言,判断路径是否是以/user开头,如果是则符合	        - id: order-service	          uri: lb://orderservice	          predicates:	            - Path=/order/**	      default-filters:	        - AddRequestHeader=Truth,Itcast is freaking awesome!	
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

断言工厂
读取断言规则例如: Path=/user/** 是按照路径匹配,这个规则是由 org.springframework.cloud.gateway.handler.predicate.PathRoutePredicateFactory类来处理的.
  • 1
  • 2

过滤器工厂

路由过滤器(GatewayFilter) 是网关中提供的一种过滤器,可以对进入网关的请求和微服务返回的响应处理.过滤器的作用?    ① 对路由的请求或响应做加工处理,比如请求头    ② 配置在路由下的过滤器只对当前路由的请求生效default-filters的作用?    ① 对所有路由都生效的过滤器    spring:  application:    name: gateway  cloud:    nacos:      server-addr: localhost:8848 # nacos地址    gateway:      routes:        - id: user-service # 路由标示,必须唯一          uri: lb://userservice # 路由的目标地址          predicates: # 路由断言,判断请求是否符合规则            - Path=/user/** # 路径断言,判断路径是否是以/user开头,如果是则符合        - id: order-service          uri: lb://orderservice          predicates:            - Path=/order/**      default-filters: # 默认过滤器,会对所有的路由请求都生效        - AddRequestHeader=Truth, Itcast is freaking awesome! # 添加请求头
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
全局过滤器(GlobalFilter)
全局过滤器的作用也是处理一切进入网关的请求和微服务响应,GatewayFilter的作用一样区别在于GatewayFilter通过配置定义,处理逻辑是固定的,GlobalFilter的逻辑需要自己写代码实现.全局过滤的作用?    对所有路由都生效的过滤器,并且可以自定义处理逻辑实现全局过滤的步骤?    ① 实现GlobalFilter接口    ② 添加@Order注解或者实现Ordered 接口    ③ 编写处理逻辑
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
自定义过滤器 实现GlobalFilter接口
import org.springframework.cloud.gateway.filter.GatewayFilterChain;import org.springframework.cloud.gateway.filter.GlobalFilter;import org.springframework.core.Ordered;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)@Componentpublic class AuthorizeFilter implements GlobalFilter, Ordered {    @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");        // 3.判断参数值是否等于 admin        if ("admin".equals(auth)) {            // 4.是,放行            return chain.filter(exchange);        }        // 5.否,拦截        // 5.1.设置状态码        exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);        // 5.2.拦截请求        return exchange.getResponse().setComplete();    }    @Override    public int getOrder() {        return -1;    }}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
过滤器的执行顺序
路由过滤器、defaultFilter、全局过滤器的执行顺序?    ① order值越小,优先级越高    ② 当order值一样时,顺序是defaultFilter最先,然后是局部的路由过滤器,最后是全局的过滤器.
  • 1
  • 2
  • 3
网关的跨域问题处理
跨域: 域名不一致就是跨域主要包括	① 域名不同: www.taobao.com和www.jd.com	② 域名相同,端口不同:localhost:8080和localhost:8081跨域问题:浏览器禁止请求的发起者和服务端发生跨域ajax请求,请求被浏览器拦截的问题解决方案:CORS
  • 1
  • 2
  • 3
  • 4
  • 5
网关处理跨域采用的同样是CORS方案,并且只需要配置即可实现
spring:  	cloud:    		gateway:    			globalcors: # 全局的跨域处理      				add-to-simple-url-handler-mapping: true # 解决options请求被拦截问题        				corsConfigurations:			'[/**]':            				allowedOrigins: # 允许哪些网站的跨域请求               					- "http://localhost:8090" 					- "http://www.leyou.com" 				allowedMethods: # 允许的跨域ajax的请求方式           					- "GET"            					- "POST"      					- "DELETE"      					- "PUT"          					- "OPTIONS"      				allowedHeaders: "*" # 允许在请求中携带的头信息           					allowCredentials: true # 是否允许携带cookie          				maxAge: 360000 # 这次跨域检测的有效期
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
需要项目代码联系博主.
网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发