首页 > 编程语言 >短视频整套源码,如何实现幂等性校验?

短视频整套源码,如何实现幂等性校验?

时间:2024-11-02 09:21:21浏览次数:3  
标签:yuku idempotentType 整套 校验 idempotentToken 源码 import com

我们在做短视频整套源码的时候通常会遇到前端提交按钮重复点击的场景,在某些新增操作上就需要做幂等性限制来保证数据的可靠性。下面来用java aop实现幂等性校验。

一:首先我们需要一个自定义注解

 
package com.yuku.yuku_erp.annotation;
  import java.lang.annotation.*;
  /**
  * @author 名一
  * @ClassName IdempotentAnnotation
  * @description: 用来标记需要校验幂等性的接口
  * @datetime 2024年 02月 03日 14:48
  * @version: 1.0
  */
  @Target({ElementType.METHOD})
  @Retention(RetentionPolicy.RUNTIME)
  @Documented
  public @interface IdempotentAnnotation {
  String idempotentType();
  }

 

 

二:创建一个幂等校验的切面类

 
package com.yuku.yuku_erp.aop;
  import com.yuku.yuku_erp.annotation.IdempotentAnnotation;
  import com.yuku.yuku_erp.constant.RedisKeyConstant;
  import com.yuku.yuku_erp.exception.MyException;
  import com.yuku.yuku_erp.utils.RedisShardedPoolUtil;
  import com.yuku.yuku_erp.utils.TokenUtil;
  import lombok.extern.slf4j.Slf4j;
  import org.aspectj.lang.JoinPoint;
  import org.aspectj.lang.annotation.Aspect;
  import org.aspectj.lang.annotation.Before;
  import org.aspectj.lang.annotation.Pointcut;
  import org.aspectj.lang.reflect.MethodSignature;
  import org.springframework.stereotype.Component;
  import java.lang.reflect.Method;
  /**
  * @author 名一
  * @ClassName CheckIdempotentAop
  * @description: 幂等性校验
  * @datetime 2024年 02月 03日 14:59
  * @version: 1.0
  */
  @Slf4j
  @Aspect
  @Component
  public class CheckIdempotentAop {
  @Pointcut("execution( com.yuku.yuku_erp.controller...*(..))")
  public void checkCut(){
  }
  @Before("checkCut()")
  public void checkIdempotent(JoinPoint joinPoint){
  MethodSignature signature = (MethodSignature) joinPoint.getSignature();
  Method method = signature.getMethod();
  if (method.isAnnotationPresent(IdempotentAnnotation.class)){
  IdempotentAnnotation annotation = method.getAnnotation(IdempotentAnnotation.class);
  String idempotentType = annotation.idempotentType();
  String idempotentToken = TokenUtil.getRequest().getHeader("idempotentToken");
  String idemToken = idempotentType + idempotentToken;
  log.info("checkIdempotent idempotentType:{}, idempotentToken:{}", idempotentType, idempotentToken);
  Boolean flag = RedisShardedPoolUtil.sismember(RedisKeyConstant.IDEMPOTENT_TOKEN_LIST, idemToken);
  if (!flag){
  log.error("checkIdempotent error idempotentType:{}, idempotentToken:{}, flag:{}", idempotentType, idempotentToken, flag);
  throw new MyException("该接口已提交过,请不要重复提交");
  }
  RedisShardedPoolUtil.delSetByValue(RedisKeyConstant.IDEMPOTENT_TOKEN_LIST, idemToken);
  log.info("checkIdempotent idempotentType:{}, idempotentToken:{}, flag:{}", idempotentType, idempotentToken, flag);
  }
  }
  }

 

 

三:在需要切面的接口上使用幂等校验注解

 
@IdempotentAnnotation(idempotentType = "checkIdempotentToken")
  @GetMapping("/checkIdempotentToken")
  @ApiOperation(value = "校验幂等性示例")
  public CommonResult<String> checkIdempotentToken(){
  return CommonResult.success();
  }

 

