当前位置: 首页 > news >正文

动态网站开发基础教程时事热点新闻

动态网站开发基础教程,时事热点新闻,跨境电商千万别做亚马逊,个人餐饮网站模板限流整个流程过程 1.首先用户的请求进来,将用户ip和uri组成key,timestamp为value,放入zset 2. 更新当前key的缓存过期时间,这一步主要是为了定期清理掉冷数据,和上面我提到的常见错误设计2中的意义不同 3. 删除窗口之…

限流整个流程过程

1.首先用户的请求进来,将用户ip和uri组成key,timestamp为value,放入zset
2. 更新当前key的缓存过期时间,这一步主要是为了定期清理掉冷数据,和上面我提到的常见错误设计2中的意义不同
3. 删除窗口之外的数据记录
4. 统计当前窗口中的总记录数
5. 如果记录数大于阈值,则直接返回错误,否则正常处理用户请求

首先是定义一个注解,方便后续对不同接口使用不同的限制频率

package org.jeecg.common.aspect.annotation;import java.lang.annotation.*;/*** @Author xu* @create 2023/8/2 19*/
@Documented
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface RequestLimit {// 限制时间 单位:秒(默认值:一分钟)long period() default 60;// 允许请求的次数(默认值:5次)long count() default 5;}

切面AOP处理逻辑

package org.jeecg.common.aspect;import lombok.extern.log4j.Log4j2;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.jeecg.common.aspect.annotation.RequestLimit;
import org.jeecg.common.exception.JeecgBootException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.stereotype.Component;import javax.servlet.http.HttpServletRequest;
import java.util.concurrent.TimeUnit;/*** @Author xu* @create 2023/8/2 19*/
@Aspect
@Component
@Log4j2
public class RequestLimitAspect {@AutowiredRedisTemplate redisTemplate;// 切点@Pointcut("@annotation(requestLimit)")public void controllerAspect(RequestLimit requestLimit) {}@Around("controllerAspect(requestLimit)")public Object doAround(ProceedingJoinPoint joinPoint, RequestLimit requestLimit) throws Throwable {long period = requestLimit.period();long limitCount = requestLimit.count();Object[] args = joinPoint.getArgs();String ip = null;String url = null;for (Object arg : args) {if (arg instanceof HttpServletRequest) {HttpServletRequest request = (HttpServletRequest) arg;ip = request.getRemoteAddr();url = request.getRequestURI();break;  // 如果找到了符合条件的参数,可以选择跳出循环}}String key = "req_limit_".concat(url).concat(ip);ZSetOperations zSetOperations = redisTemplate.opsForZSet();long currentMs = System.currentTimeMillis();zSetOperations.add(key, currentMs, currentMs);redisTemplate.expire(key, period, TimeUnit.SECONDS);zSetOperations.removeRangeByScore(key, 0, currentMs - period * 1000);Long count = zSetOperations.zCard(key);if (count > limitCount) {log.error("接口拦截:{} 请求超过限制频率【{}次/{}s】,IP为{}", url, limitCount, period, ip);throw new JeecgBootException("请求太频繁,请稍后再试");}return joinPoint.proceed();}}

Controller层使用

	@AutoLog(value = "访客数据-添加")@RequestLimit(count = 2,period = 20)@ApiOperation(value="访客数据-添加", notes="访客数据-添加")@PostMapping(value = "/verifySave")public Result<?> verifySave(@RequestBody SysVisitantData sysVisitantData,HttpServletRequest request) {String ip = request.getRemoteAddr();String url = request.getRequestURI();return Result.OK("添加成功!");}
http://www.ds6.com.cn/news/80103.html

相关文章:

  • 深圳网站设计公司电中公教育培训机构官网
  • 济南建网站国外搜索引擎入口
  • 上海高端网站建设公司软文推广公司
  • 西安网站建设网络公司熊掌号合肥网络公司排名
  • 网站qq联系怎么做佛山网站建设十年乐云seo
  • 网站做水印有没有影响企业推广网络营销
  • 深圳网站的优化公司哪家好网站seo怎么操作
  • 小伟破解WordPress主题seo优化代理
  • 怎么做网站登录站短视频代运营方案模板
  • 网上做ps赚钱的网站海淀seo搜索优化多少钱
  • 中山市 做网站谷歌搜索引擎入口2021
  • 美女做基网站产品软文是什么意思
  • 大气建站工作室网站源码seo服务哪家好
  • php网站上做微信支付功能百度一下图片识别
  • 长沙做网站seoseo什么意思中文意思
  • 本地建设网站百度seo推广计划类型包括
  • 网站建设课程设计报告杭州seo专员
  • 乡镇可以做门户网站网站推广优化怎么做最好
  • 有哪些网站软件可以做网站的原型网站优化外包顾问
  • 品牌网站设计提案优化网站最好的刷排名软件
  • 苏州做网站哪家专业app软件推广平台
  • 订做网站和app苏州seo公司
  • 柳州网站建设找哪家好广东培训seo
  • 微信公众号编辑seo简单优化
  • 网站从服务器上下载文件青岛网站推广系统
  • 做网站的公司风险大不大推广软文营销案例
  • 买东西网站网页设计期末作业模板
  • 大昌建设集团有限公司网站seo主要做什么
  • 怎么做网站给国外看见从事网络销售都有哪些平台呢
  • wordpress设置邮件注册北京网优化seo优化公司