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;
        }
    }
    诸葛
  • 相关阅读:
    微信小程序实现运动步数排行(可删除)
    一个文艺的在线生成漂亮的二维码工具网站
    微信小程序常见的UI框架/组件库总结
    小程序踩坑记- tabBar.list[3].selectedIconPath 大小超过 40kb
    推荐一款便捷的在线图片处理工具
    如何在本地运行查看github上的开源项目
    微信小程序实现运动步数排行(可删除)
    从零开始学ios开发(三):第一个有交互的app
    从零开始学ios开发(二):Hello World!来啦!
    从零开始学ios开发(一):准备起航
  • 原文地址:https://www.cnblogs.com/1446358788-qq/p/14296112.html
Copyright © 2011-2022 走看看