zoukankan      html  css  js  c++  java
  • Spring Cloud微服务实战 打造企业级优惠券系统 4-6 定义抽象过滤器类

    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;
        }
    }
    诸葛
  • 相关阅读:
    Android 开发 深入理解Handler、Looper、Messagequeue 转载
    Android 开发 Handler的基本使用
    Java 学习 注解
    Android 开发 AlarmManager 定时器
    Android 开发 框架系列 百度语音合成
    Android 开发 框架系列 Google的ORM框架 Room
    Android 开发 VectorDrawable 矢量图 (三)矢量图动画
    Android 开发 VectorDrawable 矢量图 (二)了解矢量图属性与绘制
    Android 开发 VectorDrawable 矢量图 (一)了解Android矢量图与获取矢量图
    Android 开发 知晓各种id信息 获取线程ID、activityID、内核ID
  • 原文地址:https://www.cnblogs.com/1446358788-qq/p/14296112.html
Copyright © 2011-2022 走看看