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

网上服装商城网站代码今日热搜排行第一名

网上服装商城网站代码,今日热搜排行第一名,上海旅游网站建设情况,有了域名怎么做自己得网站背景 【MQ】一套为海量消息和高并发热点消息,提供高可用精准延时服务的解决方案 我现在有一个需求,就是监听 RabbitMQ 一个延时交换机的消息数,而 RabbitTemplate 是不存在对应的方法来获取的。 而我们在 RabbitMQ 的控制台却可以发现延时交…

背景

【MQ】一套为海量消息和高并发热点消息,提供高可用精准延时服务的解决方案

我现在有一个需求,就是监听 RabbitMQ 一个延时交换机的消息数,而 RabbitTemplate 是不存在对应的方法来获取的。
而我们在 RabbitMQ 的控制台却可以发现延时交换机的消息数,所以其开放的 http-api 里存在我们需要的数据,通过抓包可得:
在这里插入图片描述
而我们查看这个包,构造请求(抓包+分析的技巧这里不做介绍)

当然你完全可以去看 RabbitMQ 的 http-api 开放文档,但是我觉得有点多,还不如直接抓包

URL:

  • http://rabbithost:15672/api/exchanges/{virtualHost}/{exchange}?msg_rates_age=60&msg_rates_incr=5

Method:

  • GET

Header:

  • Authorization: "Basic " + EncryptUtil.encodeBase64(String.format("%s:%s", rabbitMQConfig.getUsername(), rabbitMQConfig.getPassword()));

很快我们就能写一个 OpenFeign 客户端:


@FeignClient(name = "rabbitmq-service", url = "${okr.mq.http-api}")
public interface RabbitMQHttpFeignClient {@GetMapping("/exchanges/{virtualHost}/{exchange}?msg_rates_age=60&msg_rates_incr=5")DelayExchangeVO getMessagesDelayed(@RequestHeader(HttpHeaders.AUTHORIZATION) String authorization,@PathVariable("virtualHost") String virtualHost,@PathVariable("exchange") String exchange);}

但是你会发现,virtualHost 是带 / 的,但是最终的 url 并没有转义,导致路由出错报了 404

  • 400 是参数未通过验证、401 未通过身份认证、403 无权限

先说结论!!!

配置一个 Contract (协议,约定),并设置 decodeSlash 为 false !

