女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

教你如何用一個注解搞定Spring Boot接口防刷

Android編程精選 ? 來源:CSDN技術社區 ? 作者:CS打贏你 ? 2021-09-13 09:23 ? 次閱讀

一,技術要點:

Spring Boot的基本知識,Redis基本操作,首先是寫一個注解類:

import java.lang.annotation.Retention;

import java.lang.annotation.Target;

import static java.lang.annotation.ElementType.METHOD;

import static java.lang.annotation.RetentionPolicy.RUNTIME;

@Retention(RUNTIME)

@Target(METHOD)

public @interface AccessLimit {

int seconds();

int maxCount();

boolean needLogin()default true;

}

接著就是在Interceptor攔截器中實現:

import com.alibaba.fastjson.JSON;

import com.example.demo.action.AccessLimit;

import com.example.demo.redis.RedisService;

import com.example.demo.result.CodeMsg;

import com.example.demo.result.Result;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Component;

import org.springframework.web.method.HandlerMethod;

import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import java.io.OutputStream;

@Componentpublic class FangshuaInterceptor extends HandlerInterceptorAdapter {

@Autowired

private RedisService redisService;

@Override

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

//判斷請求是否屬于方法的請求

if(handler instanceof HandlerMethod){

HandlerMethod hm = (HandlerMethod) handler;

//獲取方法中的注解,看是否有該注解

AccessLimit accessLimit = hm.getMethodAnnotation(AccessLimit.class);

if(accessLimit == null){

return true;

}

int seconds = accessLimit.seconds();

int maxCount = accessLimit.maxCount();

boolean login = accessLimit.needLogin();

String key = request.getRequestURI();

//如果需要登錄

if(login){

//獲取登錄的session進行判斷

//。。。。。

key+=“”+“1”; //這里假設用戶是1,項目中是動態獲取的userId

}

//從redis中獲取用戶訪問的次數

AccessKey ak = AccessKey.withExpire(seconds);

Integer count = redisService.get(ak,key,Integer.class);

if(count == null){

//第一次訪問

redisService.set(ak,key,1);

}else if(count 《 maxCount){

//加1

redisService.incr(ak,key);

}else{

//超出訪問次數

render(response,CodeMsg.ACCESS_LIMIT_REACHED); //這里的CodeMsg是一個返回參數

return false;

}

}

return true;

}

private void render(HttpServletResponse response, CodeMsg cm)throws Exception {

response.setContentType(“application/json;charset=UTF-8”);

OutputStream out = response.getOutputStream();

String str = JSON.toJSONString(Result.error(cm));

out.write(str.getBytes(“UTF-8”));

out.flush();

out.close();

}

}

再把Interceptor注冊到springboot中

import com.example.demo.ExceptionHander.FangshuaInterceptor;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.context.annotation.Configuration;

import org.springframework.web.servlet.config.annotation.InterceptorRegistry;

import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@Configurationpublic class WebConfig extends WebMvcConfigurerAdapter {

@Autowired

private FangshuaInterceptor interceptor;

@Override

public void addInterceptors(InterceptorRegistry registry) {

registry.addInterceptor(interceptor);

}

}

接著在Controller中加入注解

import com.example.demo.result.Result;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.ResponseBody;

@Controllerpublic class FangshuaController {

@AccessLimit(seconds=5, maxCount=5, needLogin=true)

@RequestMapping(“/fangshua”)

@ResponseBody

public Result《String》 fangshua(){

return Result.success(“請求成功”);

}

編輯:jq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • spring
    +關注

    關注

    0

    文章

    340

    瀏覽量

    14878
  • Boot
    +關注

    關注

    0

    文章

    153

    瀏覽量

    36544
  • 注解
    +關注

    關注

    0

    文章

    18

    瀏覽量

    2742
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    何用幾條命令搞定Ubuntu系統的網絡配置

    在某些場景下,設備沒有顯示器或屏可以用,這時候通過命令行來設置網絡就變得特別重要了。本文將介紹如何用幾條命令搞定Ubuntu系統的網絡配置。
    的頭像 發表于 03-14 10:53 ?1754次閱讀
    如<b class='flag-5'>何用</b>幾條命令<b class='flag-5'>搞定</b>Ubuntu系統的網絡配置

    校園點餐訂餐外賣跑腿Java源碼

    創建校園點餐訂餐外賣跑腿系統是復雜的項目,涉及到前端、后端、數據庫設計等多個方面。在這里,我可以提供
    的頭像 發表于 12-24 14:55 ?516次閱讀
    校園點餐訂餐外賣跑腿Java源碼

    SSM開發環境的搭建教程 SSM與Spring Boot的區別

    SSM開發環境的搭建教程 SSM(Spring+SpringMVC+MyBatis)開發環境的搭建涉及多個步驟,以下是詳細的教程: 創建Maven項目 : 使用Maven工具創建新的Maven
    的頭像 發表于 12-16 18:13 ?1238次閱讀

    Spring 應用合并之路(二):峰回路轉,柳暗花明

