赞
踩
描述:
@RequestLimit(time=3)防重复点击,限制单个会话的请求频率。但是
@RequestLimit注解中的参数不能传常量。
例如:不能通过获取application.yml文件中的配置信息,去动态配置限制时间,所以就对@RequestLimit注解封装。
# 后端防重复点击时间
requestLimitTime: 3 # 时间限制值 3秒
import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** 1. 定义注解名称为:RequestLimit */ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface RequestLimit { /** * 限制时间(秒),默认值为1秒 */ long time() default 1; }
import com.dsy.cloud.bdss.platform.entity.RequestLimitMap; import com.dsy.cloud.bdss.platform.exception.BusiException; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @Aspect @Component public class RequestLimitAspect { @Value("${requestLimitTime:}") private long limitTime; // 从application.yml配置文件中获取时间限制值,单位秒 // 对带有@RequestLimit注解的方法进行处理(备注:@annotation中注解名要和自定义的注解名对应)。 @Around("@annotation(RequestLimit)") public Object limitRequestExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable { // 自行添加相关的业务逻辑... // 执行切点方法 return joinPoint.proceed(); } }
@PutMapping("/test")
@RequestLimit
public void test() throws Exception {
// .....
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。