当前位置: 首页 > news >正文

网站升级 云南省建设注册考试中心百度下载免费安装

网站升级 云南省建设注册考试中心,百度下载免费安装,中国建设局网站查询,找谁做网站比较好网关作为流量的入口,常用的功能包括路由转发、权限校验、限流等 Spring Cloud 是Spring官方推出的第二代网关框架,由WebFluxNettyReactor实现的响应式的API网关,它不能在传统的servlet容器工作,也不能构建war包。基于Filter的方式…

网关作为流量的入口,常用的功能包括路由转发、权限校验、限流等

Spring Cloud 是Spring官方推出的第二代网关框架,由WebFlux+Netty+Reactor实现的响应式的API网关,它不能在传统的servlet容器工作,也不能构建war包。基于Filter的方式提供网关的基本功能,例如说安全认证、监控、限流等。

一、功能特征

  • 基于Spring Framework5、Project Reactor和SpringBoot2.0进行构建

  • 动态路由:能够匹配任何请求属性

  • 支持路径重写

  • 集成Spring Cloud服务发现功能(Nacos)

  • 可集成流控降级功能(Sentinel)

  • 可以对路由指定易于编写的Predicate(断言)和Filter(过滤器)

1、路由:

路由是网关中最基础的部分,路由信息包括一个ID、一个目的URI、一组断言工厂、一组Filter组成,如果断言为真,则说明请求的URL和配置的路由匹配。

2、断言:

Java8的断言函数,SpringCloud Gateway中的断言函数类型是Spring5.0框架中的ServerWebExchange。断言函数允许开发者去定义匹配Http request中的任何信息,比如请求头和参数等。

3、过滤器:

SpringCloud Gateway中的Filter分为Gateway Filter和Global Filter。Filter可以对请求和响应进行处理。

官网文档:https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/

二、工作原理

Gateway的工作原理和Zuul的差不多,最大区别就是Gateway的Filter只有pre和post两种。

客户端向Spring Cloud Gateway发出请求,如何请求与网关程序定义的路由匹配,则该请求就会被发送到网关Web处理程序,此时处理程序运行特定的请求过滤器链,过滤器之间用虚线分开的原因是过滤器可能会在发送代理请求的前后处理逻辑。所有pre过滤器逻辑先执行,然后执行代理请求;代理请求完成后,执行post过滤器逻辑组。

本案例未融合Cloud体系,只是使用Gateway网关功能

版本说明:https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E

三、项目案例

  1. pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.8</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.example</groupId><artifactId>gateway</artifactId><version>0.0.1-SNAPSHOT</version><name>gateway</name><description>gateway</description><properties><java.version>1.8</java.version></properties><dependencies><!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-gateway-core --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId><version>3.1.5</version></dependency><dependency><groupId>io.netty</groupId><artifactId>netty-all</artifactId><version>4.1.75.Final</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId></dependency><!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.26</version><scope>provided</scope></dependency><!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all --><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.16</version></dependency><!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>2.0.25</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

  1. yml文件

spring:application:name: spring-cloud-gateway-samplecloud:gateway:routes:- id: testuri: http://www.baidu.compredicates:- Path=/api/**filters:- StripPrefix=1
server:port: 9090

启动项目,访问http://localhost:9090/api 会重定向到自己指定的链接

四、路由断言工厂配置

  1. 官方文档:https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#gateway-request-predicates-factories

  1. 自定义路由断言工厂

继承 AbstractRoutePredicateFactory 类,重写 apply 方法的逻辑和shortcutFieldOrder方法。

在 apply 方法中可以通过 exchange.getRequest() 拿到 ServerHttpRequest 对象,从而可以获取到请求的参数、请求方式、请求头等信息。

注意事项:类必须是Spring组件;类必须以RoutePredicateFactory作为结尾;类必须继承AbstractRoutePredicateFactory;必须声明静态内部类,声明属性接受配置文件中的信息

@Slf4j
@Component
public class CheckAuthRoutePredicateFactory extends AbstractRoutePredicateFactory<CheckAuthRoutePredicateFactory.Config> {public CheckAuthRoutePredicateFactory() {super(Config.class);log.info("Loaded RoutePredicateFactory [CheckAuth]");}@Overridepublic List<String> shortcutFieldOrder() {return Arrays.asList("name");}@Overridepublic Predicate<ServerWebExchange> apply(Config config) {return exchange -> {if (config.getName().equals("mengmeng")) {return true;}return false;};}public static class Config {private String name;public void setName(String name) {this.name = name;}public String getName() {return name;}}}

