微服务系列(5)-使用SpringCloud的zuul网关实现过滤

一、前言

zuul网关的两大功能就是请求转发和请求过滤,上篇博客中讲解了zuul的请求转发,这篇博客将讲解zuul的请求过滤。

二、开发工具及相关版本号

开发工具 版本号
idea 2018.2.4
spring boot 2.1.3
spring cloud Greenwich.RELEASE
java 1.8

三、zuul过滤器详解

  1. 包结构如下:
    在这里插入图片描述
  2. 过滤器实现类
package com.example.gateway.filter.pre;

import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;

import javax.servlet.http.HttpServletRequest;

public class LoginFilter extends ZuulFilter {
    
    

    /**
     * 过滤器执行时机
     * pre:可以在请求被路由之前调用。
     * routing:在路由请求时候被调用。
     * post:在routing和error过滤器之后被调用。
     * error:处理请求时发生错误时被调用。
     * @return
     */
    @Override
    public String filterType() {
    
    
        //请求路由之前进行拦截
        return "pre";
    }

    /**
     * 拦截顺序 数值越小 优先级越高
     * 自己实现的过滤器,建议执行顺序从0开始,
     * 因为zuul有默认的一些过滤器执行顺序为负,保证默认的过滤器会在业务过滤器之前执行
     * @return
     */
    @Override
    public int filterOrder() {
    
    
        return 0;
    }

    /**
     * 过滤器的拦截范围
     * @return
     */
    @Override
    public boolean shouldFilter() {
    
    
        //TODO 实现拦截范围的业务逻辑
        //此处默认拦截所有请求
        return true;
    }

    /**
     * 过滤器的核心方法,当请求被拦截之后会执行此方法
     *
     * @return
     * @throws ZuulException
     */
    @Override
    public Object run() throws ZuulException {
    
    
        //TODO 处理过滤器的业务逻辑
        //Zuul的上下文对象,其实就是一个map
        RequestContext context = RequestContext.getCurrentContext();
        //request对象
        HttpServletRequest request = context.getRequest();

        //TODO 实现登陆逻辑
        if(true){
    
    //假如登陆成功
            context.setSendZuulResponse(true);//开启路由
            context.set("isOk",true);//为后续的过滤器传值
            context.setResponseStatusCode(200);
        }else{
    
    
            context.setSendZuulResponse(false);//不进行路由,返回客户端response
            context.setResponseStatusCode(401); //未认证
        }

        return null;
    }
}

四、小结

zuul过滤器并没有采用一些新的东西,与其他框架常见的过滤器在实现上并没有什么大的差异,所以在使用和理解上还是很容易的。
博客中所有的代码都以上传到我的github上了,地址:俞兆鹏的github

猜你喜欢

转载自blog.csdn.net/zhaopeng_yu/article/details/87924141