91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

如何解決Spring Boot接口防刷

Android編程精選 ? 來(lái)源:CSDN博客 ? 作者: CS打贏你 ? 2021-09-13 09:19 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一,技術(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中獲取用戶訪問(wèn)的次數(shù)

AccessKey ak = AccessKey.withExpire(seconds);

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

if(count == null){

//第一次訪問(wèn)

redisService.set(ak,key,1);

}else if(count 《 maxCount){

//加1

redisService.incr(ak,key);

}else{

//超出訪問(wèn)次數(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)求成功”);

}

責(zé)任編輯:haq

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

    關(guān)注

    33

    文章

    9518

    瀏覽量

    157010
  • Sprint
    +關(guān)注

    關(guān)注

    0

    文章

    86

    瀏覽量

    15568

原文標(biāo)題:一個(gè)注解搞定 Spring Boot 接口防刷

文章出處:【微信號(hào):AndroidPush,微信公眾號(hào):Android編程精選】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    漆和 PCB 板 “疏離、起皮、脫層”,90% 不是漆本身差,而是界面張力 / 表面能不匹配。

    漆和 PCB 板 “疏離、起皮、脫層”,90% 不是漆本身差,而是界面張力 / 表面能不匹配。該如何自測(cè)如何解決?
    的頭像 發(fā)表于 03-02 11:59 ?42次閱讀
    三<b class='flag-5'>防</b>漆和 PCB 板 “疏離、起皮、脫層”,90% 不是漆本身差,而是界面張力 / 表面能不匹配。

    無(wú)法使用 0xfffffffd 啟動(dòng)如何解決?

    ;amp; QSPI both result in this err: Main section boot fail,use backup section,error 0xfffffffdAll
    發(fā)表于 02-27 06:10

    深入解析U-Boot image.c:RK平臺(tái)鏡像處理核心邏輯

    在瑞芯微(RK)平臺(tái)的嵌入式開發(fā)中,U-Boot作為核心的啟動(dòng)加載程序,負(fù)責(zé)完成鏡像解析、校驗(yàn)、加載等關(guān)鍵流程。而image.c正是U-Boot中處理鏡像(uImage)的核心文件,尤其針對(duì)RK平臺(tái)
    的頭像 發(fā)表于 02-24 16:46 ?1432次閱讀
    深入解析U-<b class='flag-5'>Boot</b> image.c:RK平臺(tái)鏡像處理核心邏輯

    解析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è)備(如常見(jiàn)的開發(fā)板、智能終端),boot_rkimg.c 是 U-Boot 中專門處理啟動(dòng)流程的核心
    的頭像 發(fā)表于 02-03 15:29 ?739次閱讀
    解析Rockchip平臺(tái)U-<b class='flag-5'>Boot</b>核心文件:<b class='flag-5'>boot</b>_rkimg.c到底做了什么?

    漆和三膠的區(qū)別

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

    尋求 IOT-MKC3568-Main-v1.1 (基于 EVB1-V10) 開發(fā)板的移植幫助.

    (rk3568-evb1-v10.dtb) 和 ramdisk。 當(dāng)前遇到的核心技術(shù)瓶頸: 無(wú)法進(jìn)入機(jī)模式 : 問(wèn)題 :板載USB-OTG 接口硬件故障 ,無(wú)法通過(guò)常規(guī)方式進(jìn)入 Loader/Maskrom 模式。 嘗試 :按住
    發(fā)表于 01-11 22:51

    漆工藝全流程解析:從涂覆到固化的關(guān)鍵控制點(diǎn)

    漆的防護(hù)效果不僅取決于材料,更依賴工藝精度。行業(yè)主流涂覆方式及控制要點(diǎn)如下:1.涂工藝適用場(chǎng)景:小批量、復(fù)雜結(jié)構(gòu)線路板(如帶散熱片的模塊);操作要點(diǎn):使用天然纖維,避免金屬刷毛劃傷PCB
    的頭像 發(fā)表于 12-29 18:13 ?345次閱讀
    三<b class='flag-5'>防</b>漆工藝全流程解析:從涂覆到固化的關(guān)鍵控制點(diǎn)

    漆厚度行業(yè)標(biāo)準(zhǔn)

    電路板在投入生產(chǎn)前一般都會(huì)使用三漆噴涂或涂進(jìn)行防護(hù),而三漆的涂覆厚度影響著電路板的防護(hù)性能,同時(shí)也決定了電子設(shè)備的生產(chǎn)成本、安全可靠性等多方面因素。今天小編帶大家一起深入探究PCB三
    的頭像 發(fā)表于 12-18 15:15 ?667次閱讀
    三<b class='flag-5'>防</b>漆厚度行業(yè)標(biāo)準(zhǔn)

    深入理解?RK3506 U-Boot?重定位:從代碼到原理

    在嵌入式系統(tǒng)中,U-Boot?作為引導(dǎo)加載程序,其啟動(dòng)流程的核心環(huán)節(jié)之一就是 重定位(Relocation) 。對(duì)于?RK3506?這類基于?ARM Cortex-A?架構(gòu)的芯片,重定位的本質(zhì)是將
    的頭像 發(fā)表于 11-28 07:05 ?582次閱讀
    深入理解?RK3506 U-<b class='flag-5'>Boot</b>?重定位:從代碼到原理

    一款基于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 ?395次閱讀
    一款基于Java+<b class='flag-5'>Spring</b> <b class='flag-5'>Boot</b>+Vue的智慧隨訪管理系統(tǒng)源碼

    有機(jī)硅三漆有多強(qiáng)?從賠120萬(wàn)到軍工訂單,憑的是什么?

    有機(jī)硅三漆的核心價(jià)值,從來(lái)不是 “得厚”,而是 “分子改得對(duì)”。
    的頭像 發(fā)表于 09-27 14:57 ?969次閱讀
    有機(jī)硅三<b class='flag-5'>防</b>漆有多強(qiáng)?從賠120萬(wàn)到軍工訂單,憑的是什么?

    Spring攔截器:你的請(qǐng)求休想逃過(guò)我的五指山!

    Spring框架中,攔截器(Interceptor)是一種強(qiáng)大的機(jī)制,它允許開發(fā)者在請(qǐng)求處理的不同階段插入自定義邏輯。WebApplicationContext作為Spring Web應(yīng)用的上下文容器,為攔截器的配置和管理提供了基礎(chǔ)支持。
    的頭像 發(fā)表于 07-26 11:25 ?685次閱讀
    <b class='flag-5'>Spring</b>攔截器:你的請(qǐng)求休想逃過(guò)我的五指山!

    漆的涂覆工藝

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

    瑞薩RA芯片的Boot模式簡(jiǎn)介

    RA芯片在上電或通過(guò)芯片復(fù)位引腳進(jìn)行復(fù)位時(shí),會(huì)根據(jù)MD引腳的電平來(lái)進(jìn)入不同的芯片操作模式:“Single-chip Mode”或者“Boot Mode”。
    的頭像 發(fā)表于 04-09 10:52 ?2321次閱讀
    瑞薩RA芯片的<b class='flag-5'>Boot</b>模式簡(jiǎn)介

    瑞薩RZT2H CR52雙核BOOT流程和例程代碼分析

    以雙CR52 Core為例,說(shuō)明了T2H多核系統(tǒng)的BOOT流程。
    的頭像 發(fā)表于 04-02 09:28 ?2221次閱讀
    瑞薩RZT2H CR52雙核<b class='flag-5'>BOOT</b>流程和例程代碼分析