zoukankan      html  css  js  c++  java
  • Spring Cloud微服务实战 打造企业级优惠券系统 4-9 自定义访问日志过滤器

    0    课程地址

    https://coding.imooc.com/lesson/380.html#mid=28557

    1    浓缩精华
    1.1  4.1
    2    个人关注
    2.1  4.1

    过滤器传参取参的方法

    过滤器order最大值为999

    3    课程内容
    3.1
    4    代码演练
    4.1  自定义访问日志过滤器(计算所有过滤器执行时间)

    PreRequestFilter (起始过滤器最先执行的)

    package com.imooc.coupon.filter;
    
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.stereotype.Component;
    
    /**
     * PreRequestFilter
     * 自定义日志访问过滤器,统计日志执行时间,放在最前边
     * @author 魏豆豆
     * @date 2021/6/10
     */
    @Slf4j
    @Component
    public class PreRequestFilter extends AbstractPreZuulFilter{
        @Override
        public Object continueRun() {
            context.set("startTime", System.currentTimeMillis());
            log.info("开始时间为:"+ System.currentTimeMillis());
            return null;
        }
    
        @Override
        public int filterOrder() {
            return 0;
        }
    }

    AccessLogFilter (末尾过滤器最后执行的)

    package com.imooc.coupon.filter;
    
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants;
    import org.springframework.stereotype.Component;
    
    /**
     * AccessLogFilter
     *
     * @author 魏豆豆
     * @date 2021/6/10
     */
    @Slf4j
    @Component
    public class AccessLogFilter extends AbstractPostZullFilter {
        @Override
        public Object continueRun() {
            long startTime = (long)context.get("startTime");
            long spentTime = System.currentTimeMillis()-startTime;
            log.info("花费时间"+spentTime);
            return null;
        }
    
        @Override
        public int filterOrder() {
            //第1000条将不再执行
            return FilterConstants.SEND_RESPONSE_FILTER_ORDER-1;
        }
    }

    FilterConstants(引用的常量)

    //
    // Source code recreated from a .class file by IntelliJ IDEA
    // (powered by Fernflower decompiler)
    //
    
    package org.springframework.cloud.netflix.zuul.filters.support;
    
    public class FilterConstants {
        public static final String IS_DISPATCHER_SERVLET_REQUEST_KEY = "isDispatcherServletRequest";
        public static final String FORWARD_TO_KEY = "forward.to";
        public static final String PROXY_KEY = "proxy";
        public static final String REQUEST_ENTITY_KEY = "requestEntity";
        public static final String REQUEST_URI_KEY = "requestURI";
        public static final String RETRYABLE_KEY = "retryable";
        public static final String ROUTING_DEBUG_KEY = "routingDebug";
        public static final String SERVICE_ID_KEY = "serviceId";
        public static final String LOAD_BALANCER_KEY = "loadBalancerKey";
        public static final int DEBUG_FILTER_ORDER = 1;
        public static final int FORM_BODY_WRAPPER_FILTER_ORDER = -1;
        public static final int PRE_DECORATION_FILTER_ORDER = 5;
        public static final int RIBBON_ROUTING_FILTER_ORDER = 10;
        public static final int SEND_ERROR_FILTER_ORDER = 0;
        public static final int SEND_FORWARD_FILTER_ORDER = 500;
        public static final int SEND_RESPONSE_FILTER_ORDER = 1000;
        public static final int SIMPLE_HOST_ROUTING_FILTER_ORDER = 100;
        public static final int SERVLET_30_WRAPPER_FILTER_ORDER = -2;
        public static final int SERVLET_DETECTION_FILTER_ORDER = -3;
        public static final String ERROR_TYPE = "error";
        public static final String POST_TYPE = "post";
        public static final String PRE_TYPE = "pre";
        public static final String ROUTE_TYPE = "route";
        public static final String FORWARD_LOCATION_PREFIX = "forward:";
        public static final int HTTP_PORT = 80;
        public static final int HTTPS_PORT = 443;
        public static final String HTTP_SCHEME = "http";
        public static final String HTTPS_SCHEME = "https";
        public static final String SERVICE_HEADER = "X-Zuul-Service";
        public static final String SERVICE_ID_HEADER = "X-Zuul-ServiceId";
        public static final String X_FORWARDED_FOR_HEADER = "X-Forwarded-For";
        public static final String X_FORWARDED_HOST_HEADER = "X-Forwarded-Host";
        public static final String X_FORWARDED_PREFIX_HEADER = "X-Forwarded-Prefix";
        public static final String X_FORWARDED_PORT_HEADER = "X-Forwarded-Port";
        public static final String X_FORWARDED_PROTO_HEADER = "X-Forwarded-Proto";
        public static final String X_ZUUL_DEBUG_HEADER = "X-Zuul-Debug-Header";
    
        private FilterConstants() {
            throw new AssertionError("Must not instantiate constant utility class");
        }
    }
    诸葛
  • 相关阅读:
    [链接]实现GEF程序中的剪切/复制/粘贴功能
    管理Oracle数据库要注意的一些问题
    [Eclipse]GEF入门系列(五、浅谈布局)
    由于Eclipse版本不符造成的异常
    [Eclipse]处理颜色类型的偏好项
    [Eclipse]关于EMF
    [Eclipse]GEF入门系列(六、添加菜单和工具条)
    《敏捷个人认识自我,管理自我》前言
    【敏捷个人俱乐部】QQ群第二次公开接受加入 及 12月4日晚上聊天记录
    101与金根回顾敏捷个人:(97)通过实践TOGAF来思考如何学习并应用新的方法?
  • 原文地址:https://www.cnblogs.com/1446358788-qq/p/14296116.html
Copyright © 2011-2022 走看看