web系统访问频率限制
无论是spring mvc还是struts,都可以为controller或者aciton执行前,增加拦截器。
通过拦截器中的逻辑控制,可以实现访问频率的限制。
首先构造访问频率数据类
class FrequencyData {
// 使用ip_methodName
String key;
// 记录开始时间
long startTime;
// 记录结束时间
long endTime;
// 访问频率限制时间长度
int time;
// 访问频率限制次数
int limit;
// 记录访问时间点
List<Long> accessPoints = new ArrayList<Long>();
public void reset(long time) {
startTime = endTime = time;
accessPoints.clear();
accessPoints.add(time);
}
}
在spring mvc的拦截器中,可以获取到拦截的方法名,并通过request获取到客户端的IP地址。
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
((HandlerMethod) handler).getMethod().getName();
((HandlerMethod) handler).getBean().getClass().getName();
request.getRemoteAddr()
.....
}
在拦截器类中建立一个保存每个客户端访问记录的Map数据
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系统访问频率限制的更多相关文章
- 大型web系统数据缓存设计
1. 前言 在高访问量的web系统中,缓存几乎是离不开的:但是一个适当.高效的缓存方案设计却并不容易:所以接下来将讨论一下应用系统缓存的设计方面应该注意哪些东西,包括缓存的选型.常见缓存系统的特点和数 ...
- 大型web系统数据缓存设计-l转载
原文地址:http://www.wmyouxi.com/a/60368.html#ixzz3tGYG9JwC 1. 前言 在高访问量的web系统中,缓存几乎是离不开的:但是一个适当.高效的缓存方案设计 ...
- 关于web系统整体优化提速总结
关于web系统整体优化提速总结 一.背景 随着公司业务的拓展,随之而来就是各种系统横向和纵向的增加,PV.UV也都随之增加,原有的系统架构和模式慢慢遇上了瓶颈,需要逐步的对系统从整体上进行改造升级,通 ...
- web系统整体优化
关于web系统整体优化提速总结 关于web系统整体优化提速总结 一.背景 随着公司业务的拓展,随之而来就是各种系统横向和纵向的增加,PV.UV也都随之增加,原有的系统架构和模式慢慢遇上了瓶颈,需要 ...
- (系统架构)标准Web系统的架构分层
标准Web系统的架构分层 1.架构体系分层图 在上图中我们描述了Web系统架构中的组成部分.并且给出了每一层常用的技术组件/服务实现.需要注意以下几点: 系统架构是灵活的,根据需求的不同,不一定每一层 ...
- Web系统大规模并发——电商秒杀与抢购
电商的秒杀和抢购,对我们来说,都不是一个陌生的东西.然而,从技术的角度来说,这对于Web系统是一个巨大的考验.当一个Web系统,在一秒钟内收到数以万计甚至更多请求时,系统的优化和稳定至关重要.这次我们 ...
- 亿级Web系统搭建——单机到分布式集群
当一个Web系统从日访问量10万逐步增长到1000万,甚至超过1亿的过程中,Web系统承受的压力会越来越大,在这个过程中,我们会遇到很多的问题.为了解决这些性能压力带来问题,我们需要在Web系统架构层 ...
- 浅谈大型web系统架构
动态应用,是相对于网站静态内容而言,是指以c/c++.php.Java.perl..net等服务器端语言开发的网络应用软件,比如论坛.网络相册.交友.BLOG等常见应用.动态应用系统通常与数据库系统. ...
- Web系统大规模并发——电商秒杀与抢购 【转】
电商的秒杀和抢购,对我们来说,都不是一个陌生的东西.然而,从技术的角度来说,这对于Web系统是一个巨大的考验.当一个Web系统,在一秒钟内收到数以万计甚至更多请求时,系统的优化和稳定至关重要.这次我们 ...
随机推荐
- angularjs 笔记(1) -- 引导
首先: 1,引入angularJS文件,<script type="text/javascript" src="angularjs.min.js"> ...
- push 到下一界面明显卡顿的现象
今天搭建界面,界面间的跳转使用了 push方法,结果发现界面间转换时有明显的卡顿现象,并没有做过数据请求之类的处理,所以感觉好神奇.以前好像也遇到过,当时在push 到的下级界面加个背景色.现在重新这 ...
- for变量作用域(vc6与vs)
for变量:写在for循环初始语句中的变量.如:for (int i=1,j=2; i<100; i++) vc6的for变量 int i 的作用域: void func(bool condit ...
- [C++11][数据结构]自己的双链表实现
这个双链表,是我模仿stl的list制作的,只实现了一些基本功能,像merge,transfer这些就没有实现,用户可以用基本操作来自己做外部实现. 我没有选用stl的[begin,end)迭代器模式 ...
- 特征检测之Haar
Harr特征, 主要用于人脸检测,可以参考我的博文 基于MATLAB的adaboost级联形式的人脸检测实现 1 harr特征的原理 2 haar特征的计算 3 haar特征的应用
- Delphi 各版本新特性功能网址收集
Delphi XE2 三个新功能介绍举例_西西软件资讯 http://www.cr173.com/html/13179_1.html delphi 2007新功能简介-davidxueer-Chin ...
- python split函数
Python split()通过指定分隔符对字符串进行切片,如果参数num 有指定值,则仅分隔 num 个子字符串 例 current_month = "2013-01-02" y ...
- Sharepoint+Office Infopath+快速搭建问卷调查系统
项目背景 要开发供公司内部使用的N多个在线调查问卷,要求信息在统一的平台上方便跟踪及管理. 公司内部上了Sharepoint系统及大家习惯了使用infopath及Quick app for share ...
- Java 实现文件上传、下载、打包、文件copy、文件夹copy。
文件and文件夹copy package org.test; import java.io.*; public class FileCopy { /** * 复制单个文件 * * @param old ...
- HDU1003 简单DP
Max Sum Problem Description Given a sequence a[1],a[2],a[3]......a[n], your job is to calculate the ...