18video性欧美19sex,欧美高清videosddfsexhd,性少妇videosexfreexxx片中国,激情五月激情综合五月看花,亚洲人成网77777色在线播放

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

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

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

如何解決Spring Boot接口防刷

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

掃碼添加小助手

加入工程師交流群

一,技術要點: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進行判斷

//。..。.

key+=“”+“1”; //這里假設用戶是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(“請求成功”);

}

責任編輯:haq

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

    關注

    33

    文章

    9307

    瀏覽量

    155713
  • Sprint
    +關注

    關注

    0

    文章

    86

    瀏覽量

    15523

原文標題:一個注解搞定 Spring Boot 接口防刷

文章出處:【微信號:AndroidPush,微信公眾號:Android編程精選】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    有機硅三漆有多強?從賠120萬到軍工訂單,憑的是什么?

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

    Spring攔截器:你的請求休想逃過我的五指山!

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

    漆的涂覆工藝

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

    三相異步電機是有還是無

    。 一、電機分類的核心標準:有與無的本質(zhì)區(qū)別 電機的有或無屬性取決于其換向方式。有電機通過物理接觸的碳刷和換向器實現(xiàn)電流方向的周期
    的頭像 發(fā)表于 07-13 17:07 ?977次閱讀
    三相異步電機是有<b class='flag-5'>刷</b>還是無<b class='flag-5'>刷</b>

    瑞薩RA芯片的Boot模式簡介

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

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

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

    為什么BOOT_CFG1_1和BOOT_CFG1_6為L時不能寫入?

    和“MIMXRT1060-EVKB Board User Manual”使用以下設置進行編寫,但發(fā)生了錯誤。 BOOT_MODE0:H BOOT_MODE1:L BOOT_CFG1_0:H
    發(fā)表于 03-28 08:11

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

    創(chuàng)建一個校園點餐訂餐外賣跑腿系統(tǒng)是一個復雜的項目,涉及到前端、后端、數(shù)據(jù)庫設計等多個方面。在這里,我可以提供一個簡化的Java后端示例,使用Spring Boot框架來搭建一個基本的API服務。這個
    的頭像 發(fā)表于 12-24 14:55 ?838次閱讀
    校園點餐訂餐外賣跑腿Java源碼

    寶藏級微服務架構工具合集

    寶藏級熱門微服務架構工具包含Spring Boot、Eclipse Vert.X、Kubernetes、Tyk、RabbitMQ、Apache Kafka等。其中,Spring Boot
    的頭像 發(fā)表于 12-21 16:33 ?801次閱讀

    SSM框架的源碼解析與理解

    的核心是控制反轉(IoC)和面向切面編程(AOP)。 源碼解析: Spring的源碼主要分為以下幾個部分: Bean容器: 負責實例化、配置和組裝對象。核心接口是 B
    的頭像 發(fā)表于 12-17 09:20 ?1294次閱讀

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

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

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

    提醒下,決定拋開 Spring Boot 內(nèi)置的父子容器方案,完全自己實現(xiàn)父子容器。 如何加載 web 項目? 現(xiàn)在的難題只有一個:如何加載 web 項目?加載完成后,如何持續(xù)持有 web 項目?經(jīng)過思考后,可以創(chuàng)建一個 boot
    的頭像 發(fā)表于 12-12 11:22 ?1316次閱讀

    磁極是如何解決磁集成產(chǎn)品電磁干擾的?

    磁集成后,有哪些新的電磁干擾源?該如何解決這些新的干擾源?磁極又是如何解決這些問題的? 磁集成后,EMC比分立磁性元件更難通過,到底是什么原因導致的?磁性元件企業(yè)又有哪些辦法可以解決?今天我們采訪
    的頭像 發(fā)表于 12-06 11:27 ?940次閱讀
    磁極是如<b class='flag-5'>何解</b>決磁集成產(chǎn)品電磁干擾的?

    實用的倒灌電路,倒灌問題如何解

    首先,什么是串口倒灌電路。簡單來說,它就是防止電流從一個器件倒灌到另一個器件,保護系統(tǒng)穩(wěn)定性和安全性。 假如有兩個芯片之間通過串口通信,二者電源都被使能,都在正常工作,沒有異常。 但是,如果IC2
    的頭像 發(fā)表于 11-20 10:15 ?3758次閱讀
    實用的<b class='flag-5'>防</b>倒灌電路,倒灌問題如<b class='flag-5'>何解</b>決

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

    作者:京東零售 范錫軍 1、引言 springspring-tx模塊提供了對事務管理支持,使用spring事務可以讓我們從復雜的事務處理中得到解脫,無需要去處理獲得連接、關閉連接、事務提交和回滾等
    的頭像 發(fā)表于 11-08 10:10 ?1362次閱讀
    <b class='flag-5'>Spring</b>事務實現(xiàn)原理