说明

我们在把开发好的网站上线之前一定要考虑到别人恶意刷新你的网页这种情况,最大限度的去限制他们。否则往往这将搞垮你的应用服务器,想象一下某个恶意用户利用众多肉鸡在1分钟内请求你网页几十万次是个什么情形?

部分内容参考网络。

要达到什么效果?

我限制请求的用户,根据来访ip去记录它n分钟之内请求单一网页的次数,如果超过n次我就把这个ip添加到缓存黑名单并限制它3小时之内无法访问类型网页。

效果图

1分钟内请求单网页超过15次就被加入黑名单,冻结3小时!

开发步骤

采用aop+ehcache方式。(redis也可以)

aop用于拦截和逻辑判断,ehcache负责计数和缓存。

配置ehcache

略。

创建注解

@retention(retentionpolicy.runtime)

@target(elementtype.method)

@documented

@order(ordered.highest_precedence)

public @interface requestlimit {

/**

* 允许访问的最大次数

*/

int count() default 15;

/**

* 时间段,单位为毫秒,默认值一分钟

*/

long time() default 1000*60;

}

创建aop

@aspect

@component

public class requestlimitaspect {

private static final logger logger = loggerfactory.getlogger(requestlimit.class);

@autowired

ehcacheutil ehcacheutil;

@before("within(@org.springframework.stereotype.controller *) && @annotation(limit)")

public void requestlimit(final joinpoint joinpoint , requestlimit limit) throws requestlimitexception {

try {

object[] args = joinpoint.getargs();

httpservletrequest request = ((servletrequestattributes) requestcontextholder.getrequestattributes()).getrequest();

string ip = iputil.getremoteip(request);

string uri = request.getrequesturi().tostring();

string key = "req_"+uri+"_"+ip;

string blackkey = "black_"+ip; // 黑名单ip封锁一段时间

int count = 0; // 访问次数

// 判断是否在黑名单

if (ehcacheutil.contains("countcache",blackkey)){

throw new requestlimitexception();

}else{

// 判断是否已存在访问计数

if (!ehcacheutil.contains("limitcache",key)) {

ehcacheutil.put("limitcache",key,1);

} else {

count = ehcacheutil.getint("limitcache",key)+1;

ehcacheutil.put("limitcache",key,count);

if (count > limit.count()) {

logger.info("用户ip[" + ip + "]访问地址[" + uri + "]超过了限定的次数[" + limit.count() + "]");

// 加入黑名单

ehcacheutil.put("countcache",blackkey,"badguy");

throw new requestlimitexception();

}

}

}

}catch (requestlimitexception e){

throw e;

}catch (exception e){

logger.error("发生异常",e);

}

}

}

应用aop

找到要应用的接口加上注解@requestlimit即可。

@requestlimit(count=10)

@operlog(opermodule = "更多文章",opertype = "查询",operdesc = "查询更多文章")

@getmapping("/more/{categoryid}")

public string getmore(@pathvariable("categoryid") string categoryid, model model, httpservletrequest request) {

// 略

}

到此这篇关于springboot结合ehcache防止恶意刷新请求的实现的文章就介绍到这了,更多相关springboot 防止恶意刷新内容请搜索萬仟网以前的文章或继续浏览下面的相关文章希望大家以后多多支持萬仟网!

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

java ehcahce刷新_springboot结合ehcache防止恶意刷新请求的实现相关推荐

  1. java 防止恶意刷新_防止恶意刷新接口, 控制在5秒内不能被刷新10次以上

    import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CopyOnWriteArrayList; imp ...

  2. 防止恶意刷新页面的Java实现

    在很多对安全性要求较高的项目中,需要提供至少一种对整个项目的安全控制方案,常用的比如身份认证.访问控制.安全审计等等.由于设计不合理而导致的安全问题可能会给项目带来非常大的隐患,正是因为如此,安全问题 ...

  3. php投票防刷,php防止恶意刷新与刷票的方法

    php防止恶意刷新与刷票的方法 发布于 2014-11-30 12:33:26 | 230 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: Hypertext Pre ...

  4. Java 开源分布式缓存框架Ehcache

    Ehcache 是一个Java实现的开源分布式缓存框架,EhCache 可以有效地减轻数据库的负载,可以让数据保存在不同服务器的内存中,在需要数据的时候可以快速存取.同时EhCache 扩展非常简单, ...

  5. 内网通修改积分文件_转盘抽奖分享得积分,你是如何防止页面被恶意刷新的

    恶意刷新 恶意刷新就是不停的去刷新提交页面,导致出现大量无效数据,这类问题在实际应用中我们经常遇到,比如一个活动的分享得积分,刷票,刷红包等等,遇到这些问题,你是如何去防止的. 当你在做一个刷红包的活 ...

  6. php用session制作网站仿恶意刷新计数器

    php用session制作网站仿恶意刷新计数器 <?php session_start();/*启动session*/ if(!isset( $_SESSION["user" ...

  7. php防止恶意充值,php防止恶意刷新与刷票的方法

    本文实例讲述了php防止恶意刷新与刷票的方法.分享给大家供大家参考.具体实现方法如下: 一般来说,恶意刷新就是不停的去刷新提交页面,导致出现大量无效数据,下面我们来总结一下php 防止恶意刷新页面方法 ...

  8. nginx防恶意刷新

    今天公司恶意刷新网站导致系统速度缓慢,通过配置nginx来解决 nginx 配置 http配置 limit_conn_zone $binary_remote_addr zone=TotalConnLi ...

  9. spring security 3配置ACL时报java.lang.NoSuchMethodError: net.sf.ehcache.Cache.init

    严重: Exception sending context initialized event to listener instance of class org.springframework.we ...

最新文章

  1. Linux shell 学习笔记(8)— 使用结构化命令(if-then 语句、数值比较、字符串比较、文件比较、case 语句)
  2. HDU2121(最小树形图的模版算法题)
  3. oracle 树状结构一直出现不了_SEO站内优化:网站结构优化(十一)
  4. 联发科射频工程师题目_联发科技笔试题
  5. 模型提效的另一条路:数据增强
  6. Debug和Realease版本的区别
  7. 高品质餐饮相关场景模型素材,开始独特的场景来展示设计。
  8. 超级实用springBoot学习
  9. 【英语四六级-必背单词】高中英语单词 (H)-MP3试听与下载
  10. 技术面试结束问你还有什么要问的
  11. 关于python的ppt_用Python玩转PPT
  12. 手把手教你用MATLAB制作一款 [狗头翻牌子] 小游戏(点灯游戏)
  13. 在64位总线下,安装了8G内存条,却显示可用内存不到8G的原因
  14. Neo4j的Rest接口使用
  15. AUSU F6A系列笔记本装xp遇到的问题
  16. 工行连接深圳通 dll调不到
  17. mplfinance蜡烛图 均线成交量
  18. 西门子博途系列学习笔记SCL(二)——modbus Rtu
  19. 傅里叶分析(基础介绍)
  20. blender建模基础操作

热门文章

  1. PPR data model
  2. Table accessed during One order advanced search
  3. ABAP很厉害是怎么一种体验?
  4. SAP CRM呼叫中心里Case ID的生成逻辑
  5. Jerry的WebClient UI 42篇原创文章合集
  6. eslint规范_规范统一前端代码风格
  7. python 霍夫直线变换_OpenCV-Python 霍夫线变换 | 三十二
  8. java+character类使用_Java Character类应用实例
  9. java servlet是接口_JavaWeb:Servlet 接口
  10. java开发简介_Java Web开发介绍