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

专做品牌的网站网站升级通知

专做品牌的网站,网站升级通知,网站建设书籍下载,学校资源网站 建设一、Spring Cloud Gateway内置GatewayFilter 路由过滤器允许以某种方式修改传入的 HTTP 请求或传出的 HTTP 响应。路由过滤器的范围是特定路由。Spring Cloud Gateway 包括许多内置的 GatewayFilter 工厂。 官网地址#xff1a;https://docs.spring.io/spring-cloud-gateway…一、Spring Cloud Gateway内置GatewayFilter 路由过滤器允许以某种方式修改传入的 HTTP 请求或传出的 HTTP 响应。路由过滤器的范围是特定路由。Spring Cloud Gateway 包括许多内置的 GatewayFilter 工厂。 官网地址https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#gatewayfilter-factories 过滤器工厂作用参数AddRequestHeader为原始请求添加HeaderHeader的名称及值AddRequestParameter为原始请求添加请求参数参数名称及值AddResponseHeader为原始响应添加HeaderHeader的名称及值DedupeResponseHeader剔除响应头中重复的值需要去重的Header名称及去重策略Hystrix为路由引入Hystrix的断路器保护HystrixCommand的名称FallbackHeaders为fallbackUri的请求头中添加具体的异常信息Header的名称PrefixPath为原始请求路径添加前缀前缀路径PreserveHostHeader为请求添加一个preserveHostHeadertrue 的属性路由过滤器会检查该属性以决定是否要发送原始的Host无RequestRateLimiter用于对请求限流限流算法为令牌桶keyResolver、rateLimiter、statusCode、denyEmptyKey、emptyKeyStatusRedirectTo将原始请求重定向到指定的URLhttp状态码及重定向的urlRemoveHopByHopHeadersFilter为原始请求删除IETF组织规定的一系列Header默认就会启用可以通过配置指定仅删除哪些HeaderRemoveRequestHeader为原始请求删除某个HeaderHeader名称RemoveResponseHeader为原始响应删除某个HeaderHeader名称RewritePath重写原始的请求路径原始路径正则表达式以及重写后路径的正则表达式RewriteResponseHeader重写原始响应中的某个HeaderHeader名称、值的正则表达式重写后的值SaveSession在转发请求之前强制执行WebSession::save操作无secureHeaders为原始响应添加一系列起安全作用的响应头无支持修改这些安全响应头的值SetPath修改原始的请求路径修改后的路径SetResponseHeader修改原始响应中某个Header的值Header名称修改后的值SetStatus修改原始响应的状态码HTTP 状态码可以是数字也可以是字符串StripPrefix用于截断原始请求的路径使用数字表示要截断的路径的数量Retry针对不同的响应进行重试retries、statuses、methods、seriesRequestSize设置允许接收最大请求包的大 小。如果请求包大小超过设置的值则返回 413 Payload Too Large请求包大小单位为字节默认值为5MModifyRequestBody在转发请求之前修改原始请求体内容修改后的请求体内容ModifyResponseBody修改原始响应体的内容修改后的响应体内容 二、DefaultFilter 添加DefaultFilter将其应用于所有路由您可以使用spring.cloud.gateway.default-filters此属性配置采用DefaultFilter列表。 spring:cloud:gateway:default-filters:- AddResponseHeaderX-Response-Default-Red, Default-Blue- StripPrefix1三、GlobalFilter GlobalFilter接口与GatewayFilter接口具有相同特征。GlobalFilter是有条件地应用于所有路由的特殊过滤器。 Spring Cloud Gateway 内置的GatewayFilter 更多介绍请见官网https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#global-filters 以下为自定义GlobalFilter实现记录请求方状态及耗时 ApiLoggingFilter.java import lombok.extern.slf4j.Slf4j; import org.springframework.cloud.gateway.filter.GatewayFilterChain; import org.springframework.cloud.gateway.filter.GlobalFilter; import org.springframework.core.Ordered; import org.springframework.web.server.ServerWebExchange; import reactor.core.publisher.Mono; import java.util.List;Slf4j public class ApiLoggingFilter implements GlobalFilter, Ordered {private static final String START_TIME startTime;private static final String X_REAL_IP X-Real-IP;// nginx需要配置Overridepublic MonoVoid filter(ServerWebExchange exchange, GatewayFilterChain chain) {if (log.isDebugEnabled()) {String info String.format(Method:{%s} Host:{%s} Path:{%s} Query:{%s},exchange.getRequest().getMethod().name(), exchange.getRequest().getURI().getHost(),exchange.getRequest().getURI().getPath(), exchange.getRequest().getQueryParams());log.debug(info);}exchange.getAttributes().put(START_TIME, System.currentTimeMillis());return chain.filter(exchange).then(Mono.fromRunnable(() - {Long startTime exchange.getAttribute(START_TIME);if (startTime ! null) {Long executeTime (System.currentTimeMillis() - startTime);ListString ips exchange.getRequest().getHeaders().get(X_REAL_IP);String ip ips ! null ? ips.get(0) : exchange.getRequest().getRemoteAddress().getAddress().getHostAddress();String api exchange.getRequest().getURI().getRawPath();int code 500;if (exchange.getResponse().getStatusCode() ! null) {code exchange.getResponse().getStatusCode().value();}// 当前仅记录日志后续可以添加日志队列来过滤请求慢的接口if (log.isDebugEnabled()) {log.debug(来自IP地址{}的请求接口{}响应状态码{}请求耗时{}ms, ip, api, code, executeTime);}}}));}Overridepublic int getOrder() {return Ordered.LOWEST_PRECEDENCE;}}配置使用ApiLoggingFilter GatewayConfiguration.java Configuration(proxyBeanMethods false) public class GatewayConfiguration {Beanpublic ApiLoggingFilter apiLoggingFilter() {return new ApiLoggingFilter();} }四、过滤器的执行顺序 请求进入网关会碰到三类过滤器当前路由的过滤器、DefaultFilter、GlobalFilter。 请求路由后,会将 当前路由过滤器和DefaultFilter、GlobalFilter合并到一个过滤器链集合中按org.springframework.core.Ordered接口排序排序后依次执行每个过滤器 排序的规则是什么呢 每一个过滤器都必须指定一个int类型的order值order值越小优先级越高执行顺序越靠前。GlobalFilter通过实现Ordered接口或者添加Order注解来指定order值由我们自己指定。路由过滤器和defaultFilter的order由Spring指定默认是按照声明顺序从1递增。当过滤器的order值一样时会按照 defaultFilter 路由过滤器 GlobalFilter的顺序执行。传入的 HTTP 请求的第一个过滤器具有最高优先级。传出的 HTTP 响应的最后一个过滤器具有最高优先级。 详细内容可以查看源码 org.springframework.cloud.gateway.route.RouteDefinitionRouteLocator#getFilters()方法是先加载defaultFilters然后再加载某个route的filters然后合并。 private ListGatewayFilter getFilters(RouteDefinition routeDefinition) {ListGatewayFilter filters new ArrayList();if (!this.gatewayProperties.getDefaultFilters().isEmpty()) {filters.addAll(this.loadGatewayFilters(routeDefinition.getId(), new ArrayList(this.gatewayProperties.getDefaultFilters())));}if (!routeDefinition.getFilters().isEmpty()) {filters.addAll(this.loadGatewayFilters(routeDefinition.getId(), new ArrayList(routeDefinition.getFilters())));}AnnotationAwareOrderComparator.sort(filters);return filters; }org.springframework.cloud.gateway.handler.FilteringWebHandler#handle()方法会加载全局过滤器与前面的过滤器合并后根据order排序组织过滤器链。 public MonoVoid handle(ServerWebExchange exchange) {Route route (Route)exchange.getRequiredAttribute(ServerWebExchangeUtils.GATEWAY_ROUTE_ATTR);ListGatewayFilter gatewayFilters route.getFilters();ListGatewayFilter combined new ArrayList(this.globalFilters);combined.addAll(gatewayFilters);AnnotationAwareOrderComparator.sort(combined);if (logger.isDebugEnabled()) {logger.debug(Sorted gatewayFilterFactories: combined);}return (new DefaultGatewayFilterChain(combined)).filter(exchange); }
http://www.w-s-a.com/news/12849/

