您的位置:首页 > 编程语言 > Java开发

SpringCloud之Zuul网关

2019-05-01 00:02 239 查看
API网关的作用

路由、监控、负载均衡、权限控制、请求限制等

什么是Zuul

Zuul是从设备和网站到Netflix流应用程序后端的所有请求的前门。作为边缘服务应用程序,Zuul旨在实现动态路由,监控,弹性和安全性。它还能够根据需要将请求路由到多个Amazon Auto Scaling组。

Nginx与Zuul的区别

开发语言:nginx是使用c语言编写;zuul是java写的
负载均衡的实现:zuul使用ribbon;nginx采用服务端实现
nginx能整合一些脚本语言适合做服务端负载均衡;zuul里可以使用过滤器(黑白名单)、权限控制、请求限制、判断token是否有效等,虽然nginx也能实现但比较麻烦

Zuul 实现API网关 会话验证判断token是否有效
@Component
public class TokenFilter extends ZuulFilter{
/**
*  是否执行该过滤器。
*/
@Override
public boolean shouldFilter() {
return false;
}
/**
*  过滤器的具体逻辑。
*/
@Override
public Object run() throws ZuulException {
RequestContext currentContext = RequestContext.getCurrentContext();
HttpServletRequest request = currentContext.getRequest();
String userToken = request.getParameter("userToken");
if (StringUtils.isEmpty(userToken)) {
currentContext.setSendZuulResponse(false);
currentContext.setResponseStatusCode(401);
currentContext.setResponseBody("userToken is null");
return null;
}
// 否则正常执行业务逻辑.....
return null;
}
/**
*  前置过滤器。在 zuul 中定义了四种不同生命周期的过滤器类型:
* 	1、pre:可以在请求被路由之前调用;
* 	2、route:在路由请求时候被调用;
* 	3、post:在route和error过滤器之后被调用;
* 	4、error:处理请求时发生错误时被调用;
*/
@Override
public String filterType() {
return "pre";
}
/**
*  过滤的优先级,数字越大,优先级越低。
*/
@Override
public int filterOrder() {
return 0;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: