Zuul使用

本文介绍了Zuul的四种标准过滤器类型:pre、routing、post和error,并详细讲解了如何创建TokenFilter类以及如何在启动类中添加。此外,还阐述了如何定制熔断器返回内容,包括创建ProducerFallback实现FallbackProvider,修改Eureka项目的application.yml,并展示了在producer2服务关闭时的访问效果。最后,提到了在运行过程中可能遇到的YAML文件解析错误及其解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.Zuul四种标准过滤器类型(详细参考https://www.geekdigging.com/2019/08/31/2025584890/)

pre:执行之前
routing:执行阶段
ost:执行之后
error:发生错误时

2.创建TokenFilter类

public class TokenFilter extends ZuulFilter{
//是否需要开始过滤
	@Override
	public boolean shouldFilter() {
		// TODO Auto-generated method stub
		return true;
	}
//过滤逻辑代码
	@Override
	public Object run() throws ZuulException {
	 RequestContext ctx = RequestContext.getCurrentContext();
	        HttpServletRequest request = ctx.getRequest();

	        logger.info("--->>> TokenFilter {},{}", request.getMethod(), request.getRequestURL().toString());

	        String token = request.getParameter("token");// 获取请求的参数

	        if (StringUtils.isNotBlank(token)) {
	            ctx.setSendZuulResponse(true); //对请求进行路由
	            ctx.setResponseStatusCode(200);
	            ctx.set("isSuccess", true);
	            return null;
	        } else {
	            ctx.setSendZuulResponse(false); //不对其进行路由
	            ctx.setResponseStatusCode(400);
	            ctx.setResponseBody("token is empty");
	            ctx.set("isSuccess", false);
	            return null;
	        }
	}
	//pre
	@Override
	public String filterType() {
		// TODO Auto-generated method stub
		return "pre";
	}
//优先级,优先级越大则越晚执行
	@Override
	public int filterOrder() {
		// TODO Auto-generated method stub
		return 0;
	}

}

3.启动类添加

	//将拦截器加入到拦截请求
	@Bean
	public TokenFilter tokenFilter() {
	  return new TokenFilter();
	}

至此访问http://localhost:8280/spring-cloud-producer2/hello?name=spring
http://localhost:8280/spring-cloud-producer2/hello?name=spring&token=aa

4.定制熔断器返回内容

(1)创建ProducerFallback implements FallbackProvider

package com.springcloud.zuulsimple;

import java.io.IOException;
import java.io.InputStream;

import org.springframework.cloud.netflix.zuul.filters.route.FallbackProvider;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.client.ClientHttpResponse;

public class ProducerFallback implements FallbackProvider{

	@Override
	public String getRoute() {
		// TODO Auto-generated method stub
		 return "spring-cloud-producer2";
	}
	@Override
	public ClientHttpResponse fallbackResponse(String route, Throwable cause) {
		
		return fallbackResponse();
	}
	
	


	public ClientHttpResponse fallbackResponse(){
		// TODO Auto-generated method stub
		return new ClientHttpResponse() {


	}

}

(2)修改eureka项目的application.yml

eureka:
  server:
    enable-self-preservation: true

(3)关闭producer2再访问http://localhost:8280/spring-cloud-producer2/hello?name=spring&token=aa

(4)eclipse中运行项目访问会直接报错Whitelabel Error Page

This application has no explicit mapping for /error, so you are seeing this as a fallback.

Wed Jun 16 00:41:28 CST 2021
There was an unexpected error (type=Internal Server Error, status=500).
GENERAL

5.可能遇到错误

运行euraka项目可能会报错
Attempted to load Config resource 'class path resource [application.yml]' via location 'optional:classpath:/' but snakeyaml was not found on the classpath

解析:这是无法解析yaml文件,是编码出了问题,修改如下
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值