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; } }
诸葛