一尘不染

具有Spring Boot和Netflix Zuul的简单反向代理

spring-boot

我正在寻找用Spring Boot实现一个简单的反向代理,即:

  • 易于添加路线
  • 能够基于每个路由添加自定义身份验证
  • 根据需要添加其他标题

我已经查看了@EnableZuulProxy注释提供的功能,但是它似乎太重了,因为我不想使用Eureka,Ribbon或Hystrix。但是,@EnableZuulServer在配置上有点轻。

有人能提供我所追求的例子吗?Netflix Zuul是这个的正确选择,还是我应该看的另一个图书馆?

谢谢!


阅读 342

收藏
2020-05-30

共1个答案

一尘不染

简单反向代理服务器

使用不带Ribbon,Eureka或Hystrix的Spring Boot设置简单的反向代理很容易。

只需使用注释主应用程序类,@EnableZuulProxy并在配置中设置以下属性:

ribbon.eureka.enabled=false

然后在您的配置中定义路由,如下所示:

zuul.routes.<route_name>.path=<route_path>    
zuul.routes.<route_name>.url=http://<url_to_host>/

where <route_name>是您的路线的任意名称,并且<route_path>是使用Ant样式的路径匹配的路径。

所以一个具体的例子就是这样

zuul.routes.userservice.path=users/**
zuul.routes.userservice.url=http://localhost:9999/

自定义过滤器

您还可以通过扩展和实现ZuulFilter类并将其作为类添加@Bean到您的@Configuration类中,以实现自定义身份验证和任何其他标头。

再举一个具体的例子:

public class MyFilter extends ZuulFilter {

  @Override
  public String filterType() {
    // can be pre, route, post, and error
    return "pre";
  }

  @Override
  public int filterOrder() {
    return 0;
  }

  @Override
  public boolean shouldFilter() {
    return true;
  }

  @Override
  public Object run() {
    // RequestContext is shared by all ZuulFilters
    RequestContext ctx = RequestContext.getCurrentContext();
    HttpServletRequest request = ctx.getRequest();

    // add custom headers
    ctx.addZuulRequestHeader("x-custom-header", "foobar");

    // additional custom logic goes here

    // return isn't used in current impl, null is fine
    return null;
  }

}

然后

@Configuration
public class GatewayApplication {

  @Bean
  public MyFilter myFilter() {
    return new myFilter();
  }

}
2020-05-30