<cite id="ffb66"></cite><cite id="ffb66"><track id="ffb66"></track></cite>
      <legend id="ffb66"><li id="ffb66"></li></legend>
      色婷婷久,激情色播,久久久无码专区,亚洲中文字幕av,国产成人A片,av无码免费,精品久久国产,99视频精品3
      網易首頁 > 網易號 > 正文 申請入駐

      幾行代碼,輕松搞定 Spring Boot 接口惡意刷新和暴力請求!

      0
      分享至

      Java精選面試題(微信小程序):5000+道面試題和選擇題,包含Java基礎、并發、JVM、線程、MQ系列、Redis、Spring系列、Elasticsearch、Docker、K8s、Flink、Spark、架構設計、大廠真題等,在線隨時刷題!

      在實際項目使用中,必須要考慮服務的安全性,當服務部署到互聯網以后,就要考慮服務被惡意請求和暴力攻擊的情況,下面的教程,通過interceptredis針對url+ip在一定時間內訪問的次數來將ip禁用,可以根據自己的需求進行相應的修改,來打打自己的目的;

      首先工程為springboot框架搭建,不再詳細敘述。

      直接上核心代碼。

      首先創建一個自定義的攔截器類,也是最核心的代碼:

      /**  * @package: com.technicalinterest.group.interceptor  * @className: IpUrlLimitInterceptor  * @description: ip+url重復請求現在攔截器  * @author: Shuyu.Wang,公眾號Java精選,有驚喜!  * @since: 0.1  **/ @Slf4j publicclass IpUrlLimitInterceptor implements HandlerInterceptor { private RedisUtil getRedisUtil() { return  SpringContextUtil.getBean(RedisUtil.class);  } privatestaticfinal String LOCK_IP_URL_KEY="lock_ip_"; privatestaticfinal String IP_URL_REQ_TIME="ip_url_times_"; privatestaticfinallong LIMIT_TIMES=5; privatestaticfinalint IP_LOCK_TIME=60; @Override public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {   log.info("request請求地址uri={},ip={}", httpServletRequest.getRequestURI(), IpAdrressUtil.getIpAdrress(httpServletRequest)); if (ipIsLock(IpAdrressUtil.getIpAdrress(httpServletRequest))){    log.info("ip訪問被禁止={}",IpAdrressUtil.getIpAdrress(httpServletRequest));    ApiResult result = new ApiResult(ResultEnum.LOCK_IP);    returnJson(httpServletResponse, JSON.toJSONString(result));    returnfalse;   } if(!addRequestTime(IpAdrressUtil.getIpAdrress(httpServletRequest),httpServletRequest.getRequestURI())){    ApiResult result = new ApiResult(ResultEnum.LOCK_IP);    returnJson(httpServletResponse, JSON.toJSONString(result));    returnfalse;   } returntrue;  } @Override public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {  } @Override public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {  } /**   * @Description: 判斷ip是否被禁用   * @author: shuyu.wang   * @date: 2019-10-12 13:08   * @param ip   * @return java.lang.Boolean   */ private Boolean ipIsLock(String ip){   RedisUtil redisUtil=getRedisUtil(); if(redisUtil.hasKey(LOCK_IP_URL_KEY+ip)){    returntrue;   } returnfalse;  } /**   * @Description: 記錄請求次數   * @author: shuyu.wang   * @date: 2019-10-12 17:18   * @param ip   * @param uri   * @return java.lang.Boolean   */ private Boolean addRequestTime(String ip,String uri){   String key=IP_URL_REQ_TIME+ip+uri;   RedisUtil redisUtil=getRedisUtil(); if (redisUtil.hasKey(key)){    long time=redisUtil.incr(key,(long)1);    if (time>=LIMIT_TIMES){     redisUtil.getLock(LOCK_IP_URL_KEY+ip,ip,IP_LOCK_TIME);     returnfalse;    }   }else {    redisUtil.getLock(key,(long)1,1);   } returntrue;  } private void returnJson(HttpServletResponse response, String json) throws Exception {   PrintWriter writer = null;   response.setCharacterEncoding("UTF-8");   response.setContentType("text/json; charset=utf-8"); try {    writer = response.getWriter();    writer.print(json);   } catch (IOException e) {    log.error("LoginInterceptor response error ---> {}", e.getMessage(), e);   } finally {    if (writer != null) {     writer.close();    }   }  } }

      代碼中的使用的是分布式鎖的形式,這樣可以最大程度保證線程安全和功能的實現效果。代碼中設置的是1S內同一個接口通過同一個ip訪問5次,就將該ip禁用1個小時,根據自己項目需求可以自己適當修改,實現自己想要的功能;

      另外,推薦下 Spring boot 的用戶權限管理系統開源項目:

      https://gitee.com/yoodb/jing-xuan

      redis分布式鎖的關鍵代碼:

      /**  * @package: com.shuyu.blog.util  * @className: RedisUtil  * @description:  * @author: Shuyu.Wang 公眾號:Java精選,有驚喜!  * @since: 0.1  **/ @Component @Slf4j publicclass RedisUtil { privatestaticfinal Long SUCCESS = 1L; @Autowired private RedisTemplate redisTemplate; // =============================common============================ /**   * 獲取鎖   * @param lockKey   * @param value   * @param expireTime:單位-秒   * @return   */ public boolean getLock(String lockKey, Object value, int expireTime) { try {    log.info("添加分布式鎖key={},expireTime={}",lockKey,expireTime);    String script = "if redis.call('setNx',KEYS[1],ARGV[1]) then if redis.call('get',KEYS[1])==ARGV[1] then return redis.call('expire',KEYS[1],ARGV[2]) else return 0 end end";    RedisScript redisScript =  new DefaultRedisScript<>(script, String.class);    Object result = redisTemplate.execute(redisScript, Collections.singletonList(lockKey), value, expireTime);    if (SUCCESS.equals(result)) {     returntrue;    }   } catch (Exception e) {    e.printStackTrace();   } returnfalse;  } /**   * 釋放鎖   * @param lockKey   * @param value   * @return   */ public boolean releaseLock(String lockKey, String value) {   String script = "if redis.call('get', KEYS[1]) == ARGV[1] then return redis.call('del', KEYS[1]) else return 0 end";   RedisScript redisScript =  new DefaultRedisScript<>(script, String.class);   Object result = redisTemplate.execute(redisScript, Collections.singletonList(lockKey), value); if (SUCCESS.equals(result)) {    returntrue;   } returnfalse;  } }

      最后將上面自定義的攔截器通過registry.addInterceptor添加一下,就生效了;

      @Configuration @Slf4j publicclass MyWebAppConfig extends WebMvcConfigurerAdapter {     @Bean IpUrlLimitInterceptor getIpUrlLimitInterceptor(){      returnnew IpUrlLimitInterceptor();  } @Override     public void addInterceptors(InterceptorRegistry registry) {   registry.addInterceptor(getIpUrlLimitInterceptor()).addPathPatterns("/**");         super.addInterceptors(registry);     } }

      自己可以寫一個for循環來測試方面的功能,這里就不詳細介紹了。

      作者:wang_shuyu

      https://blog.csdn.net/wang_shuyu/article/details/102531940

      公眾號“Java精選”所發表內容注明來源的,版權歸原出處所有(無法查證版權的或者未注明出處的均來自網絡,系轉載,轉載的目的在于傳遞更多信息,版權屬于原作者。如有侵權,請聯系,筆者會第一時間刪除處理!

      最近有很多人問,有沒有讀者交流群!加入方式很簡單,公眾號Java精選,回復“加群”,即可入群!

      文章有幫助的話,點在看,轉發吧!

      特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。

      Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

      相關推薦
      熱點推薦
      總有人納悶,王健林就算只剩100億,為啥王思聰花錢還是那么大方

      總有人納悶,王健林就算只剩100億,為啥王思聰花錢還是那么大方

      小光侃娛樂
      2025-12-10 22:10:04
      瓜帥:我不想以被解雇的方式離開,我想好好結束

      瓜帥:我不想以被解雇的方式離開,我想好好結束

      懂球帝
      2025-12-20 15:09:22
      何穗忙完工作一天也不想帶娃!回家換完衣跑去看展覽,當媽后多愁

      何穗忙完工作一天也不想帶娃!回家換完衣跑去看展覽,當媽后多愁

      趕山的姑娘
      2025-12-20 21:23:24
      湘潭一村民組開會決議將“外嫁女”所得法院執行款項從其親屬頭上扣除,村支書:對決議不知情,未簽字批準

      湘潭一村民組開會決議將“外嫁女”所得法院執行款項從其親屬頭上扣除,村支書:對決議不知情,未簽字批準

      紅星新聞
      2025-12-20 00:33:11
      北京阿姨20年守茅臺股票:90萬本金,分紅326萬,成本歸零!

      北京阿姨20年守茅臺股票:90萬本金,分紅326萬,成本歸零!

      趣文說娛
      2025-12-20 18:29:20
      少一人仍不輸,47歲蘭帕德率隊1-1,狂攬48分領跑+領先米堡6分

      少一人仍不輸,47歲蘭帕德率隊1-1,狂攬48分領跑+領先米堡6分

      側身凌空斬
      2025-12-20 22:31:10
      上海迪士尼突發一幕,演出被迫中斷!網友:她還在笑,心太大了

      上海迪士尼突發一幕,演出被迫中斷!網友:她還在笑,心太大了

      環球網資訊
      2025-12-20 09:29:14
      我外交部突然發出警告,如果外媒消息屬實,中日事態將會相當嚴重

      我外交部突然發出警告,如果外媒消息屬實,中日事態將會相當嚴重

      芊芊子吟
      2025-12-20 14:07:18
      人類文明現在只有0.73級,宇宙中的7級文明有多可怕?

      人類文明現在只有0.73級,宇宙中的7級文明有多可怕?

      觀察宇宙
      2025-12-20 20:55:31
      金正恩做出重大舉動,矛頭直指高市早苗

      金正恩做出重大舉動,矛頭直指高市早苗

      回京歷史夢
      2025-12-21 02:40:04
      阿房宮遺址考古取得突破性進展

      阿房宮遺址考古取得突破性進展

      環球網資訊
      2025-12-20 15:09:09
      金毛事件大反轉!為減刑出賣白三姐,20萬轉賬記錄撕開人性遮羞布

      金毛事件大反轉!為減刑出賣白三姐,20萬轉賬記錄撕開人性遮羞布

      魔都姐姐雜談
      2025-12-20 04:48:09
      咖啡再次被關注!醫生發現:高血壓患者經常喝咖啡,或有5改善

      咖啡再次被關注!醫生發現:高血壓患者經常喝咖啡,或有5改善

      牛鍋巴小釩
      2025-12-20 16:45:23
      中央明確規定:從明年起,將對普通高中進行擴招。

      中央明確規定:從明年起,將對普通高中進行擴招。

      百態人間
      2025-12-18 05:00:04
      于東來回應高薪招聘英才:哪怕年薪2000萬都無所謂,給的不是財富,是尊重

      于東來回應高薪招聘英才:哪怕年薪2000萬都無所謂,給的不是財富,是尊重

      都市快報橙柿互動
      2025-12-20 11:30:57
      努諾:丟球過早讓一切變得困難,幾個丟球我們都可以做得更好

      努諾:丟球過早讓一切變得困難,幾個丟球我們都可以做得更好

      懂球帝
      2025-12-21 02:00:07
      王楚欽傳來壞消息:背傷診斷結果曝光!林詩棟17天打3站,不休息

      王楚欽傳來壞消息:背傷診斷結果曝光!林詩棟17天打3站,不休息

      侃球熊弟
      2025-12-20 00:15:03
      池莉:半輩子過去了,自己盡是不體面和不高貴,遍體鱗傷

      池莉:半輩子過去了,自己盡是不體面和不高貴,遍體鱗傷

      尚曦讀史
      2025-12-18 09:46:21
      市監局通報“南極磷蝦油”事件:已成立聯合調查組進駐北京同仁堂(四川)健康藥業有限公司開展調查,已對該企業立案

      市監局通報“南極磷蝦油”事件:已成立聯合調查組進駐北京同仁堂(四川)健康藥業有限公司開展調查,已對該企業立案

      極目新聞
      2025-12-20 19:28:56
      底層無貴人,社交無意義

      底層無貴人,社交無意義

      詩詞中國
      2025-12-19 20:34:22
      2025-12-21 03:40:49
      Java精選
      Java精選
      一場永遠也演不完的戲
      1764文章數 3859關注度
      往期回顧 全部

      科技要聞

      許四清:具身智能的"ChatGPT時刻"還未到來

      頭條要聞

      臺北致4人身亡嫌犯被指是"大陸籍" 蔣萬安回應

      頭條要聞

      臺北致4人身亡嫌犯被指是"大陸籍" 蔣萬安回應

      體育要聞

      我開了20年大巴,現在是一名西甲主帥

      娛樂要聞

      2026央視跨年晚會陣容曝光,豪華陣仗

      財經要聞

      求解“地方財政困難”

      汽車要聞

      嵐圖推進L3量產測試 已完成11萬公里實際道路驗證

      態度原創

      教育
      房產
      健康
      數碼
      藝術

      教育要聞

      別逼孩子死磕高二數學了!我用3個“懶方法”,讓倒數娃沖進前20

      房產要聞

      廣州有態度,一座國際化社區給出的城市答案

      這些新療法,讓化療不再那么痛苦

      數碼要聞

      一屏多用:華為Mate X7 / XTs折疊屏手機“變身”智能手卡

      藝術要聞

      投資26億!廣州“獨角獸”的總部大樓,躍出地面!

      無障礙瀏覽 進入關懷版 主站蜘蛛池模板: 中国xxx农村性视频| 亚洲综合国产一区二区三区| 制服丝袜亚洲无码| 久久婷婷五月综合97色一本一本| 读书| 久久综合激情网| 91成人社区| 小鲜肉自慰网站| 玛多县| 亚欧在线视频| 国产偷国产偷亚洲高清app| 人妻无码久久| 久久99久久99精品免视看国产成人| 在线观看成人永久免费网站| 中文字幕人妻熟女人妻| 色欲狠狠躁天天躁无码中文字幕| www.jizzjizzjizz| 97资源超碰| 亚洲a∨无码无在线观看| 国产精品无码翘臀在线观看| 亚洲精品国产AV| 超碰人人爱| 国产丝袜视频一区二区三区| 96无码| 中文字幕有码在线观看| 国产av亚洲精品ai换脸电影| 国产av一区二区三区天堂综合网| 欧美性xxxx狂欢老少配| 玩弄丰满少妇一二三区| 亚洲av免费在线观看| 亚洲加勒比久久88色综合| 天堂无码AV| 成人国产三级精品秘| 亚洲国产一区二区三区| 三上悠亚日韩精品二区| 97人人模人人爽人人喊网| 一区二区三区97| 丁香激情网| 日韩欧美一区二区三区| 女人天堂AV| 国产精品无码久久久久AV|