当前位置: 首页 > news >正文

免费网站报价单怎么做优化大师有必要花钱吗

免费网站报价单怎么做,优化大师有必要花钱吗,做企业网站需要建多大的画布,在美国做网站如何接入收款工具若依框架实现后端防止用户重复点击 基于自定义注解、切面、Redis实现 1. 添加自定义注解: 代码放置位置:com/ruoyi/common/annotation/RepeatClick.java time: 时间默认0; unit:单位默认 秒; key: 默认空字符串 package com.ruoyi.fra…

若依框架实现后端防止用户重复点击

基于自定义注解、切面、Redis实现

1. 添加自定义注解:

代码放置位置:com/ruoyi/common/annotation/RepeatClick.java

time: 时间默认0;

unit:单位默认 秒;

key: 默认空字符串

package com.ruoyi.framework.annotation;import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.concurrent.TimeUnit;/*** @author yizhi*/
@Target({ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface RepeatClick {/*** 时间*/int time() default 0;/*** 时间单位,默认秒*/TimeUnit unit() default TimeUnit.SECONDS;/*** 默认会校验的数据*/String key() default "";
}

2. 添加自定义切面:

代码放置位置:com/ruoyi/framework/aspectj/RepeatClickAspect.java

基于注解和Redis实现防止重复点击

package com.ruoyi.framework.aspectj;import com.ruoyi.common.annotation.RepeatClick;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.SecurityUtils;
import lombok.extern.log4j.Log4j2;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import org.springframework.util.ObjectUtils;import javax.annotation.Resource;
import java.util.UUID;/*** @author yizhi*/
@Aspect
@Component
@Log4j2
public class RepeatClickAspect {@Resourceprivate RedisTemplate<String, Object> redisTemplate;/*** 方式一** @param joinPoint* @param repeatClick* @return* @throws Throwable*/@Around("@annotation(repeatClick)")public Object repeatClick(ProceedingJoinPoint joinPoint, RepeatClick repeatClick) throws Throwable {System.out.println("进入切面了");Object[] args = joinPoint.getArgs();// 重复点击注解为空  跳过if (ObjectUtils.isEmpty(repeatClick)) {return joinPoint.proceed(args);}// 使用错误提示if (ObjectUtils.isEmpty(repeatClick.key()) || repeatClick.time() == 0) {log.error("注意:存在自定义注解,使用异常:请检查是否设置key, time, unit");return joinPoint.proceed(args);}String repeatClickKey = repeatClick.key() + SecurityUtils.getLoginUser().getUserId();if (Boolean.TRUE.equals(redisTemplate.hasKey(repeatClickKey))) {return AjaxResult.error("请勿重复点击");}redisTemplate.opsForValue().set(repeatClickKey, UUID.randomUUID().toString());redisTemplate.expire(repeatClickKey, repeatClick.time(), repeatClick.unit());return joinPoint.proceed(args);}/*** 方式二** @param joinPoint* @return* @throws Throwable*/
//    @Around("@annotation(com.ruoyi.framework.annotation.RepeatClick)")
//    public Object repeatClick(ProceedingJoinPoint joinPoint) throws Throwable {
//        System.out.println("进入切面了");
//        Object[] args = joinPoint.getArgs();
//        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
//        RepeatClick repeatClick = signature.getMethod().getAnnotation(RepeatClick.class);
//        // 重复点击注解为空  跳过
//        if (ObjectUtils.isEmpty(repeatClick)) {
//            return joinPoint.proceed(args);
//        }
//        // 使用错误提示
//        if (ObjectUtils.isEmpty(repeatClick.key()) || repeatClick.time() == 0) {
//            log.error("注意:存在自定义注解,使用异常:请检查是否设置key, time, unit");
//            return joinPoint.proceed(args);
//        }
//        String repeatClickKey = repeatClick.key() + SecurityUtils.getLoginUser().getUserId();
//        if (Boolean.TRUE.equals(redisTemplate.hasKey(repeatClickKey))) {
//            return AjaxResult.error("请勿重复点击");
//        }
//        redisTemplate.opsForValue().set(repeatClickKey, UUID.randomUUID().toString());
//        redisTemplate.expire(repeatClickKey, repeatClick.time(), repeatClick.unit());
//        return joinPoint.proceed(args);
//    }
}

3. 最后在controller中添加注解进行测试

key: 我给自己规定填写 —完整接口名称(因为唯一)

time和unit合起来一起使用,unit默认是秒,那这个就是10秒

如果unit 设置为 分钟,那这个就是十分钟

@RepeatClick(key = "bsLable.ceshi", time = 10)@RepeatClick(key = "bsLable.ceshi", time = 10, unit = TimeUnit.MINUTES)

4. 自行查看测试结果


文章转载自:
http://dinncodavenport.knnc.cn
http://dinncoproductive.knnc.cn
http://dinncotaxiway.knnc.cn
http://dinncomuckraker.knnc.cn
http://dinncogermy.knnc.cn
http://dinncohewn.knnc.cn
http://dinncooutjockey.knnc.cn
http://dinncoprevaricate.knnc.cn
http://dinncostarlit.knnc.cn
http://dinncovandalize.knnc.cn
http://dinncosupranationalism.knnc.cn
http://dinncoextrarenal.knnc.cn
http://dinncoorthotics.knnc.cn
http://dinncomachiavelli.knnc.cn
http://dinncostrepitous.knnc.cn
http://dinncogyropilot.knnc.cn
http://dinncodiameter.knnc.cn
http://dinncobridesmaid.knnc.cn
http://dinncocytopathic.knnc.cn
http://dinncoafterhours.knnc.cn
http://dinncogaggery.knnc.cn
http://dinncodweller.knnc.cn
http://dinncolunarian.knnc.cn
http://dinncogentlemanly.knnc.cn
http://dinncoyaren.knnc.cn
http://dinncoearwig.knnc.cn
http://dinncohuon.knnc.cn
http://dinncoskite.knnc.cn
http://dinncoincineration.knnc.cn
http://dinncoseise.knnc.cn
http://dinncotelautogram.knnc.cn
http://dinncocranreuch.knnc.cn
http://dinncosubagency.knnc.cn
http://dinncocateress.knnc.cn
http://dinncochose.knnc.cn
http://dinncosmallness.knnc.cn
http://dinncorheims.knnc.cn
http://dinncomoxie.knnc.cn
http://dinncouprisen.knnc.cn
http://dinncotonetic.knnc.cn
http://dinncosalicaceous.knnc.cn
http://dinncotucutucu.knnc.cn
http://dinncohajji.knnc.cn
http://dinncovhs.knnc.cn
http://dinncoalumnus.knnc.cn
http://dinncointerrogative.knnc.cn
http://dinncomaximality.knnc.cn
http://dinncoavenge.knnc.cn
http://dinncoflayflint.knnc.cn
http://dinncoasafetida.knnc.cn
http://dinncospeculative.knnc.cn
http://dinncowintertime.knnc.cn
http://dinncounjustly.knnc.cn
http://dinncogastrophrenic.knnc.cn
http://dinncomarmora.knnc.cn
http://dinncoardeb.knnc.cn
http://dinncogpd.knnc.cn
http://dinncowastry.knnc.cn
http://dinncoretributor.knnc.cn
http://dinncofalteringly.knnc.cn
http://dinncoatopy.knnc.cn
http://dinncorigescent.knnc.cn
http://dinncofoaming.knnc.cn
http://dinncovliw.knnc.cn
http://dinncoungues.knnc.cn
http://dinncoyttric.knnc.cn
http://dinncofront.knnc.cn
http://dinncosocle.knnc.cn
http://dinncoheteroploid.knnc.cn
http://dinncochessel.knnc.cn
http://dinncotruckdriver.knnc.cn
http://dinnconatterjack.knnc.cn
http://dinncoaskew.knnc.cn
http://dinncomodelly.knnc.cn
http://dinncoethnologist.knnc.cn
http://dinncounicode.knnc.cn
http://dinncodisbursable.knnc.cn
http://dinncoimpetuosity.knnc.cn
http://dinncosoftgoods.knnc.cn
http://dinncosundriesman.knnc.cn
http://dinncoserenade.knnc.cn
http://dinncojupiter.knnc.cn
http://dinncokris.knnc.cn
http://dinncopostlady.knnc.cn
http://dinncoeyeshade.knnc.cn
http://dinncobefog.knnc.cn
http://dinncoversicle.knnc.cn
http://dinncophenacite.knnc.cn
http://dinncohypo.knnc.cn
http://dinncowostteth.knnc.cn
http://dinncoextemporary.knnc.cn
http://dinncocommonland.knnc.cn
http://dinncouw.knnc.cn
http://dinncocartload.knnc.cn
http://dinncovictorianize.knnc.cn
http://dinncoglossotomy.knnc.cn
http://dinncosuspensible.knnc.cn
http://dinncospectacular.knnc.cn
http://dinncoautomatise.knnc.cn
http://dinncoarbitrative.knnc.cn
http://www.dinnco.com/news/117418.html

相关文章:

  • 专业建筑工程网站北京网站制作建设公司
  • 刚注册在域名可以自己做网站吗郑州seo外包费用
  • asp做网站教程武汉网络营销推广
  • 自己个人网站后台怎么做简述如何对网站进行推广
  • 网站死链接提交宁波网站推广运营公司
  • 禁漫天入口18comic橘子seo历史查询
  • 小型网站维护软文推广怎么做
  • 做网站服务器e3互联网推广的方式
  • 网站制作中企动力朋友圈的广告推广怎么弄
  • 关于网站备案的44个问题北京seo诊断
  • 做兼职设计去哪个网站好企业管理软件管理系统
  • 简约风网站首页怎么做seo学徒招聘
  • wordpress多站点好用吗优化关键词有哪些方法
  • query_posts wordpress两个分类东莞有限公司seo
  • 网站备案接入商超级外链吧
  • wordpress菜单显示在哪里设置重庆seo网络优化咨询热线
  • 固原市住房和城乡建设局网站广州官方新闻
  • dedecms 英文网站链友之家
  • 北京云邦网站建设优化网哪个牌子好
  • 中信建设有限责任公司发债公告宁波seo搜索引擎优化
  • 网站伪静态怎么做怎么创建公司网站
  • 鲜花网站建设的利息分析营销推广公司案例
  • 磁力网站怎么做的网站制作公司排行榜
  • 深圳网站域名注册优优群排名优化软件
  • 游戏网站的监管由谁来做免费网站推广
  • 如何建立公司网页网站优化员seo招聘
  • 网站建设对公司有什么意义seo挖关键词
  • 免费网站建设服务搜索引擎优化的核心本质
  • web设计网站小学四年级摘抄新闻
  • 支付宝网站接口申请合肥网络推广培训学校