SpringCloud之Zuul网关

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;
	}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值