0606-Zuul构建API Gateway-Zuul过滤器以及禁用Zuul过滤器
一、概述
针对Spring Cloud的Zuul配备了许多在代理和服务器模式下默认启用的ZuulFilter bean。
有关启用的可能过滤器,请参阅zuul过滤器包。
二、Zuul过滤器使用
2.1、传统过滤器:java.servlet.Filter
package javax.servlet; import java.io.IOException; public interface Filter { public void init(FilterConfig filterConfig) throws ServletException; public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException; public void destroy(); }
2.2、ZuulFilter过滤器类型与生命周期
Zuul大部分功能是同过过滤器实现。有四种:
1》PRE,在请求被路由之前调用,可利用这种过滤器实现身份认证、在集群中选择请求的微服务、记录调试信息等
2》ROUTING,这种过滤器将请求路由到微服务。用于构建发送给微服务的请求,并使用apache httpclient或Netfilx Ribbon请求微服务
3》POST,在路由到微服务以后执行,可用来为响应添加标准的HTTP HEADER、收集统计信息和指标,将响应从微服务发送个客户段等
4》ERROR,在其他阶段发生错误是、时执行该过滤器
参看地址:http://techblog.netfilx.com/2013/06/announcing-zuul-edge-service-in-cloud.html
https://github.com/Netflix/zuul/wiki/how-it-works
生命周期图
2.3、代码开发
PreZuulFilter
package com.lhx.cloud; import javax.servlet.http.HttpServletRequest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.netflix.zuul.ZuulFilter; import com.netflix.zuul.context.RequestContext; public class PreZuulFilter extends ZuulFilter { private static final Logger log = LoggerFactory.getLogger(PreZuulFilter.class); @Override public Object run() { // 具体执行 HttpServletRequest request = RequestContext.getCurrentContext().getRequest(); String host = request.getRemoteHost(); PreZuulFilter.log.warn("请求主机:" + host); return null; } @Override public boolean shouldFilter() { // 是否执行次过滤器 return true; } @Override public int filterOrder() { // 执行顺序 ,数值越大 越后执行 return 1; } @Override public String filterType() { // 执行类型 return "pre"; } }
注意要将被类扫描进去
@Bean public PreZuulFilter pre() { return new PreZuulFilter(); }
2.4、参看代码
包:spring-cloud-netflix-core-1.4.4.RELEASE.jar下的zuul的filter
2.5、禁用Zuul的Filter
禁用过滤器:zuul.<SimpleClassName>.<filterType>.disable=true
按照惯例,过滤器后面的包是Zuul过滤器类型。示例禁用 org.springframework.cloud.netflix.zuul.filters.post.SendResponseFilter
设置zuul.SendResponseFilter.post.disable=true
.
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· 趁着过年的时候手搓了一个低代码框架
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!