成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

今天用AI搞一個防止接口重復提交注解

人工智能
接口冪等性是指無論調用接口的次數是一次還是多次,對于同一資源的操作都只會產生一次結果。換句話說,多次重復調用相同的接口請求應該具有與單次請求相同的效果,不會導致不一致或副作用的發生。

哈嘍,大家好,我是了不起。

接口冪等性是指無論調用接口的次數是一次還是多次,對于同一資源的操作都只會產生一次結果。換句話說,多次重復調用相同的接口請求應該具有與單次請求相同的效果,不會導致不一致或副作用的發生。

今天我們使用AI幫我們去創建一個自定義注解,可以防止接口30秒內的重復請求,并采用Redis作為緩存。

提問

話不多說,直接提問:

圖片

等待數分鐘后。。。

1.創建自定義注解 其中包括接口保護時長,開啟防止重復提交保護等。

圖片

2.然后創建攔截器

圖片

這里我們貼出攔截器的核心代碼:

@Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        if (handler instanceof HandlerMethod) {
            HandlerMethod handlerMethod = (HandlerMethod) handler;
            RepeatSubmit annotation = handlerMethod.getMethodAnnotation(RepeatSubmit.class);
            if (annotation != null && annotation.enable()) {
                String key = buildKey(request);
                if (StringUtils.hasText(redisTemplate.opsForValue().get(key))) {
                    response.getWriter().write("repeat request, please try again later!");
                    return false;
                } else {
                    redisTemplate.opsForValue().set(key, Arrays.toString(request.getInputStream().readAllBytes()), annotation.timeout(), TimeUnit.SECONDS);
                }
            }
        }
        return true;
    }
 //創建redis 緩存key
    private String buildKey(HttpServletRequest request) throws IOException, NoSuchAlgorithmException {
        String key = useRequestMD5 ? hashRequest(request) : request.getRequestURI();
        return "repeat-submit:" + key;
    }

 //對請求做hash運算
    private String hashRequest(HttpServletRequest request) throws IOException, NoSuchAlgorithmException {
        byte[] hashBytes = MessageDigest.getInstance("MD5").digest(request.getInputStream().readAllBytes());
        StringBuilder sb = new StringBuilder();
        for (byte b : hashBytes) {
            sb.append(String.format("%02x", b));
        }
        return sb.toString();
    }

3.注冊攔截器

圖片

最后給出的解釋與使用方法。

圖片

上面就是最關鍵的代碼了。

接入Redis

下面我們接入Redis。最精簡的配置版本:

spring:
  data:
    redis:
      host: 127.0.0.1 
      port: 6379

接口使用注解

@RestController
public class RepeatTestController {

    @RepeatSubmit
    @GetMapping("/hello/mono1")
    public Mono<String> mono(){
        return Mono.just("Hello Mono -  Java North");
    }

    @RepeatSubmit
    @PostMapping ("/hello/mono1")
    public Mono<String> mono1(@RequestBody User user){
        return Mono.just("Hello Mono -  Java North-"+user.getName());
    }
}

本地起一個Redis,然后啟動本地的SpringBoot項目進行測試。

圖片

本地接口測試:30秒內重復請求會需要直接被攔截

圖片

Redis中緩存的KEY如下:

圖片

以上就是利用AI為我們生成的一個簡單的接口短時間內防止重復提交的注解代碼!

相關代碼在文章末尾,需要的話可以白嫖哈!

接口冪等性解決方案

下面問一下接口冪等性解決方案,

圖片

關于這個回答,大家覺得怎么樣?

相關代碼鏈接,歡迎來嫖:

https://github.com/javatechnorth/java-study-note/tree/master/isv-repeat-submit-spring-boot-starter

責任編輯:武曉燕 來源: Java技術指北
相關推薦

2022-11-11 07:34:43

2022-11-15 07:39:48

2022-11-17 07:43:13

2022-06-10 13:03:44

接口重試while

2024-06-06 08:46:37

2023-08-24 08:02:19

冪等性API請求

2021-04-28 14:31:35

Dubbo接口日志

2013-11-13 11:01:14

表單表單重復提交表單策略

2013-11-13 14:39:53

表單提交開發

2025-03-11 08:20:58

2024-06-21 09:19:45

代碼接口重復請求開發

2020-07-17 07:59:55

數據

2022-06-21 14:44:38

接口數據脫敏

2024-11-07 10:55:26

2024-11-08 15:56:36

2022-05-16 10:45:22

Redis接口限流緩存

2020-06-22 07:47:46

提交面試官訂單

2025-02-23 08:00:00

冪等性Java開發

2023-08-01 08:54:02

接口冪等網絡

2020-06-22 07:55:28

接口爬蟲
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 综合一区 | 成人在线不卡 | 免费观看的av毛片的网站 | 九九久久国产 | 精品国产一区一区二区三亚瑟 | 97精品国产97久久久久久免费 | 精品视频一区二区在线观看 | 激情国产 | 午夜精品一区二区三区在线观看 | 天天干夜夜拍 | 欧美日韩视频 | 黄色片免费看 | 久久这里有精品 | 99精品久久久久 | 国产精品伦一区二区三级视频 | 亚洲精品成人 | 91亚洲免费 | av av在线 | 成年人免费在线视频 | 在线免费观看色 | 麻豆久久久久久久久久 | 亚洲激精日韩激精欧美精品 | 在线视频h | 国产农村妇女毛片精品久久麻豆 | 成人日韩av | 国产在线网址 | 国家一级黄色片 | 精品亚洲一区二区 | 中文二区 | 一级片在线观看 | 国产精品视频一区二区三区 | www.日本三级| 国产精品日韩一区二区 | 日韩在线免费视频 | 亚洲一区二区免费电影 | av中文字幕网 | 国产成人网 | 精久久| 99re在线视频观看 | 久久久久久亚洲精品 | 日本成人中文字幕 |