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

企业网站建设网页设计做网站需要什么基础

企业网站建设网页设计,做网站需要什么基础,杭州网站制作哪家好,嵌入式软件开发有哪些一、什么是全局过滤器#x1f349; 首先#xff0c;我们要知道全局过滤器其实是特殊路由过滤器(特殊的GatewayFilter)#xff0c;会有条件地作用于所有路由。 为什么要自定义全局过滤器#xff1f;就好比是看大门的保安大叔#xff0c;平时主要是做好进出大门外来人员登记…一、什么是全局过滤器 首先我们要知道全局过滤器其实是特殊路由过滤器(特殊的GatewayFilter)会有条件地作用于所有路由。 为什么要自定义全局过滤器就好比是看大门的保安大叔平时主要是做好进出大门外来人员登记即可但是因为新冠疫情现在还需要给外来人员测量体温等等。而已有的全局过滤器就好比是登记操作而自定义的全局过滤器就好比是测量体温操作是结合具体场景添加的。 比如以下场景 认证判断 权限校验 黑白名单 跨域配置 工作原理 当请求与路由匹配时过滤WebHandler会将GlobalFilter的所有实例和GatewayFilter的所有特定于路由的实例添加到过滤器链中。该组合的过滤器链由org.springframework.core.Ordered接口排序您可以通过实现getOrder()方法进行设置。 由于Spring Cloud Gateway区分了过滤器逻辑执行的“前”阶段和“后”阶段因此具有最高优先级的过滤器在“前”阶段中是第一个在“后”阶段中是最后一个。 二、自带的全局过滤器包含哪些 要自定义全局过滤首先我们应该去了解一下gateway自带的主要的全局过滤器有哪些并了解他们的作用。 ForwardRoutingFilter ForwardRoutingFilter在exchange属性ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR中查找URI。如果URL具有转发scheme例如forward:/// localendpoint则它将使用Spring DispatcherHandler来处理请求。请求URL的路径部分被转发URL中的路径覆盖。未经修改的原始URL会附加到ServerWebExchangeUtils.GATEWAY_ORIGINAL_REQUEST_URL_ATTR属性中的列表中。 LoadBalancerClientFilter LoadBalancerClientFilter在ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR的exchange属性中查找URI。如果URL的方案为lb例如lb:// myservice它将使用Spring Cloud LoadBalancerClient将名称在本例中为myservice解析为实际的主机和端口并替换同一属性中的URI。未经修改的原始URL会附加到ServerWebExchangeUtils.GATEWAY_ORIGINAL_REQUEST_URL_ATTR属性中的列表中。过滤器还会在ServerWebExchangeUtils.GATEWAY_SCHEME_PREFIX_ATTR属性中查找其是否等于lb。如果是则适用相同的规则。下面的清单配置一个LoadBalancerClientFilter spring:cloud:gateway:routes:- id: myRouteuri: lb://servicepredicates:- Path/service/**注意1默认情况下当在LoadBalancer中找不到服务实例时将返回503。您可以通过设置spring.cloud.gateway.loadbalancer.use404 true将网关配置为返回404。 注意2从LoadBalancer返回的ServiceInstance的isSecure值将覆盖对网关的请求中指定的方案。例如如果请求通过HTTPS进入网关但是ServiceInstance指示它不安全则下游请求通过HTTP发出。相反的情况也可以适用。但是如果在网关配置中为路由指定了GATEWAY_SCHEME_PREFIX_ATTR则会删除前缀并且路由URL产生的方案将覆盖ServiceInstance配置。 注意3LoadBalancerClientFilter在默认情况下使用阻塞的LoadBalancerClient。建议改用ReactiveLoadBalancerClientFilter。可以通过将spring.cloud.loadbalancer.ribbon.enabled的值设置为false来切换到该值。 ReactiveLoadBalancerClientFilter ReactiveLoadBalancerClientFilter与上面的LoadBalancerClientFilter类似差异主要是ReactiveLoadBalancerClientFilter是非阻塞的。 注意1与LoadBalancerClientFilter一样默认情况下当ReactorLoadBalancer无法找到服务实例时将返回503。您可以通过设置spring.cloud.gateway.loadbalancer.use404 true将网关配置为返回404。 NettyRoutingFilter 如果ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR的exchange属性中的URL带有http或https则将运行NettyRoutingFilter。它使用Netty HttpClient发出下游代理请求。响应将放入ServerWebExchangeUtils.CLIENT_RESPONSE_ATTR的exchange属性中供后面的过滤器使用。 还有一个实验性的WebClientHttpRoutingFilter它执行相同的功能但不需要Netty。 经过该过滤器时会通过ServerWebExchangeUtils.setAlreadyRouted方法把exchange对象标记为“已路由”。 RouteToRequestUrlFilter 如果ServerWebExchangeUtils.GATEWAY_ROUTE_ATTR的exchange属性中存在Route对象则RouteToRequestUrlFilter将运行。它基于请求URI创建一个新URI但使用Route对象的URI属性进行更新。新的URI放置在ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR的exchange属性中。 如果URI具有scheme前缀例如lb:ws://serviceid则将从URI中剥离lb方案并将其放在ServerWebExchangeUtils.GATEWAY_SCHEME_PREFIX_ATTR中以供后面在过滤器链中使用。 WebsocketRoutingFilter 顾名思义WebsocketRoutingFilter过滤器是用于处理websocket请求的如果ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR的exchange属性中的URL具有ws或wss的schema则将运行WebsocketRoutingFilter。它使用Spring WebSocket基础结构向下游转发websocket请求。 您可以通过为URI加上lb前缀来平衡websocket的负载例如lb:ws://serviceid 经过该过滤器时会通过ServerWebExchangeUtils.setAlreadyRouted方法把exchange对象标记为“已路由”。 配置示例如下通常情况下除了配置ws还需要配置一个http的因为发起websocket连接的请求是http请求。 # 官方示例 spring:cloud:gateway:routes:# SockJS route- id: websocket_sockjs_routeuri: http://localhost:3001predicates:- Path/websocket/info/**# Normal Websocket route- id: websocket_routeuri: ws://localhost:3001predicates:- Path/websocket/**GatewayMetricsFilter 该过滤器主要用于做网关度量监控的要启用需添加spring-boot-starter-actuator依赖。然后默认情况下只要属性spring.cloud.gateway.metrics.enabled未设置为falseGatewayMetricsFilter就会运行。此过滤器添加一个带有以下标记的计时器度量标准名为gateway.requests routeId: 路由ID.routeUri: 需要路由的APIoutcome: 结果分类参考 HttpStatus.Series.status: 返回给客户端的http statushttpStatusCode: 返回给客户端的http statushttpMethod: 用户请求的http Method 这些指标随后可从/actuator/metrics/gateway.requests中进行抓取并可轻松地与Prometheus集成以创建Grafana dashboard。 要启用prometheus端点请添加micrometer-registry-prometheus依赖。 三、如何自定义全局过滤器 在这里演示过滤黑白名单 1.在配置文件中定义黑白名单 #配置端口号 server:port: 81 #服务名称 spring:application:name: qy165-lzq #配置路径规则cloud:gateway:routes:- id: lzq01 #路由的唯一标识-------随便起只要不重复就可以 如果不写默认uuid创建uri: http://localhost:8001 # 真是转发地址predicates: # 断言 当满足当前条件时进行跳转到uri 可以理解为判断- Path/aaa/**- id: lzq02uri: lb://lzq-01 #lb 表示跳转方式 获取nacos上的服务器名predicates:- Path/aaa/** #连接nacos地址nacos:discovery:server-addr: localhost:8848register-enabled: falsefilter:whitePaths:- /product/login- /product/aaa- /product/bbbblackPaths:- /product/ccc 2.定义工具类读取黑白名单 package com.lzq.filter;import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component;import java.util.HashSet; import java.util.Set;Component ConfigurationProperties(prefix filter) Data public class FilterUrl {private SetString whitePathsnew HashSet();private SetString blackPathsnew HashSet();} 3.编写过滤器 定义实体类实现接口 package com.lzq.filter;import com.alibaba.fastjson.JSON; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.gateway.filter.GatewayFilterChain; import org.springframework.cloud.gateway.filter.GlobalFilter; import org.springframework.core.Ordered; import org.springframework.core.io.buffer.DataBuffer; import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.http.server.reactive.ServerHttpResponse; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; import org.springframework.web.server.ServerWebExchange; import reactor.core.publisher.Mono;import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.Map; Component public class LogFilter implements GlobalFilter, Ordered {Autowiredprivate FilterUrl filterUrl;Overridepublic MonoVoid filter(ServerWebExchange exchange, GatewayFilterChain chain) {ServerHttpRequest request exchange.getRequest();ServerHttpResponse response exchange.getResponse();//过滤的业务代码//1.获取请求路径---String path request.getPath().toString();//判断该路径是否放行路径if(filterUrl.getWhitePaths().contains(path)){return chain.filter(exchange);}//获取请求头String token request.getHeaders().getFirst(token);if(StringUtils.hasText(token)admin.equals(token)){ //查看redis中是否存在该tokenreturn chain.filter(exchange);//放行}//json数据MapString, Object map new HashMap();map.put(msg, 未登录);map.put(code, 403);//3.3作JSON转换byte[] bytes JSON.toJSONString(map).getBytes(StandardCharsets.UTF_8);//3.4调用bufferFactory方法,生成DataBuffer对象DataBuffer buffer response.bufferFactory().wrap(bytes);//4.调用Mono中的just方法,返回要写给前端的JSON数据return response.writeWith(Mono.just(buffer));}//Ordered:优先级 值越小 优先级越高Overridepublic int getOrder() {return 0;} } 4.解决跨域问题 第一种方式创建实体类 package com.lzq.config;import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.reactive.CorsWebFilter; import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource; import org.springframework.web.util.pattern.PathPatternParser;import java.util.Date;Configuration public class CorConfig {//处理跨域Beanpublic CorsWebFilter corsFilter() {CorsConfiguration config new CorsConfiguration();config.addAllowedMethod(*);config.addAllowedOrigin(*);config.addAllowedHeader(*);UrlBasedCorsConfigurationSource source new UrlBasedCorsConfigurationSource(new PathPatternParser());source.registerCorsConfiguration(/**, config);return new CorsWebFilter(source);} } 第二种方式在配置文件中编写 server:port: 81 spring:application:name: gateway #服务名称cloud:nacos:discovery:server-addr: localhost:8848 #nacos地址gateway:globalcors:add-to-simple-url-handler-mapping: truecors-configurations:[/**]: #拦截的请求allowedOrigins: #允许跨域的请求- http://localhost:8080allowedMethods: #运行跨域的请求方式- GET- POST- DELETE- PUT- OPTIONSallowedHeaders: * #允许请求中携带的头信息allowedCredentials: true #是否允许携带cookiemaxAge: 36000 #跨域检测的有效期,单位s
http://www.w-s-a.com/news/943161/

