chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

一,技術(shù)要點:

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攔截器中實現(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 {

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

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,項目中是動態(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是一個返回參數(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注冊到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

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

    關(guān)注

    0

    文章

    341

    瀏覽量

    15580
  • Boot
    +關(guān)注

    關(guān)注

    0

    文章

    154

    瀏覽量

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

    關(guān)注

    0

    文章

    18

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

    漆的涂覆工藝

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

    明治案例 | 150/分鐘!電阻【OCR識別】+【尺寸測量】步到位

    真實案例——看明治傳感如何用視覺傳感器,同時搞定電阻的尺寸測量和OCR識別,讓質(zhì)檢效率翻倍,成本直降!場景需求希望在同工位完成尺寸測量
    的頭像 發(fā)表于 06-10 07:33 ?430次閱讀
    明治案例 | 150<b class='flag-5'>個</b>/分鐘!電阻【OCR識別】+【尺寸測量】<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 ?421次閱讀
    手把手<b class='flag-5'>教你</b>用RadiMation進(jìn)行MIMO功率測量,輕松<b class='flag-5'>搞定</b>射頻測試!

    何用QT開發(fā)USB3.0上位機?

    何用QT開發(fā)USB3.0上位機
    發(fā)表于 05-21 06:54

    何用幾條命令搞定Ubuntu系統(tǒng)的網(wǎng)絡(luò)配置

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

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

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

    SSM框架的源碼解析與理解

    SSM框架(Spring + Spring MVC + MyBatis)是種在Java開發(fā)中常用的輕量級企業(yè)級應(yīng)用框架。它通過整合Spring、S
    的頭像 發(fā)表于 12-17 09:20 ?1257次閱讀

    SSM開發(fā)環(huán)境的搭建教程 SSM與Spring Boot的區(qū)別

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

    Spring 應(yīng)用合并之路(二):峰回路轉(zhuǎn),柳暗花明

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

    短消息(sms)解析 Air724UG低功耗模組軟件指南

    本指南教你何用 Air724 開發(fā)板,使用 sms 功能,并通過日志觀察實驗結(jié)果。
    的頭像 發(fā)表于 12-11 09:28 ?1122次閱讀
    短消息(sms)解析  Air724UG低功耗模組軟件指南

    Air780E模組LuatOS開發(fā)實戰(zhàn) —— 手把手教你搞定數(shù)據(jù)打包解包

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

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

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

    A0到A4的圖框只要圖紙模板就搞定了?

    種非常靈活的管理方式,只需要圖紙模板就可以搞定不同尺寸的場景。 ? ” 圖紙模板的組成 圖紙模板是由以下基本對象組成的: 直線 矩形 文本(包括普通字符串以及文本變量,或者系統(tǒng)自帶的特殊字符串) 多邊形 圖片(比如公司Log
    的頭像 發(fā)表于 11-13 18:13 ?2119次閱讀
    A0到A4的圖框只要<b class='flag-5'>一</b><b class='flag-5'>個</b>圖紙模板就<b class='flag-5'>搞定</b>了?

    Spring事務(wù)實現(xiàn)原理

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

    dubbo3.0 服務(wù)導(dǎo)入導(dǎo)出原理

    不管是服務(wù)導(dǎo)出還是服務(wù)引入,都發(fā)生在應(yīng)用啟動過程中,比如:在啟動類上加上 @EnableDubbo 時,該注解上有 @DubboComponentScan 注解
    的頭像 發(fā)表于 11-04 15:01 ?627次閱讀
    dubbo3.0 服務(wù)導(dǎo)入導(dǎo)出原理