原创

网关功能实现的几种方式

试想一下,让你实现一个功能

  • 对请求进行预处理,状态校验,参数改写

  • 部分请求转发到后台的服务(类似网关的转发功能)

  • 清晰完整的记录各个请求的request、response、耗时

    面对这个需求,你的方案是什么?

1、可参考的方案

  • filter拦截请求,改写后通过http请求后端服务,然后复制response到请求流中
  • springboot网关插件zuul
  • 重写 HttpServletRequestWrapper、HttpServletResponseWrapper改写resquest、response

2、可行性分析

方案 优点 备注
zuul springboot插件,功能应该是可靠的 对接可能有点麻烦
http请求 复制response流 中规中矩,能实现 不是很优雅
重写HttpServletRequestWrapper、HttpServletResponseWrapper 转发到内部服务貌似不行,可改写请求体和内部接口 限制在服务内

3、重点说明

  • response的流正常只能读取一次,所以需要打印日志的话,需要重写把stream复制出来,简单的做法是重写HttpServletResponseWrapper
  • filter中不能改写url到服务之外,会报404
正文到此结束
本文目录