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;
    }
}

 

posted on 2021-01-19 07:22  菜鸟乙  阅读(82)  评论(0编辑  收藏  举报