相关文章:

  • 打扑克网站推广软件设计类专业哪个最好
  • 网站设计首页网站建设意向书
  • 做网站要学那些angularjs后台管理系统网站
  • 广州白云手机网站建设学做点心上哪个网站
  • 哈尔滨网站建设步骤百度青岛代理公司
  • 怎么利用代码做网站军队 网站备案
  • 百度手机版网址免费广州seo
  • 军博做网站公司wordpress评论插件
  • 如何申请一个网站 做视频网站报错解析
  • 徐州高端网站建设无锡找做网站
  • 网站如何不需要备案百度的宣传视频广告
  • 如何用易语言做网站采购系统有哪些
  • 建一个网站容易吗浙江省城乡建设厅官网
  • 奇点网站建设黄骅贴吧百度贴吧
  • 站长爱it如何分析网站设计
  • 服装公司网站定位seo网站关键词
  • 电商网站开发流程文档南京 seo 价格
  • 网站建设任务分解张家港网站制作服务
  • 化州+网站建设网络营销怎么做推广
  • 贵阳网站设计方案阿里云 wordpress 数据库
  • 如何做购物返佣金网站高校 网站建设实施方案
  • 网站如何连接微信支付网页制作与网站开发
  • 地名网站建设方案营销型网站策划书
  • 网站优化排名查询网站图片怎么做的高级
  • 官方网站建设调研报告小程序短链接生成
  • 专做耐克阿迪鞋网站免费微信网站模板下载
  • 视频在线制作网站wordpress怎么调用友情链接
  • 做微商什么是官方网站温州阀门外贸网站建设
  • 申请主机网站网站建设平台合同模板
  • 如何做ps4的游戏视频网站海口网红图书馆