一,技術要點:springboot的基本知識,redis基本操作,
首先是寫一個注解類:
importjava.lang.annotation.Retention; importjava.lang.annotation.Target; importstaticjava.lang.annotation.ElementType.METHOD; importstaticjava.lang.annotation.RetentionPolicy.RUNTIME; /** *@authoryhq *@date2018/9/1015:52 */ @Retention(RUNTIME) @Target(METHOD) public@interfaceAccessLimit{ intseconds(); intmaxCount(); booleanneedLogin()defaulttrue; }
攔截器中實現:
importcom.alibaba.fastjson.JSON; importcom.example.demo.action.AccessLimit; importcom.example.demo.redis.RedisService; importcom.example.demo.result.CodeMsg; importcom.example.demo.result.Result; importorg.springframework.beans.factory.annotation.Autowired; importorg.springframework.stereotype.Component; importorg.springframework.web.method.HandlerMethod; importorg.springframework.web.servlet.handler.HandlerInterceptorAdapter; importjavax.servlet.http.HttpServletRequest; importjavax.servlet.http.HttpServletResponse; importjava.io.OutputStream; /** *@authoryhq *@date2018/9/1016:05 */ @Component publicclassFangshuaInterceptorextendsHandlerInterceptorAdapter{ @Autowired privateRedisServiceredisService; @Override publicbooleanpreHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler)throwsException{ //判斷請求是否屬于方法的請求 if(handlerinstanceofHandlerMethod){ HandlerMethodhm=(HandlerMethod)handler; //獲取方法中的注解,看是否有該注解 AccessLimitaccessLimit=hm.getMethodAnnotation(AccessLimit.class); if(accessLimit==null){ returntrue; } intseconds=accessLimit.seconds(); intmaxCount=accessLimit.maxCount(); booleanlogin=accessLimit.needLogin(); Stringkey=request.getRequestURI(); //如果需要登錄 if(login){ //獲取登錄的session進行判斷 //..... key+=""+"1";//這里假設用戶是1,項目中是動態獲取的userId } //從redis中獲取用戶訪問的次數 AccessKeyak=AccessKey.withExpire(seconds); Integercount=redisService.get(ak,key,Integer.class); if(count==null){ //第一次訪問 redisService.set(ak,key,1); }elseif(count
注冊到springboot中
importcom.example.demo.ExceptionHander.FangshuaInterceptor; importorg.springframework.beans.factory.annotation.Autowired; importorg.springframework.context.annotation.Configuration; importorg.springframework.web.servlet.config.annotation.InterceptorRegistry; importorg.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; /** *@authoryhq *@date2018/9/1015:58 */ @Configuration publicclassWebConfigextendsWebMvcConfigurerAdapter{ @Autowired privateFangshuaInterceptorinterceptor; @Override publicvoidaddInterceptors(InterceptorRegistryregistry){ registry.addInterceptor(interceptor); } }
在Controller中加入注解
importcom.example.demo.result.Result; importorg.springframework.stereotype.Controller; importorg.springframework.web.bind.annotation.RequestMapping; importorg.springframework.web.bind.annotation.ResponseBody; /** *@authoryhq *@date2018/9/1015:49 */ @Controller publicclassFangshuaController{ @AccessLimit(seconds=5,maxCount=5,needLogin=true) @RequestMapping("/fangshua") @ResponseBody publicResultfangshua(){ returnResult.success("請求成功"); }
審核編輯:劉清
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
JAVA
+關注
關注
19文章
2967瀏覽量
104748 -
Framework
+關注
關注
0文章
24瀏覽量
8600
原文標題:一個注解搞定 SpringBoot 接口防刷,還有誰不會?
文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
Spring Boot的注解原理是什么
@SpringBootApplication來看,發現@SpringBootApplication是一個組合注解。 @Target(ElementType.TYPE) @Retention
教你如何用一個注解搞定Spring Boot接口防刷
一,技術要點: Spring Boot的基本知識,Redis基本操作,首先是寫一個注解類: import java.lang.annotation.Retention; import
Spring Boot常用注解與使用方式
企業開發項目SpringBoot已經是必備框架了,其中注解是開發中的小工具(誰處可見哦),用好了開發效率大大提升,當然用錯了也會引入缺陷。
求一種SpringBoot定時任務動態管理通用解決方案
SpringBoot的定時任務的加強工具,實現對SpringBoot原生的定時任務進行動態管理,完全兼容原生@Scheduled注解,無需對原本的定時任務進行修改
一個無需注解的SpringBoot API文檔生成神器
如果提交的表單是 application/x-www-form-urlencoded 類型的key/value格式,你可以在 SpringBoot 端通過在 @param 參數后添加字段解釋或者在相關的JavaBean對象里面添加解釋:
SpringBoot常用注解及使用方法1
基于 SpringBoot 平臺開發的項目數不勝數,與常規的基于`Spring`開發的項目最大的不同之處,SpringBoot 里面提供了大量的注解用于快速開發,而且非常簡單,基本可以做到開箱即用!
那
SpringBoot常用注解及使用方法2
基于 SpringBoot 平臺開發的項目數不勝數,與常規的基于Spring開發的項目最大的不同之處,SpringBoot 里面提供了大量的注解用于快速開發,而且非常簡單,基本可以做到開箱即用!
Springboot常用注解合集
前幾章,在系統啟動類里面,都加入了此啟動注解,此注解是個組合注解,包括了`@SpringBootConfiguration`、`@EnableAutoConfiguration`和`@
SpringBoot常用注解及原理
SpringBootConfiguration繼承自@Configuration,二者功能也一致,標注當前類是配置類, 并會將當前類內聲明的一個或多個以@Bean注解標記的方法的實例納
springboot核心注解
Spring Boot 是基于 Spring 框架的開源框架,它可以幫助開發者快速構建、部署和運行獨立的、生產級的 Spring 應用程序。Spring Boot 提供了一系列核心注解,這些注解可以
SpringBoot核心注解由幾個注解組成
等。本文將詳盡介紹這些核心注解。 @SpringBootApplication @SpringBootApplication 是一個復合注解,包含了 @Configuration、@
評論