五、过滤器工厂配置

1.官方文档:https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#gatewayfilter-factories

内置过滤器列表:https://blog.csdn.net/swiftxx/article/details/120545261

2.过滤器有分为三类:

  • 默认过滤器

  • 自定义过滤

  • 全局过滤器

3.过滤器执行顺序:

  • 全局过滤器与其他2类过滤器相比,永远是最后执行的;它的优先级只对其他全局过滤器起作用

  • 当默认过滤器与自定义过滤器的优先级一样时,优先出发默认过滤器,然后才是自定义过滤器;同类型的过滤器,出发顺序与他们在配置文件中声明的顺序一致

  • 默认过滤器与自定义过滤器使用同样的order顺序空间,即他们会按照各自的顺序来进行排序

4.自定义全局过滤器

@Component
public class MyGlobalFilter implements GlobalFilter, Ordered {@AutowiredObjectMapper objectMapper;@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {String token = exchange.getResponse().getHeaders().getFirst("token");//获取第一个名为token的请求头//无权限if (StringUtils.isBlank(token)) {// 如果消息头中没有 token ,则抛出异常ServerHttpResponse response = exchange.getResponse();response.setStatusCode(HttpStatus.UNAUTHORIZED);response.getHeaders().add("Content-Type", "application/json;charset=UTF-8");String result = "";try {Map<String, Object> map = new HashMap<>(16);map.put("code", HttpStatus.UNAUTHORIZED.value());map.put("msg", "当前请求未认证,不允许访问");map.put("data", null);result = objectMapper.writeValueAsString(map);} catch (JsonProcessingException e) {log.error(e.getMessage(), e);}DataBuffer buffer = response.bufferFactory().wrap(result.getBytes(StandardCharsets.UTF_8));return response.writeWith(Flux.just(buffer));}//有权限return chain.filter(exchange);}@Overridepublic int getOrder() {//值越小,越优先执行return 1;}
}

局部过滤器与全局过滤器区别:

  • 局部:针对某个路由请求

  • 全局:针对所有路由请求

相关链接:https://blog.csdn.net/qq_43437874/article/details/121626379

全局请求日志打印:https://blog.csdn.net/qq_39529562/article/details/108911943

http://www.ds6.com.cn/news/16487.html

相关文章:

  • 苏州网站设计公司简介怎么做百度关键词排名
  • 重庆网站制作公司电话seowhy培训
  • 网站页面图片布局如何设计美国疫情最新情况
  • 北京新闻网 今日新闻湖南seo服务
  • 西部数码网站源码无锡网站制作
  • win7本地做网站优化网站
  • 平陆县网站建设网站服务器是什么意思
  • 企业网站建设经验关键词推广效果分析
  • 采招网是怎样做的网站2023年7月最新新闻摘抄
  • 莒县做网站的公司免费个人网站申请
  • 网站的空间租用费优化关键词排名外包
  • 闲鱼上做网站百度产品推广怎么收费
  • 深圳本地招聘网站有哪些世界企业排名500强
  • 关于网站维护的书籍网页制作软件推荐
  • 个人养老金制度将出炉小吴seo博客
  • wordpress 汉化东营seo
  • ps里怎么做网站网络营销推广公司
  • 网站图片计时器怎么做济南百度开户电话
  • wordpress架站seo快速推广
  • 网站qq客服怎么做网络营销策略制定
  • 怎样做网站外部链接新闻内容摘抄
  • 哪些网站做批发衣服百度账号登录不了
  • 网站内容要突出什么原因百度站长工具平台登录
  • 一流的镇江网站建设营销推广的方法有哪些
  • 网站开发时间站长之家seo综合
  • 济南做网站优化价格武汉百度关键词推广
  • 网站未经授权推广别人的产品网店培训班
  • 柳州网站建设优化推广明星百度指数在线查询
  • 怎么做网站挣钱百度查询最火的关键词
  • 做什么网站能吸引流量谷歌官网下载