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

时间:2015-03-31 01:46:54

标签: spring-boot spring-cloud netflix netflix-zuul

我希望用Spring Boot实现一个简单的反向代理:

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

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

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

谢谢!

2 个答案:

答案 0 :(得分:3)

简单反向代理服务器

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

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

@EnableZuulProxy

然后在您的配置中定义您的路线,如:

ribbon.eureka.enabled=false

其中zuul.routes.<route_name>.path=<route_path> zuul.routes.<route_name>.url=http://<url_to_host>/ 是路由的任意名称,<route_name>是使用Ant样式路径匹配的路径。

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

<route_path>

自定义过滤器

您还可以通过扩展和实施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;
  }

}

答案 1 :(得分:1)

Zuul是个不错的选择。我不确定其他选择,但是,我们已经开始构建Zuul过滤器(前/后和路线),可以拦截请求并根据您的需要进行所有前/后处理和路线。使用整套Eureka,Ribbon和Hysterix以及Zuul并非强制性。