0    课程地址

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

 

1    浓缩精华
1.1  4.1

 

2    个人关注
2.1  4.1中的获取令牌的方法

 

3    课程内容
3.1

 

4    代码演练
4.1  限流过滤器demo
package com.imooc.coupon.filter;

import com.google.common.util.concurrent.RateLimiter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;

/**
 * RateLimitFilter
 * 限流过滤器,可以用来限制流量,过滤ip等
 * @author 魏豆豆
 * @date 2021/6/9
 */
@Slf4j
@Component
public class RateLimitFilter extends AbstractPreZuulFilter {
    //每秒最多可以获得两个令牌,取到令牌代表成功,取不到代表令牌满了
    RateLimiter  limiter = RateLimiter.create(2.0);

    @Override
    public Object continueRun() {
        HttpServletRequest request = context.getRequest();
        //限流ip
        if(!request.getRequestURI().contains("127.0.0.1")){
            log.error("ip校验不通过");
            return fail(401,"ip校验不通过");
        }else{
            //可以获取到令牌
            if(limiter.tryAcquire()){
                log.info("获取令牌成功!");
                return success();
            }else{
                log.error("获取令牌失败");
                return fail(402,request.getRequestURI()+"获取令牌失败");
            }
        }
    }

    /**
     * 课程没有规定限流过滤器和token过滤器顺序,但是我认为应该先执行限流过滤器,出于安全角度考虑
     * @return
     */
    @Override
    public int filterOrder() {
        return 0;
    }
}

 

posted on 2021-01-19 07:24  菜鸟乙  阅读(94)  评论(0编辑  收藏  举报