带有 Spring Boot 和 Netflix Zuul 的简单反向代理
Simple Reverse Proxy with Spring Boot and Netflix Zuul
我正在寻求使用 Spring 引导实现一个简单的反向代理,即:
- 轻松添加路由
- 能够在每个路由的基础上添加自定义身份验证
- 根据需要添加额外的headers
我看过 @EnableZuulProxy
注释提供的功能,但它似乎太重量级了,因为我不想使用 Eureka、Ribbon 或 Hystrix。但是,@EnableZuulServer
在配置上有点简单。
任何人都可以提供我所追求的示例吗? Netflix Zuul 是正确的选择还是我应该查看另一个库?
谢谢!
Zuul 是个不错的选择。我不确定其他替代方案,但我们已经开始构建 Zuul 过滤器(Pre/Post 和路由),它们可以拦截请求并根据您的需要进行所有 pre/post 处理和路由。与 Zuul 一起使用 Eureka、Ribbon 和 Hysterix 并不是强制性的。
简单反向代理服务器
使用 Spring 不使用 Ribbon、Eureka 或 Hystrix 的启动设置简单的反向代理很容易。
只需用 @EnableZuulProxy
注释您的主应用程序 class 并在您的配置中设置以下 属性:
ribbon.eureka.enabled=false
然后像这样在配置中定义路由:
zuul.routes.<route_name>.path=<route_path>
zuul.routes.<route_name>.url=http://<url_to_host>/
其中 <route_name>
是路由的任意名称,<route_path>
是使用 Ant 样式路径匹配的路径。
所以一个具体的例子是这样的
zuul.routes.userservice.path=users/**
zuul.routes.userservice.url=http://localhost:9999/
自定义过滤器
您还可以通过扩展和实施 ZuulFilter
class 并将其作为 @Bean
添加到您的 @Configuration
class.
再举一个具体的例子:
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();
}
}
我正在寻求使用 Spring 引导实现一个简单的反向代理,即:
- 轻松添加路由
- 能够在每个路由的基础上添加自定义身份验证
- 根据需要添加额外的headers
我看过 @EnableZuulProxy
注释提供的功能,但它似乎太重量级了,因为我不想使用 Eureka、Ribbon 或 Hystrix。但是,@EnableZuulServer
在配置上有点简单。
任何人都可以提供我所追求的示例吗? Netflix Zuul 是正确的选择还是我应该查看另一个库?
谢谢!
Zuul 是个不错的选择。我不确定其他替代方案,但我们已经开始构建 Zuul 过滤器(Pre/Post 和路由),它们可以拦截请求并根据您的需要进行所有 pre/post 处理和路由。与 Zuul 一起使用 Eureka、Ribbon 和 Hysterix 并不是强制性的。
简单反向代理服务器
使用 Spring 不使用 Ribbon、Eureka 或 Hystrix 的启动设置简单的反向代理很容易。
只需用 @EnableZuulProxy
注释您的主应用程序 class 并在您的配置中设置以下 属性:
ribbon.eureka.enabled=false
然后像这样在配置中定义路由:
zuul.routes.<route_name>.path=<route_path>
zuul.routes.<route_name>.url=http://<url_to_host>/
其中 <route_name>
是路由的任意名称,<route_path>
是使用 Ant 样式路径匹配的路径。
所以一个具体的例子是这样的
zuul.routes.userservice.path=users/**
zuul.routes.userservice.url=http://localhost:9999/
自定义过滤器
您还可以通过扩展和实施 ZuulFilter
class 并将其作为 @Bean
添加到您的 @Configuration
class.
再举一个具体的例子:
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();
}
}