4

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

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

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

谁能提供一个我所追求的例子?Netflix Zuul 是正确的选择,还是我应该看另一个库?

谢谢!

4

2 回答 2

5

简单的反向代理服务器

使用没有 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();
  }

}
于 2017-02-26T07:41:11.927 回答
1

Zuul 是一个不错的选择。我不确定其他替代方案,但是,我们已经开始构建 Zuul 过滤器(Pre/Post 和 Route),它可以拦截请求并根据您的需要进行所有前/后处理和路由。与 Zuul 一起使用 Eureka、Ribbon 和 Hysterix 并不是强制性的。

于 2015-03-31T07:20:09.240 回答