日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

Android編程精選 ? 來源:CSDN技術(shù)社區(qū) ? 作者:CS打贏你 ? 2021-09-13 09:23 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一,技術(shù)要點(diǎn):

Spring Boot的基本知識(shí),Redis基本操作,首先是寫一個(gè)注解類:

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攔截器中實(shí)現(xiàn):

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 {

//判斷請(qǐng)求是否屬于方法的請(qǐng)求

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進(jìn)行判斷

//。。。。。

key+=“”+“1”; //這里假設(shè)用戶是1,項(xiàng)目中是動(dòng)態(tài)獲取的userId

}

//從redis中獲取用戶訪問的次數(shù)

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{

//超出訪問次數(shù)

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

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注冊(cè)到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(“請(qǐng)求成功”);

}

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • spring
    +關(guān)注

    關(guān)注

    0

    文章

    341

    瀏覽量

    16060
  • Boot
    +關(guān)注

    關(guān)注

    0

    文章

    154

    瀏覽量

    37924
  • 注解
    +關(guān)注

    關(guān)注

    0

    文章

    18

    瀏覽量

    2859
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    告別手忙腳亂!蜀瑞創(chuàng)新語音鍵順控,句話搞定開關(guān)柜

    語音鍵順控,不是簡單加個(gè)語音功能,而是可視化 + 語音 + 五 + 自動(dòng)順控的體化升級(jí) —— 讓開關(guān)柜 “聽得懂、做得準(zhǔn)、看得見”,把電力運(yùn)維從 “繁瑣人工” 推向 “智能語音” 時(shí)代。
    的頭像 發(fā)表于 04-24 09:16 ?300次閱讀
    告別手忙腳亂!蜀瑞創(chuàng)新語音<b class='flag-5'>一</b>鍵順控,<b class='flag-5'>一</b>句話<b class='flag-5'>搞定</b>開關(guān)柜

    13 萬轉(zhuǎn)無吸塵器 PCBA 方案參數(shù)虛標(biāo)?其利天下教你現(xiàn)場實(shí)測 3 個(gè)關(guān)鍵指標(biāo)

    深圳其利天下技術(shù)開發(fā)有限公司,以自研高端芯片系列 KY32DS024為核心,打造其利天下 13 萬轉(zhuǎn)無吸塵器?PCBA?方案,堅(jiān)持全參數(shù)實(shí)標(biāo)、拒絕虛假宣傳。針對(duì)行業(yè)虛標(biāo)亂象,本文教你現(xiàn)場實(shí)測 3 個(gè)核心指標(biāo),
    的頭像 發(fā)表于 04-11 14:00 ?140次閱讀
    13 萬轉(zhuǎn)無<b class='flag-5'>刷</b>吸塵器 PCBA 方案參數(shù)虛標(biāo)?其利天下<b class='flag-5'>教你</b>現(xiàn)場實(shí)測 3 <b class='flag-5'>個(gè)</b>關(guān)鍵指標(biāo)

    瑞芯微RKNPU開發(fā)全指南:從環(huán)境搭建到性能優(yōu)化,搞定邊緣AI部署

    的輕量化 NPU,都需要通過RKNN SDK實(shí)現(xiàn)模型部署。今天這篇文章,我們就從 SDK 核心組件、開發(fā)全流程、進(jìn)階優(yōu)化到避坑指南,手把手教你搞定 RKNPU 開發(fā)!
    的頭像 發(fā)表于 02-06 16:35 ?3924次閱讀
    瑞芯微RKNPU開發(fā)全指南:從環(huán)境搭建到性能優(yōu)化,<b class='flag-5'>一</b>文<b class='flag-5'>搞定</b>邊緣AI部署

    Linux進(jìn)程管理不用愁!這6個(gè)工具幫你搞定90%場景

    在 Linux 系統(tǒng)中,進(jìn)程是資源分配的基本單位,無論是服務(wù)器運(yùn)維、程序調(diào)試還是日常使用,掌握進(jìn)程管理工具都是必備技能。今天就帶大家梳理 6 個(gè)最常用的進(jìn)程管理工具,從查看進(jìn)程到控制進(jìn)程,篇文章全搞定!
    的頭像 發(fā)表于 02-04 16:23 ?3037次閱讀
    Linux進(jìn)程管理不用愁!這6<b class='flag-5'>個(gè)</b>工具幫你<b class='flag-5'>搞定</b>90%場景

    解析Rockchip平臺(tái)U-Boot核心文件:boot_rkimg.c到底做了什么?

    在嵌入式開發(fā)中,U-Boot 作為引導(dǎo)程序的 “中流砥柱”,負(fù)責(zé)初始化硬件、加載內(nèi)核并啟動(dòng)系統(tǒng)。對(duì)于 Rockchip 平臺(tái)的設(shè)備(如常見的開發(fā)板、智能終端),boot_rkimg.c 是 U-Boot 中專門處理啟動(dòng)流程的核心
    的頭像 發(fā)表于 02-03 15:29 ?989次閱讀
    解析Rockchip平臺(tái)U-<b class='flag-5'>Boot</b>核心文件:<b class='flag-5'>boot</b>_rkimg.c到底做了什么?

    漆和三膠的區(qū)別

    最合適的選擇?今天小編將為您清晰梳理它們兩者的核心區(qū)別與應(yīng)用場景。三漆和三膠的區(qū)別物理形態(tài)與成膜特性差異三漆通常是種粘度較低的液態(tài)涂料。它通過噴涂、
    的頭像 發(fā)表于 01-19 17:08 ?604次閱讀
    三<b class='flag-5'>防</b>漆和三<b class='flag-5'>防</b>膠的區(qū)別

    最新版ESP-IDF 全離線安裝,收藏這一個(gè)就夠了

    還在為ESP-IDF開發(fā)環(huán)境搭建發(fā)愁?不要慌!本期我們教你個(gè)新手也能100%成功的全離線安裝方法!編譯、燒錄、驗(yàn)證文帶你搞定!本教程所用
    的頭像 發(fā)表于 01-14 18:05 ?3044次閱讀
    最新版ESP-IDF 全離線安裝,收藏這<b class='flag-5'>一個(gè)</b>就夠了

    合科泰教你如何焊接簡單LED閃爍電路

    你是否曾好奇那些閃爍的LED燈背后的原理?今天教你用5分鐘焊接個(gè)簡單的LED閃爍電路,無需編程,只需把電烙鐵、幾個(gè)簡單元件和基礎(chǔ)的焊接技能,就能打造屬于自己的電子小玩具。 這不僅能
    的頭像 發(fā)表于 01-07 17:28 ?1358次閱讀
    合科泰<b class='flag-5'>教你</b>如何焊接簡單LED閃爍電路

    漆應(yīng)用失敗?八個(gè)常見問題與解決方案搞定 | 東莞 鉻銳特實(shí)業(yè)

    東莞三漆|鉻銳特實(shí)業(yè)官網(wǎng) | 三漆涂覆失敗怎么辦?本文總結(jié)8個(gè)最常見問題(如起泡、不均勻、發(fā)白、附著力差等)及實(shí)用解決方案,文幫您避開三
    的頭像 發(fā)表于 12-24 00:36 ?702次閱讀
    三<b class='flag-5'>防</b>漆應(yīng)用失???八<b class='flag-5'>個(gè)</b>常見問題與解決方案<b class='flag-5'>一</b>文<b class='flag-5'>搞定</b> | 東莞 鉻銳特實(shí)業(yè)

    款基于Java+Spring Boot+Vue的智慧隨訪管理系統(tǒng)源碼

    智慧隨訪管理系統(tǒng)源碼,款基于Java+Spring Boot+Vue的B/S架構(gòu)醫(yī)院隨訪管理系統(tǒng)源碼,采用前后端分離技術(shù)(Ant-Design+MySQL5),具有自主版權(quán)和落地案例。 隨訪管理
    的頭像 發(fā)表于 11-13 15:38 ?534次閱讀
    <b class='flag-5'>一</b>款基于Java+<b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b>+Vue的智慧隨訪管理系統(tǒng)源碼

    ETHERCAT從站轉(zhuǎn)PROFINET,個(gè)網(wǎng)關(guān)全搞定

    ETHERCAT從站轉(zhuǎn)PROFINET,個(gè)網(wǎng)關(guān)全搞定 在礦山深處,套嶄新的自動(dòng)化系統(tǒng)正悄然改變著設(shè)備保護(hù)的格局。面對(duì)井下復(fù)雜的工況和多品牌控制設(shè)備共存的現(xiàn)狀,我們?cè)O(shè)計(jì)的這套保護(hù)系統(tǒng)
    的頭像 發(fā)表于 10-22 10:03 ?427次閱讀
    ETHERCAT從站轉(zhuǎn)PROFINET,<b class='flag-5'>一</b><b class='flag-5'>個(gè)</b>網(wǎng)關(guān)全<b class='flag-5'>搞定</b>

    漆的涂覆工藝

    漆作為電子線路板的核心防護(hù)材料,通過形成透明保護(hù)膜實(shí)現(xiàn)防潮、鹽霧、防霉功能。本文將梳理涂、浸涂、噴涂、選擇性涂覆四大三漆涂覆主流工藝的技術(shù)特點(diǎn)、工藝參數(shù)及質(zhì)量控制要點(diǎn)。1.
    的頭像 發(fā)表于 07-24 15:55 ?1579次閱讀
    三<b class='flag-5'>防</b>漆的涂覆工藝

    明治案例 | 150個(gè)/分鐘!電阻【OCR識(shí)別】+【尺寸測量】步到位

    真實(shí)案例——看明治傳感如何用個(gè)視覺傳感器,同時(shí)搞定電阻的尺寸測量和OCR識(shí)別,讓質(zhì)檢效率翻倍,成本直降!場景需求希望在同工位完成尺寸測量
    的頭像 發(fā)表于 06-10 07:33 ?925次閱讀
    明治案例 | 150<b class='flag-5'>個(gè)</b>/分鐘!電阻【OCR識(shí)別】+【尺寸測量】<b class='flag-5'>一</b>步到位

    手把手教你用RadiMation進(jìn)行MIMO功率測量,輕松搞定射頻測試!

    MIMO設(shè)備功率測量太復(fù)雜?TS-RadiMation幫你搞定!本文詳細(xì)解析MIMO功率測量全流程,從配置到數(shù)據(jù)分析,助你快速掌握關(guān)鍵測試技巧,提升測試效率!
    的頭像 發(fā)表于 05-26 17:42 ?861次閱讀
    手把手<b class='flag-5'>教你</b>用RadiMation進(jìn)行MIMO功率測量,輕松<b class='flag-5'>搞定</b>射頻測試!

    何用QT開發(fā)個(gè)USB3.0上位機(jī)?

    何用QT開發(fā)個(gè)USB3.0上位機(jī)
    發(fā)表于 05-21 06:54
    丹阳市| 洪雅县| 祁东县| 柘城县| 玉环县| 寿阳县| 英超| 丽江市| 赞皇县| 唐海县| 罗源县| 孝感市| 弋阳县| 永安市| 壤塘县| 泰宁县| 子洲县| 迁安市| 宁国市| 搜索| 于田县| 杭锦后旗| 灌阳县| 常宁市| 遂川县| 榆林市| 南木林县| 囊谦县| 隆昌县| 丹江口市| 邻水| 凤翔县| 阜新| 五莲县| 屯留县| 新津县| 虞城县| 梁平县| 郸城县| 广平县| 大石桥市|