spring-boot - 通过过滤器/拦截器代理http请求的最直接方法是什么?
问题描述
对于我的项目,我需要使用过滤器或拦截器在 Spring Boot 中实现一个简单的代理。因此,我的微服务 A 将只接收一个针对微服务 B 的 http 请求,将其与所有标头/查询参数一起转发,并使用正确的响应代码返回好或坏的响应,并且微服务 B 将添加任何响应标头。
我知道已经准备好使用诸如 spring-cloud-gateway 或 spring-cloud-zuul 之类的库,但它们都与我拥有的其他规范冲突并且无法使用它们。此外,我真的不需要任何过滤/聚合逻辑,我只想做一个简单的代理。
我尝试执行以下操作:
@Component
@Order(1)
public class ByPassFilter extends OncePerRequestFilter {
@Value("${proxy.active}")
private Boolean active;
@Override
public void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) {
if(active){
RestTemplate rest = new RestTemplate(); //overkill here?
HttpMethod method = HttpMethod.resolve(request.getMethod());
switch(method){
case GET:
//use rest template to do get
}
}else{
filterChain.doFilter(request, response);
}
}
但是 RestTemplate 似乎很复杂,因为它应该在我要处理/处理请求时使用,如果代码不是 200,它甚至会返回异常。我也不知道如何将输出直接写入 HttpServletResponse。
那么,还有其他更透明的方式吗?我看到有人使用 apache 的 OkHttpClient,是不是比 RestTemplate 更通用一点?
解决方案
推荐阅读
- date - 减去两个日期和时间,看看后面的值是否超过 2 小时
- c# - 在 C# 中连接到多个 RabbitMQ 主机
- sql - 如果子查询不属于“分组依据”,则不支持“选择”或“排序依据”中的子查询
- python - 在 MacOS 中刷新 Excel 文件的外部数据
- javascript - 如何在javascript数据库中存储复杂对象?[JSON.stringify() 导致错误]
- reactjs - 覆盖 React 组件中的内部元素属性
- matlab - Running a for loop through 5 data structs
- c# - C# Setting a value in a single element of a multi-level array is setting the value in every element
- python - Pandas - 应用蒙版时加快模式计算
- python - 我可以将预训练的 pdf 函数传递给 seaborn.distplot 吗?