相关文章:

  • 西安建站软件获取网站全站代码
  • 个人做网站怎么备案网站建设收费标准渠道
  • 单位做网站注意什么问题如何修改单页网站
  • asp全静态企业网站wordpress文章封面
  • 电白区住房和城乡建设部门户网站免费公司网站模版
  • 做玩游戏任务得q币的网站如何制作自己的公司内部网站
  • 网站优化自己可以做吗非官方网站建设
  • 厦门邮件网站点击网站
  • 网络推广网站的方法亳州网站制作公司
  • 网站域名主机空间区别广告设计专业前景
  • 新手做啥网站好dedecms网站的源码如何安装
  • 哪些网站是用iframe免费网站域名查询
  • 自己开的网站 可以做代销吗百度查找相似图片
  • 网站建设设计作业网站备案渝
  • 中国重庆网站建设福州短视频seo获客
  • 遵义官网网站建设网站移动端开发公司
  • 宜春网站推广优化电子商务网站建设收益举例
  • 游戏网站开发实验报告装修平台哪家好
  • 外贸自己建网站小红门网站建设
  • 中国著名的做网站渗透设计规范网站
  • 公司网站备案多少钱推特最新消息今天
  • 网站关键词设置代码seo搜索优化 指数
  • 做网站卖东西送上门做暧暧xoxo网站
  • 网站网站设计公司网站维护运营好做吗
  • 照片做成视频的软件seo两个域名一个网站有影响吗
  • 制作动画的网站河南省住房城乡建设门户网站
  • 网站推广原则做网站的那个语言好
  • 潍坊网站建设怎样商品网站建设设计思路
  • 建网站公司是如何赚钱南昌营销网站公司哪家好
  • 淘宝客网站管理质量好网站建设费用