欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

spring boot+ redis 接口訪問頻率限制的實現(xiàn)

 更新時間:2021年01月28日 11:31:23   作者:毅大師  
這篇文章主要介紹了spring boot+ redis 接口訪問頻率限制的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

生產環(huán)境下可以解決的問題:

  1.短信驗證碼請求評率限制(防止抓包短信轟炸)

  2.熱點數(shù)據(jù)請求評率限制(防止數(shù)據(jù)庫爆炸)

@Component
public class BlackInterceper implements HandlerInterceptor {
 
 @Autowired
 private RedisTemplate<String, Object> redisTemplate;
 
 private Logger log = LoggerFactory.getLogger(this.getClass());
 
 @Override
 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
  throws Exception {
 response.setHeader("Content-type", "text/html;charset=UTF-8");
 String token = request.getHeader(Cons.TOKEN.WECHAT);
 String requestURI = request.getRequestURI();
 
 if (StringUtils.isBlank(token)) {
  response.setHeader("Content-type", "text/html;charset=UTF-8");
  response.getWriter().write(JsonUtils.marshalToString(ReturnResult.build(401, "未授權")));
  return false;
 }
 Integer userId = (Integer) redisTemplate.opsForValue().get(Cons.TOKEN.WECHAT + ":" + token);
 log.error("userId={},訪問了url={},請求ip={}",token,requestURI, IpUtil.getIpAddress(request));
 if(redisTemplate.hasKey("black")){
  if(redisTemplate.opsForSet().isMember("black", userId)){
  response.getWriter().write(JsonUtils.marshalToString(ReturnResult.build(500, "由于存在惡意攻擊你已被限制訪問")));
  return false;
  }
 }
 Integer count = (Integer)redisTemplate.opsForValue().get("limit:"+token);
 if(count==null){
  redisTemplate.opsForValue().set("limit:"+token, 1, 60, TimeUnit.SECONDS);
  return true;
 }else{
  if(count>100 && count<150){
  response.getWriter().write(JsonUtils.marshalToString(ReturnResult.build(500, "請求太頻繁,請稍后再試")));
  redisTemplate.opsForValue().increment("limit:"+token, 1);
  return false;
  }else if(count>=150){
  redisTemplate.opsForSet().add("black",userId,2,TimeUnit.DAYS);
  response.getWriter().write(JsonUtils.marshalToString(ReturnResult.build(500, "請求太頻繁,已經被限制訪問")));
 
  //redisTemplate.opsForSet().add("black",token);
  return false;
  }else{
  redisTemplate.opsForValue().increment("limit:"+token, 1);
  return true;
  }
 }
 }
 
 @Override
 public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
  ModelAndView modelAndView) throws Exception {
 // TODO Auto-generated method stub
 
 }
 
 @Override
 public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
  throws Exception {
 // TODO Auto-generated method stub
 
 }
}

到此這篇關于spring boot+ redis 接口訪問頻率限制的實現(xiàn)的文章就介紹到這了,更多相關springboot redis 接口訪問頻率限制內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:

相關文章

  • Java的LinkedHashSet源碼深入講解

    Java的LinkedHashSet源碼深入講解

    這篇文章主要介紹了Java的LinkedHashSet源碼深入講解,LinkedHashSet是HashSet的子類,而由于HashSet實現(xiàn)了Set接口,因此LinkedHashSet也間接實現(xiàn)了Set類,LinkedHashSet類屬于java.base模塊,java.util包下,需要的朋友可以參考下
    2023-09-09
  • Spring Boot 直接用jar運行項目的方法

    Spring Boot 直接用jar運行項目的方法

    這篇文章主要介紹了Spring Boot 直接用jar運行項目的方法,非常不錯,具有參考借鑒價值,需要的朋友參考下
    2018-02-02
  • 基于JAVA中的四種JSON解析方式詳解

    基于JAVA中的四種JSON解析方式詳解

    這篇文章主要介紹了基于JAVA中的四種JSON解析方式詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • Java Stream流零基礎教程

    Java Stream流零基礎教程

    Java8的另一大亮點Stream,它與java.io包里的InputStream和OutputStream是完全不同的概念,下面這篇文章主要給大家介紹了關于Java8中Stream詳細使用方法的相關資料,需要的朋友可以參考下
    2022-11-11
  • 使用Java實現(xiàn)2048小游戲代碼實例

    使用Java實現(xiàn)2048小游戲代碼實例

    這篇文章主要介紹了使用Java實現(xiàn)2048小游戲代碼實例,2048 游戲是一款益智類游戲,玩家需要通過合并相同數(shù)字的方塊,不斷合成更大的數(shù)字,最終達到2048,游戲規(guī)則簡單,但挑戰(zhàn)性很高,需要玩家靈活運用策略和計算能力,本文將使用Java代碼實現(xiàn),需要的朋友可以參考下
    2023-10-10
  • Java字符串的壓縮與解壓縮的兩種方法

    Java字符串的壓縮與解壓縮的兩種方法

    這篇文章主要介紹了Java字符串的壓縮與解壓縮的兩種方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • java統(tǒng)計字符串中重復字符出現(xiàn)次數(shù)的方法

    java統(tǒng)計字符串中重復字符出現(xiàn)次數(shù)的方法

    這篇文章主要介紹了java統(tǒng)計字符串中重復字符出現(xiàn)次數(shù)的方法,涉及java針對字符串的遍歷與判斷相關操作技巧,需要的朋友可以參考下
    2016-08-08
  • maven項目test執(zhí)行main找不到資源文件的問題及解決

    maven項目test執(zhí)行main找不到資源文件的問題及解決

    這篇文章主要介紹了maven項目test執(zhí)行main找不到資源文件的問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • SpringBoot2 整合FreeMarker實現(xiàn)頁面靜態(tài)化示例詳解

    SpringBoot2 整合FreeMarker實現(xiàn)頁面靜態(tài)化示例詳解

    這篇文章主要介紹了SpringBoot2 整合FreeMarker實現(xiàn)頁面靜態(tài)化示例詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • SpringBoot深入分析講解監(jiān)聽器模式上

    SpringBoot深入分析講解監(jiān)聽器模式上

    監(jiān)聽器模式,大家應該并不陌生,主要的組成要素包括了事件、監(jiān)聽器以及廣播器;當事件發(fā)生時,廣播器負責將事件傳遞給所有已知的監(jiān)聽器,而監(jiān)聽器會對自己感興趣的事件進行處理
    2022-07-07

最新評論