简单zuul过滤器,查看调用情况

网上介绍zuu、介绍zuul过滤器的很多,就不再一一赘述,整了一个pre、一个error的过滤器,简单的看看网关的调用情况

代码实现如下:

preFilter

import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.nykj.framework.utils.Identities;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;

/**
 * @auther: com.cn
 * @description:
 * @date: 17:59 2018/7/30
 */

@Component
@Slf4j
public class PreFilter extends ZuulFilter {

    @Override
    public String filterType() {
        return "pre";
    }

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

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

    /**
     *  未在网关中配置的路径不会路由到这里
     * @return
     */
    @Override
    public Object run() {
        RequestContext ctx = RequestContext.getCurrentContext();
        HttpServletRequest request = ctx.getRequest();
        String uuid = Identities.uuid();
        log.info("send {} request to {} 请求ip:{}; uuid:{}", request.getMethod(),  request.getRequestURL().toString(), getIpAddress(request), uuid);
        request.setAttribute("request-uuid", uuid);
        return null;
    }

    public String getIpAddress(HttpServletRequest request) {
        String ip = request.getHeader("X-Forwarded-For");
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("WL-Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_CLIENT_IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("X-Real-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getRemoteAddr();
        }
        return ip;
    }

}
ErrorFilter
import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;

/**
 * @auther: com.cn
 * @description:
 * @date: 18:16 2018/7/30
 */

@Component
@Slf4j
public class ErrorFilter extends ZuulFilter {
    @Override
    public String filterType() {
        return "error";
    }

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

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

    @Override
    public Object run() {
        RequestContext ctx = RequestContext.getCurrentContext();
        HttpServletRequest request = ctx.getRequest();
        String requestUuid = (String)request.getAttribute("request-uuid");
        log.error("异常过滤器: send {} request to {}, RequestContext ResponseBody:{}, 请求uuid:{}", request.getMethod(), request.getRequestURL().toString(),ctx.getResponseBody(), requestUuid);
        log.error("异常过滤器: realUri路径 {}, 请求uuid:{}, (可能会打印两次)异常信息:{} ", ctx.get("requestURI"), requestUuid, ((Exception)ctx.get("throwable")));
        return null;
    }

猜你喜欢

转载自blog.csdn.net/Zzhou1990/article/details/81506996
今日推荐