Spring自定义注解防重提交方案(参数形式&Token令牌)

        防重提交通常在需要防止用户重复提交表单或执行某些敏感操作时使用,以确保系统的数据一致性和安全性,本文章集结了通用场景下防重提交(参数形式&Token令牌),采用Java的特性(注解和AOP),配合Redis进行实现,使用方便有效。

注解介绍及使用

什么是注解

        自JDK 1.5起,Java引入了对元数据(MetaData)的支持,即注解(Annotation)。注解实质上是代码中的特殊标记,用于取代繁琐的配置文件。常见的包括`@Override`、`@Deprecated`等。

什么是元注解

        注解的注解,比如当我们需要自定义注解时,会需要一些元注解(meta-annotation),如@Target和@Retention。

java内置4种元注解

@Target 表示该注解用于什么地方
    ElementType.CONSTRUCTOR 用在构造器
    ElementType.FIELD 用于描述域-属性上
    ElementType.METHOD 用在方法上
    ElementType.TYPE 用在类或接口上
    ElementType.PACKAGE 用于描述包


@Retention 表示在什么级别保存该注解信息
    RetentionPolicy.SOURCE  保留到源码上
    RetentionPolicy.CLASS  保留到字节码上
    RetentionPolicy.RUNTIME 保留到虚拟机运行时(最多,可通过反射获取)

@Documented 将此注解包含在 javadoc 中
@Inherited 是否允许子类继承父类中的注解

@interface
        用来声明一个注解,可以通过default来声明参数的默认值,自定义注解时,自动继承了java.lang.annotation.Annotation接口,通过反射可以获取自定义注解

具体代码

import java.lang.annotation.*;

/**
 * 自定义防重提交
 */
@Documented
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface RepeatSumbit {
    /**
     * 防重提交,支持两种,一种是方法参数,一个令牌
     */
    enum Type{PARAM,TOKEN}

    /**
     * 默认防重提交,是方法参数
     * @return
     */
    Type limitType() default Type.PARAM;

    /**
     * 加锁过期实际,默认是5秒
     * @return
     */
    long lockTime() default 5;

}

AOP的介绍和使用

切面作用

        利用AOP(面向切面编程),我们可以在不改变原有逻辑的情况下,增加额外的功能。AOP思想将系统的功能分为两个部分,从而分离各种关注点,降低了代码的耦合性,减少了代码侵入性。通过AOP,我们能够统一处理横切逻辑,这使得添加和删除横切逻辑变得更加方便。

AOP里面常见的概念

横切关注点

        对哪些方法进行拦截,拦截后怎么处理,这些就叫横切关注点,比如 权限认证、日志、事物。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敲键盘的小夜猫

你的鼓励就是我创作的最大动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值