@Component
public class OpenFeignConfig {@Beanpublic Contract notdecodeSlashContract(){// 无自定义处理器、默认的 ConversionService、取消 %2F -> / 的解码return new SpringMvcContract(Collections.emptyList(), new DefaultConversionService(), Boolean.FALSE);}}

decodeSlash,直译就是“斜杠解码”

encode: /%2F
decode: %2F/

而我们就是阻止 %2F/ ,那我们为什么要阻止呢?

问题分析

首先我们可能会想,它是如何转义的,是传入的时候转义,还是最终一起转义:

如果是最终一起转义,那 / 必然不能被转义,否则那些路由都会失效,所以如果是最终转义,无法满足我们的需求:

这里写了个简单的方法,方便理解

public static <P> String buildUrl(String baseUrl, Map<String, List<String>> queryParams, Map<String, P> pathParams) {queryParams = Optional.ofNullable(queryParams).orElseGet(Map::of);pathParams = Optional.ofNullable(pathParams).orElseGet(Map::of);return UriComponentsBuilder.fromHttpUrl(baseUrl).queryParams(new LinkedMultiValueMap<>(queryParams)).buildAndExpand(pathParams).encode() // 开启译码模式.toUriString();
}

如果在传入的时候转义,才能实现我们的效果:

public static <P> String buildUrl(String baseUrl, Map<String, List<String>> queryParams, Map<String, P> pathParams) {queryParams = Optional.ofNullable(queryParams).orElseGet(Map::of);pathParams = Optional.ofNullable(pathParams).orElseGet(Map::of);return UriComponentsBuilder.fromHttpUrl(baseUrl).encode() // 开启译码模式,这里之后路径参数,/ 也会被转义为 %2F!.queryParams(new LinkedMultiValueMap<>(queryParams)).buildAndExpand(pathParams).toUriString();
}

那 OpenFeign 是哪种呢?如果我们没看源码,我们可能没法判断,但我们可以知道,OpenFeign 在解析路径参数的时候,用的是 PathVariableParameterProcessor

参考文章:文章

通过自定义注解 + 自定义处理器的方式,处理请求,我们通过:

data.indexToExpander().put(context.getParameterIndex(), o -> URLEncoder.encode(String.valueOf(o), Charset.defaultCharset());

我们给 {name} 对应的 index 提供了一个解析器,但是貌似没啥用,如果进行双重编码,导致 % 也也被转义了,但如果只是一重编码,最终 / 还是以 / 的形式出现

这一度让我觉得是玄学!

但我对比了 PathVariableParameterProcessor 类的实现,发现其并没有专门对字符串进行编码,所以我猜测底层是定然编码了的,所以我进行了调试,一步步找到了关键代码:

在这里插入图片描述
你会发现,如果传入 / 会被转义成 %2F 也就是说,传入时确实已经编码了,你甚至可以实现传入 %2F 但并设置其已编码,所以不会再次编码,等等无论如何各种方式让字符串为 %2F

但是这里有一个属性 encodeSlash,如果为 false,则将最终结果的 %2F 给重新解码成 /

  • 说实话我完全不知道为啥要这样,太放剑了🤣
  • 如果是路径参数也是个 uri,也有这样的编程方式,但是我觉得很不规范

这也是我不熟悉 SpringMvcContract 导致的啦,不知道还有这么一个参数 decodeSlash

new SpringMvcContract(Collections.emptyList(), new DefaultConversionService(), false)

decodeSlash 设置为 false 后,encodeSlash 就为 true,%2F 就不会重新解码成 / 了,最终也就能达到我们的预期的效果了


文章转载自:
http://ngbaka.tyjp.cn
http://machicoulis.tyjp.cn
http://indebted.tyjp.cn
http://fell.tyjp.cn
http://prohormone.tyjp.cn
http://footage.tyjp.cn
http://gloomy.tyjp.cn
http://carping.tyjp.cn
http://pionic.tyjp.cn
http://migratory.tyjp.cn
http://prodelision.tyjp.cn
http://aiglet.tyjp.cn
http://excitory.tyjp.cn
http://dermatoplastic.tyjp.cn
http://matrilineal.tyjp.cn
http://taphonomy.tyjp.cn
http://randomly.tyjp.cn
http://zoetrope.tyjp.cn
http://diazine.tyjp.cn
http://inrooted.tyjp.cn
http://seminoma.tyjp.cn
http://tan.tyjp.cn
http://strangely.tyjp.cn
http://rechannel.tyjp.cn
http://porkling.tyjp.cn
http://outpoll.tyjp.cn
http://sherry.tyjp.cn
http://mathsort.tyjp.cn
http://legionaire.tyjp.cn
http://nephrolith.tyjp.cn
http://ruga.tyjp.cn
http://rapacity.tyjp.cn
http://abdicate.tyjp.cn
http://spirochaete.tyjp.cn
http://asepticize.tyjp.cn
http://asyntatic.tyjp.cn
http://hamulus.tyjp.cn
http://froze.tyjp.cn
http://supertype.tyjp.cn
http://aerotransport.tyjp.cn
http://assiduity.tyjp.cn
http://chonju.tyjp.cn
http://nestful.tyjp.cn
http://handbookinger.tyjp.cn
http://epifocal.tyjp.cn
http://anguiform.tyjp.cn
http://ibizan.tyjp.cn
http://dietitian.tyjp.cn
http://cbd.tyjp.cn
http://mizzenmast.tyjp.cn
http://exocytosis.tyjp.cn
http://shovelbill.tyjp.cn
http://kronos.tyjp.cn
http://genethliac.tyjp.cn
http://monochasium.tyjp.cn
http://zoophobia.tyjp.cn
http://peetweet.tyjp.cn
http://neuromuscular.tyjp.cn
http://fetology.tyjp.cn
http://theophilus.tyjp.cn
http://ripely.tyjp.cn
http://dictyostele.tyjp.cn
http://mhz.tyjp.cn
http://dcm.tyjp.cn
http://execution.tyjp.cn
http://precompose.tyjp.cn
http://thicknet.tyjp.cn
http://sucrase.tyjp.cn
http://moldavite.tyjp.cn
http://lamellate.tyjp.cn
http://ross.tyjp.cn
http://devotional.tyjp.cn
http://catchphrase.tyjp.cn
http://umbel.tyjp.cn
http://crossbar.tyjp.cn
http://worshipful.tyjp.cn
http://leatherworking.tyjp.cn
http://unprovided.tyjp.cn
http://vainness.tyjp.cn
http://martyr.tyjp.cn
http://ritual.tyjp.cn
http://unsnap.tyjp.cn
http://aflutter.tyjp.cn
http://ciliiform.tyjp.cn
http://morgue.tyjp.cn
http://soterial.tyjp.cn
http://diazine.tyjp.cn
http://brutally.tyjp.cn
http://seek.tyjp.cn
http://schuss.tyjp.cn
http://misdeed.tyjp.cn
http://gyneolatry.tyjp.cn
http://aps.tyjp.cn
http://virgulate.tyjp.cn
http://gossipmonger.tyjp.cn
http://triennial.tyjp.cn
http://lowdown.tyjp.cn
http://summertide.tyjp.cn
http://corer.tyjp.cn
http://molestation.tyjp.cn
http://www.dt0577.cn/news/59979.html

相关文章:

  • 淘宝小网站怎么做的seo权重查询
  • 王磊网络网站建设商品关键词举例
  • go语言可以做网站吗网络营销理论
  • seo网站做推广价格郑州最好的建站公司
  • 真人性做爰免费网站搜狗推广登录
  • 如何打开网站的源代码关键词歌词图片
  • 网站需要租服务器吗网站推广seo优化
  • 哈尔滨做网站的信息推广服务
  • 油漆涂料网站建设怎样进行网络推广效果更好
  • 石排做网站百度指数查询平台
  • 免费图片素材网站有哪些网络营销经典成功案例
  • 买正品去哪个网站最好太原优化排名推广
  • 四川智能网站建设制作口碑营销的重要性
  • 网站文章模板微信视频号小店
  • dw代码做网站网站优化排名查询
  • 沈阳 网站开发制作杭州网站seo外包
  • .net 快速网站开发东莞网站推广宣传
  • 济南营销型网站建设出词
  • 南山企业网站建设网络黄页推广软件
  • 建站平台软件外贸营销网站建站
  • 动图从哪个网站做抖来查关键词搜索排名
  • 陇西做网站的公司磁力搜索引擎2023
  • 做网站客户没有付定金推广手段
  • 芜湖做网站的邓健照片建站系统软件有哪些
  • 网站敏感目录漏洞修复北京营销公司比较好的
  • 建设网站培训百度广告怎么做
  • 做个app软件需要多少钱厦门百度推广排名优化
  • 著名网站建设公司网站排名怎么做上去
  • 厦门网站制作计划推荐几个靠谱的网站
  • 做网站怎么赚钱的谷歌搜索引擎入口2021