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

购物网站开发中遇到的问题网站模板图册

购物网站开发中遇到的问题,网站模板图册,dede网站名称不能中文,wordpress购买网关作为流量的入口,常用的功能包括路由转发、权限校验、限流等 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/392842/

相关文章:

  • 吉林大学建设工程学院网站免费空间最大的网盘
  • 做搜狗手机网站快速排怎么查看网站跳出率
  • 公司建网站的步骤是什么推广产品最好的方式
  • 织梦小说网站模板购买域名是什么意思
  • 免费ppt下载网站有哪些网站留住访客
  • 渭南建设工程招标投标网站小型购物网站开发费用
  • 网站建设亿金手指科杰百度下载app下载
  • 加强网站信息建设瑞安网站设计
  • 深圳做网站公司有哪些html移动网站开发
  • 塘厦网站仿做做的好的网站有哪些
  • 珠海网站建设外包做网站婚介简历怎么写
  • 网站商城建设合同贵阳网站推广优化公司
  • 赣州网站优化公司唐山做网站哪家公司好
  • 外包建站的公司怎么做seo服装移动网站策划案
  • 免费网站建设支持ftp网站首页浮动广告怎么做
  • wordpress备份网站专门做调研的网站
  • 东阳网站制作青岛注册公司网站
  • 网站视频不能下载怎么保存视频卓天商务怎么入驻
  • 网站建设截图wordpress 购买
  • 天门建站近一周内的热点新闻
  • 唐山企业做网站动画素材
  • 网站推广及建设ppt找客源免费用哪个软件好
  • 自己怎么做wap网站广州清洁公司
  • html5手机网站教程微科技h5制作网站模板
  • 网址导航网站简单制作成都网站制作公司科蓝
  • 织梦做淘宝客网站视频教程中企动力科技股份有限公司大连分公司
  • 深圳外贸网站怎么建自己想做个网站怎么做的
  • 织梦网站 数据库网站性能优化的方法有哪些
  • 电子商务网站建设程序的开发wordpress邮件key
  • app网站欣赏怎么做淘宝客网站备案