无论是spring mvc还是struts,都可以为controller或者aciton执行前,增加拦截器。

通过拦截器中的逻辑控制,可以实现访问频率的限制。

首先构造访问频率数据类

  1. class FrequencyData {
  2. // 使用ip_methodName
  3. String key;
  4. // 记录开始时间
  5. long startTime;
  6. // 记录结束时间
  7. long endTime;
  8. // 访问频率限制时间长度
  9. int time;
  10. // 访问频率限制次数
  11. int limit;
  12. // 记录访问时间点
  13. List<Long> accessPoints = new ArrayList<Long>();
  14.  
  15. public void reset(long time) {
  16. startTime = endTime = time;
  17. accessPoints.clear();
  18. accessPoints.add(time);
  19. }
  20. }

在spring mvc的拦截器中,可以获取到拦截的方法名,并通过request获取到客户端的IP地址。

  1. @Override
  2. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
  3. ((HandlerMethod) handler).getMethod().getName();
  4. ((HandlerMethod) handler).getBean().getClass().getName();
      request.getRemoteAddr()
  5. .....
  6. }

在拦截器类中建立一个保存每个客户端访问记录的Map数据

  1. private static Map<String, FrequencyData> FreqDatas = new HashMap<String, FrequencyData>(MAX_SIZE);

访问频率限制执行流程如下:

1、计算key值,即为ip_methodName,获取对应的FrequencyData。

2、如果FrequencyData数据不存在,新建并保存到FreqDatas中。

3、FrequencyData数据中的time和limit可固定写死,也可通过注解获取(在被调用的方法上,增加自定义的注解,注解中指定两个参数)。

4、在FrequencyData数据的accessPoints中增加一个记录,并更新endTime时间。

5、计算endTime-startTime是否大于time值。如果大于,执行FrequencyData的reset()。

6、计算accessPoints.size()是否大于limit值。若小于,继续执行调用的方法;若大于,不继续执行调用的方法。

此时,便可完成一个简单的访问频率控制功能。

web系统访问频率限制的更多相关文章

  1. 大型web系统数据缓存设计

    1. 前言 在高访问量的web系统中,缓存几乎是离不开的:但是一个适当.高效的缓存方案设计却并不容易:所以接下来将讨论一下应用系统缓存的设计方面应该注意哪些东西,包括缓存的选型.常见缓存系统的特点和数 ...

  2. 大型web系统数据缓存设计-l转载

    原文地址:http://www.wmyouxi.com/a/60368.html#ixzz3tGYG9JwC 1. 前言 在高访问量的web系统中,缓存几乎是离不开的:但是一个适当.高效的缓存方案设计 ...

  3. 关于web系统整体优化提速总结

    关于web系统整体优化提速总结 一.背景 随着公司业务的拓展,随之而来就是各种系统横向和纵向的增加,PV.UV也都随之增加,原有的系统架构和模式慢慢遇上了瓶颈,需要逐步的对系统从整体上进行改造升级,通 ...

  4. web系统整体优化

    关于web系统整体优化提速总结   关于web系统整体优化提速总结 一.背景 随着公司业务的拓展,随之而来就是各种系统横向和纵向的增加,PV.UV也都随之增加,原有的系统架构和模式慢慢遇上了瓶颈,需要 ...

  5. (系统架构)标准Web系统的架构分层

    标准Web系统的架构分层 1.架构体系分层图 在上图中我们描述了Web系统架构中的组成部分.并且给出了每一层常用的技术组件/服务实现.需要注意以下几点: 系统架构是灵活的,根据需求的不同,不一定每一层 ...

  6. Web系统大规模并发——电商秒杀与抢购

    电商的秒杀和抢购,对我们来说,都不是一个陌生的东西.然而,从技术的角度来说,这对于Web系统是一个巨大的考验.当一个Web系统,在一秒钟内收到数以万计甚至更多请求时,系统的优化和稳定至关重要.这次我们 ...

  7. 亿级Web系统搭建——单机到分布式集群

    当一个Web系统从日访问量10万逐步增长到1000万,甚至超过1亿的过程中,Web系统承受的压力会越来越大,在这个过程中,我们会遇到很多的问题.为了解决这些性能压力带来问题,我们需要在Web系统架构层 ...

  8. 浅谈大型web系统架构

    动态应用,是相对于网站静态内容而言,是指以c/c++.php.Java.perl..net等服务器端语言开发的网络应用软件,比如论坛.网络相册.交友.BLOG等常见应用.动态应用系统通常与数据库系统. ...

  9. Web系统大规模并发——电商秒杀与抢购 【转】

    电商的秒杀和抢购,对我们来说,都不是一个陌生的东西.然而,从技术的角度来说,这对于Web系统是一个巨大的考验.当一个Web系统,在一秒钟内收到数以万计甚至更多请求时,系统的优化和稳定至关重要.这次我们 ...

随机推荐

  1. Sublime Text3中Autoprefixer失效解决方法

    进入CSS文件,默认配置在按下快捷键(Ctrl+Shift+P)后输入Autoprefix,你会发觉它什么事也没干,然后--这什么鬼?抓狂ing-- 原来是因为这玩意还要配置下,以下为配置方法: Pr ...

  2. iOS 查询数组中的对象

    简述:Cocoa框架中的NSPredicate用于查询,原理和用法都类似于SQL中的where,作用相当于数据库的过滤取. 定义(最常用到的方法): NSPredicate *ca = [NSPred ...

  3. iOS开发UI篇—核心动画(UIView封装动画)

    iOS开发UI篇—核心动画(UIView封装动画) 一.UIView动画(首尾) 1.简单说明 UIKit直接将动画集成到UIView类中,当内部的一些属性发生改变时,UIView将为这些改变提供动画 ...

  4. ActiveMQ开发与简介

    1.概述与介绍 ActiveMQ是Apache出品,最流行的.功能强大的即时通讯和集成模式的开源服务器.ActiveMQ是一个完全支持JMS1.1和J2EE1.4规范的JMSProvider实现.提供 ...

  5. C/C++中无条件花括号的妙用

    C/C++中无条件花括号可以形成一个代码块,一个作用域.可以使括号内定义的变量就只在本域(就是这个大括号)内有效,而且不会影响其他域,即使名字相同. 在花括号内,如果变量前面带类型,则相当于新创建一个 ...

  6. 【基础知识】UML基础

    http://www.ibm.com/developerworks/cn/rational/r-uml/

  7. 【转】C#中WinForm程序退出方法技巧总结

    C#中WinForm程序退出方法技巧总结 一.关闭窗体 在c#中退出WinForm程序包括有很多方法,如:this.Close(); Application.Exit();Application.Ex ...

  8. UML学习(三)-----序列图

    UML的模型中可分为两种,动态模型和静态模型.用例图.类图和对象图都是UML中的静态结构模型.而在UML系统动态模型的其中一种就是交互视图,它描述了执行系统功能的各个角色之间相互传递消息的顺序关系.序 ...

  9. 浏览器-04 WebKit 渲染2

    渲染主循环(main loop)和requestAnimationFrame requestAnimationFrame 使用requestAnimationFrame而非setTimeout/set ...

  10. block fomating context

    http://www.w3help.org/zh-cn/kb/010/ 它与普通的块框类似,不同之处在于: 1可以包含浮动元素 2可以阻止外边距折叠 3可以防止元素被浮动元素覆盖 placeholde ...