    提醒下,決定拋開 Spring Boot 內置的父子容器方案,完全自己實現父子容器。 如何加載 web 項目? 現在的難題只有:如何加載 web 項目?加載完成后,如何持續持有 w
    的頭像 發表于 12-12 11:22 ?1079次閱讀

    Air780E模組LuatOS開發實戰 —— 手把手教你搞定數據打包解包

    本文要說的是低功耗4G模組Air780E的LuatOS開發實戰,我將手把手教你搞定數據打包解包。
    的頭像 發表于 12-03 11:17 ?541次閱讀
    Air780E模組LuatOS開發實戰 —— 手把手<b class='flag-5'>教你</b><b class='flag-5'>搞定</b>數據打包解包

    怎么集齊7云平臺?本文教你!

    每家云平臺都有自己的協議,工程師要移植不同的SDK代碼或基于各家的手冊文檔對接不同的協議,看著都頭大,該如何集齊7云平臺?本文教你!本文將以Air780E+LuatOS作為示例,教你使用IoT_CLOUD連接Tlink云平臺。
    的頭像 發表于 12-02 14:41 ?981次閱讀
    怎么集齊7<b class='flag-5'>個</b>云平臺?本文<b class='flag-5'>教你</b>!

    Spring事務實現原理

    這些操作。 spring事務有編程式事務和聲明式事務兩種實現方式。編程式事務是通過編寫代碼來管理事務的提交、回滾、以及事務的邊界。這意味著開發者需要在代碼中顯式地調用事務的開始、提交和回滾。聲明式事務是通過配置來管理事務,您可以使用注解或XML配置來
    的頭像 發表于 11-08 10:10 ?1102次閱讀
    <b class='flag-5'>Spring</b>事務實現原理

    dubbo3.0 服務導入導出原理

    不管是服務導出還是服務引入,都發生在應用啟動過程中,比如:在啟動類上加上 @EnableDubbo 時,該注解上有 @DubboComponentScan 注解
    的頭像 發表于 11-04 15:01 ?396次閱讀
    dubbo3.0 服務導入導出原理

    開關電源輻射老是超?教你好方法搞定

    開關電源輻射老是超?教你好方法搞定它【樣機介紹】我本次調試的樣機主控IC為思睿達主推的成都啟臣微的CR52168BSG,此IC內封了
    的頭像 發表于 10-16 08:02 ?1492次閱讀
    開關電源輻射老是超?<b class='flag-5'>教你</b><b class='flag-5'>一</b><b class='flag-5'>個</b>好方法<b class='flag-5'>搞定</b>它

    探索抖光電云臺無馬達驅動方案的技術奧秘

    在當今科技飛速發展的時代,抖光電云臺無馬達驅動方案成為了眾多領域關注的焦點。這技術不僅在攝影、攝像領域大放異彩,還在工業檢測、安監控等領域發揮著重要作用。接下來,讓我們
    的頭像 發表于 10-08 17:44 ?578次閱讀
    探索<b class='flag-5'>防</b>抖光電云臺無<b class='flag-5'>刷</b>馬達驅動方案的技術奧秘

    Spring Cloud Gateway網關框架

    SpringCloud Gateway功能特征如下: (1) 基于Spring Framework 5, Project Reactor 和 Spring Boot 2.0 進行構建; (2) 動態路由:能夠匹配任何請求屬性;
    的頭像 發表于 08-22 09:58 ?679次閱讀
    <b class='flag-5'>Spring</b> Cloud Gateway網關框架

    單片機boot0和boot1怎么設置

    單片機Boot0和Boot1簡介 Boot0和Boot1是單片機啟動模式選擇引腳,用于選擇單片機的啟動模式。 Boot0和
    的頭像 發表于 08-22 09:50 ?5184次閱讀

    ?無分鐘教你怎么選!

    電機是指通過電磁感應定律實現電能轉換或傳遞的種電磁裝置,在工業生產中有著十分重要的地位。有電機與無刷電機,都屬于常用電機,其區別就在于結構內是否有碳刷,除此之外,兩者還有很大的不同。調速方式有
    的頭像 發表于 08-13 17:21 ?653次閱讀
    有<b class='flag-5'>刷</b>?無<b class='flag-5'>刷</b>?<b class='flag-5'>一</b>分鐘<b class='flag-5'>教你</b>怎么選!

    二級BOOT啟動失敗的原因?

    套代碼,使用不同的編譯與入方式 1、make命令,編譯結果 eagle.flash.bin與eagle.irom0text.bin,入方式: 2、make BOOT=new
    發表于 07-18 06:04

    玩轉Spring狀態機

    說起Spring狀態機,大家很容易聯想到這個狀態機和設計模式中狀態模式的區別是啥呢?沒錯,Spring狀態機就是狀態模式的種實現,在介紹Spring狀態機之前,讓我們來看看設計模式中
    的頭像 發表于 06-25 14:21 ?1265次閱讀
    玩轉<b class='flag-5'>Spring</b>狀態機