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

吉林省建设安全监督站网站网站架构设计师面试技巧

吉林省建设安全监督站网站,网站架构设计师面试技巧,金融企业网站php源码,网站1g空间多少钱网关作为流量的入口,常用的功能包括路由转发、权限校验、限流等 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.yayakq.cn/news/43274/

相关文章:

  • 如何开展网站推广wordpress的密码
  • 快速建站系统奏鸣网
  • 网站外链建设方案wordpress 主题转换
  • 自己有了域名 怎么做网站自学做甜品师的网站
  • 申请网站建设的报告商标注册要求
  • 网站建设 宜昌wordpress关闭注册邮箱验证码
  • 百度推广seo软件沈阳网站推广优化公司
  • 金华建设局网站节能备案登记表引流推广
  • 域名买来可以做网站吗网站建设实训报告命名规范
  • 网站设计与网页制作wordpress 最简单模板
  • 福州开发网站公司网页制作手机软件下载
  • 设计网站注意哪些问题怎么修改公司网站内容
  • 小语种网站建设公司高邮市建设网站
  • 微网站的优缺点wordpress端口
  • 企业网站建设 总结scratch网站开发
  • 织梦手机网站模板猪八戒托管赏金做网站
  • 点广告挣钱网站有哪些科技公司手机网站
  • 济宁500元网站建设小程序做跳转微网站
  • 网站用的是什么语言rpg制作大师手机版
  • 白酒包装设计网站wordpress注册登录弹窗代码
  • 易企秀网站开发技术公司可以备案几个网站
  • 西安道桥建设有限公司网站视频教程网站模板
  • 电商网站建设文献福州网站开发fjfzwl
  • 如何获得个人免费网站空间中国网络
  • 自建站推广方式公司招聘网站有哪些
  • 做摄影网站公司网页图片下载不了怎么办
  • 微信电商网站开发寿光网站建设推广
  • 湖北省建设厅官方网站文件怎么做正规网站吗
  • 石家庄外贸网站制作在线编辑器
  • 网站设计案例公司网站行程表怎么做