到此幂等校验就完成了,以上就是短视频整套源码,如何实现幂等性校验?, 更多内容欢迎关注之后的文章

 

标签:yuku,idempotentType,整套,校验,idempotentToken,源码,import,com
From: https://www.cnblogs.com/yunbaomengnan/p/18521620

相关文章

  • 【开题报告】基于Springboot+vue装修预算系统的设计与实现(程序+源码+论文) 计算机毕业
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着房地产市场的蓬勃发展,装修行业也迎来了前所未有的繁荣。然而,装修过程中的预算管理一直是业主、设计师和施工方共同面临的难题。传统的装修预算方......
  • 【开题报告】基于Springboot+vue制造业企业专件全生命周期管理系统(程序+源码+论文) 计
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着制造业的快速发展和市场竞争的日益激烈,企业对生产效率和成本控制的要求越来越高。专件作为制造业企业的重要资产,其全生命周期管理直接关系到企业......
  • php校园二手交易平台app-计算机毕业设计源码69469
    摘 要随着现在网络的快速发展,网络的应用在各行各业当中它很快融入到了许多学校的眼球之中,他们利用网络来做这个校园二手交易平台的网站,随之就产生了“用于校园二手交易平台的App”,这样就让用于校园二手交易平台发布更加方便简单。对于本校园二手交易平台的设计来说,它主要......
  • springboot在线吉他配套服务系统-计算机毕业设计源码53451
    目录摘要1绪论1.1选题背景与意义1.2国内外研究现状1.3论文结构与章节安排2系统分析2.1可行性分析2.2系统流程分析2.2.1数据流程2.2.2业务流程2.3系统功能分析2.3.1功能性分析2.3.2非功能性分析2.4系统用例分析2.5本章小结3系统总体......
  • django旅游攻略推荐系统-计算机毕业设计源码99889
    摘要:随着大数据技术的快速发展,旅游行业正逐渐意识到利用大数据分析来提供更精准和个性化的旅游攻略推荐的重要性。本研究旨在设计和开发一个基于大数据分析的旅游攻略推荐系统,以帮助旅行者在选择旅游目的地、规划行程和寻找相关信息时做出更明智的决策。首先,我们收集了大量的......
  • alertmanager源码:整体架构和流程分析
    alertmanager整体的架构,官方的这张图说的很清楚,本文从源码的角度,分析其各个模块,以及模块间的交互流程。alertmanager的代码使用v0.24.0版本。一.API接收alerts接口alerts的API为:POST/api/v2/alerts该API的handler如下:该handler先进行数据转换后,再进行数据校验,最后放入a......
  • 基于Python爬虫与文本挖掘的网络舆情监控系统【附源码】
    基于Python爬虫与文本挖掘的网络舆情监控系统效果如下:系统登录界面注册页面界面管理员主界面用户界面网络舆情管理界面看板详细页面系统简介界面用户主界面网络舆情界面研究背景随着网络空间舆论的日益活跃,其对社会事件的影响愈发显著。企业和组织需要......
  • ssm026校园美食交流系统+vue(论文+源码)_kaic
     毕业论文题目  校园美食交流系统院   系:                   专   业:                    学   号:                    姓   名:                    指导老师......
  • prometheus源码分析:discovery自动发现
    discovery支持文件、http、consul等自动发现targets,targets会被发送到scrape模块进行拉取。一.整体框架discovery组件通过Manager对象管理所有的逻辑,当有数据变化时,通过syncChannel将数据发送给scrape组件。discovery组件会为每个Job_name创建一个provider对象,它包含Discover对......
  • 基于java中的springboot框架实现旅游管理系统项目演示【内附项目源码+论文说明】
    基于java中的springboot框架实现旅游管理系统项目演示【内附项目源码+LW说明】摘要现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本旅游管理系统就是在这样的大环境下诞生,其可以帮助使用者在短时......