zuulfilter添加例外_Zuul【自定义Filter】

import staticorg.springframework.cloud.netflix.zuul.filters.support.FilterConstants.PRE_TYPE;importjavax.servlet.http.HttpServletRequest;importcom.netflix.zuul.ZuulFilter;importcom.netflix.zuul.context.RequestContext;importcom.netflix.zuul.exception.ZuulException;public class ThirdPreFilter extendsZuulFilter {/*** 设置filter的类型,支持4种类型

* {@linkorg.springframework.cloud.netflix.zuul.filters.support.FilterConstants}

*

 
 

* ERROR_TYPE = "error";//这种过滤器是在整个生命周期内,如果发生异常,就执行该filter,可以做全局异常处理。

* POST_TYPE = "post";//这种过滤器是在端点请求完毕,返回结果或者发生异常后执行的filter。如果需要对返回的结果进行再次处理,可以在这种过滤中处理逻辑。

* PRE_TYPE = "pre"; //在zuul网关按照规则路由到下级服务之前执行,如果需要对请求进行预处理,可以使用这种类型的过滤器。如:认证鉴权,限流等。

* ROUTE_TYPE = "route";//这种过滤器是zuul路由动作的执行者,是Apache HttpClient或Ribbon构建和发送原始HTTP请求的地方,现在也支持OKHTTP。

*

*

*@return

*/@OverridepublicString filterType() {returnPRE_TYPE; }/*** 设置filter的执行顺序,数字越小,优先级越高,反之越低

*

*@return

*/@Overridepublic intfilterOrder() {return 3;

}/*** 是否执行该过滤器,可以作为一个开关,如果一直都被执行,直接返回true即可

*

*@return

*/@Overridepublic booleanshouldFilter() {

RequestContext ctx=RequestContext.getCurrentContext();//从上下文获取logic-is-success值,用于判断此Filter是否执行

return (boolean) ctx.get("logic-is-success");

}/*** 该自定义filter的业务逻辑

*

*@return*@throwsZuulException*/@Overridepublic Object run() throwsZuulException {

System.out.println("这是ThirdPreFilter!");//从RequestContext获取上下文

RequestContext ctx =RequestContext.getCurrentContext();//从上下文获取HttpServletRequest

HttpServletRequest request =ctx.getRequest();//从request尝试获取b参数值

String b = request.getParameter("b");//如果b参数值为空则进入此逻辑

if (null ==b) {//对该请求禁止路由,也就是禁止访问下游服务

ctx.setSendZuulResponse(false);//设定responseBody供PostFilter使用

ctx.setResponseBody("{\"status\":500,\"message\":\"b参数为空!\"}");//logic-is-success保存于上下文,作为同类型下游Filter的执行开关,假定后续还有自定义Filter当设置此值

ctx.set("logic-is-success", false);//到这里此Filter逻辑结束

return null;

}//设置避免报空指针异常

ctx.set("logic-is-success", true);return null;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值