掘金日新计划 · 8 月更文挑战第24天--网关过滤器和网关其他配置

96 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第24天,点击查看活动详情

今天我们来学习一下网关过滤器和网关的其他配置,小伙伴们跟着我一起开始学习啦。

1.配置网关前缀和url相关配置

在good-zuul的resources/application.properties编辑文件 image.png

#配置网关前缀
zuul.prefix=/imooc
#good-list服务
#网关访问地址
zuul.routes.good-list.path=/list/**
#定义服务ID
zuul.routes.good-list.service-id=good-list
#good-price 服务
zuul.routes.good-price.path=/price/**
zuul.routes..good-price.service-id=good-price

1.1重启网关服务ZuulGatewayApplication

1.2测试

good-list服务 http://localhost:9000/imooc/list/goods image.png good-price服务
http://localhost:9000/imooc/price/goodsAndPrice image.png

2.网关过滤器

2.1在com.imooc.good新增filter包,专门用来处理网关过滤

2.2新建PreRequestFilter类,用来处理网关请求之前的过滤请求

image.png

@Component
public class PreRequestFilter extends ZuulFilter {
    @Override
    public String filterType() {
        return FilterConstants.PRE_TYPE;
    }

    @Override
    public int filterOrder() {
        return 5;
    }

    @Override
    public boolean shouldFilter() {
        return true;
    }

    @Override
    public Object run() throws ZuulException {
        RequestContext currentContext = RequestContext.getCurrentContext();
        System.out.println(currentContext.getRequest().getRequestURI());
        return null;
    }
}

解释一下代码: @Component 表示该类是组件
filterType 表示该网关方法是请求之前的
filterOrder 通过int值来定义过滤器的执行顺序,数值越小优先级越高
shouldFilter 处理过滤条件
Object run() 用来处理业务逻辑,比如想要获取地址栏参数等 获取地址栏uri RequestContext currentContext = RequestContext.getCurrentContext(); System.out.println(currentContext.getRequest().getRequestURI());

2.3编写好网关服务我们重启服务并且访问url地址

http://localhost:9000/imooc/price/goodsAndPrice image.png 可以发现控制台打印出uri地址信息

2.4新建PostRequestFilter类,用来处理Post请求之后的过滤

image.png

@Component
public class PostRequestFilter extends ZuulFilter {
    @Override
    public String filterType() {
        return FilterConstants.POST_TYPE;
    }

    @Override
    public int filterOrder() {
        return FilterConstants.SEND_RESPONSE_FILTER_ORDER-1;
    }

    @Override
    public boolean shouldFilter() {
        return true;
    }

    @Override
    public Object run() throws ZuulException {
        RequestContext currentContext = RequestContext.getCurrentContext();
        System.out.println(currentContext.getResponse().getStatus());
        return null;
    }
}

代码说明:
获取post请求之后的status:
RequestContext currentContext = RequestContext.getCurrentContext(); System.out.println(currentContext.getResponse().getStatus());

2.5编写好网关服务我们重启服务并且访问url地址

http://localhost:9000/imooc/price/goodsAndPrice 返回了后置post的状态码 image.png