0 课程地址
https://coding.imooc.com/lesson/380.html#mid=28553
1 浓缩精华
1.1 3.1
2 个人关注
2.1 4.1demo
字符串格式化 String.format(方法)
3 课程内容
3.1 过滤器最通用的方法
ZuulFilter类:
filterType:过滤器类型
filterOrder:同类型过滤器执行顺序
IZuulFilter接口:
shouldFilter:过滤器是否会被执行,返回true or false
run:如果shouldFilter为true,才会执行,最核心的方法
4 代码演练
4.1 定义抽象过滤器类(共三个类,一个通用过滤器类,两个继承通用过滤器类的类型过滤器)
通用过滤器 AbstractPostZullFilter
package com.imooc.coupon.filter; import com.netflix.zuul.ZuulFilter; import com.netflix.zuul.context.RequestContext; import com.netflix.zuul.exception.ZuulException; /** * AbstractZuulFilter * 本类定义 通用抽象过滤器类,主要实现 * 是否执行过滤器和过滤器方法 * @author 魏豆豆 * @date 2021/6/8 */ public abstract class AbstractZuulFilter extends ZuulFilter { //该类作为过滤器之间传递消息使用,数据保存在每个threalocal中 //扩展了map RequestContext context; private static final String NEXT = "next"; /** * 重写IZuulFilter方法,表示该单元是否会执行 * @return */ @Override public boolean shouldFilter() { //bbb 得到当前的RequestContext,不要用new context = RequestContext.getCurrentContext(); //yyy 明白了,获取key为next的 value (value为布尔类型) 查看fail方法 return (boolean)context.getOrDefault(NEXT,true); } /** * 重写IZuulFilter方法,表示执行该单元unit * @return * @throws ZuulException */ @Override public Object run() throws ZuulException { // context = RequestContext.getCurrentContext(); return continueRun(); } public abstract Object continueRun(); Object fail(int code,String message){ context.set(NEXT,false); context.setSendZuulResponse(false);//返回响应失败 context.getResponse().setContentType("text/html;charset=UTF-8"); //返回错误响应码和错误响应信息 context.setResponseStatusCode(code); //这里使用java字符串格式化,详细参考https://blog.csdn.net/wsc912406860/article/details/82771386 context.setResponseBody(String.format("{\"result\":\"%s!\"}",message)); return null; } //成功竟然不需要响应码 Object success(){ context.set(NEXT,true); return null; } }
前置抽象过滤器 AbstractPreZuulFilter
package com.imooc.coupon.filter; import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants; /** * AbstractPreZuulFilter * * @author 魏豆豆 * @date 2021/6/8 */ public abstract class AbstractPreZuulFilter extends AbstractZuulFilter { /** * 前置过滤器抽象类 * @return */ @Override public String filterType() { return FilterConstants.PRE_TYPE; } }
后置抽象过滤器 AbstractPostZullFilter
package com.imooc.coupon.filter; import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants; /** * AbstractPostZullFilter * 定义post抽象过滤器 * @author 魏豆豆 * @date 2021/6/8 */ public abstract class AbstractPostZullFilter extends AbstractZuulFilter{ @Override public String filterType() { return FilterConstants.POST_TYPE; } }
诸葛