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

做淘宝代码的网站线上推广app

做淘宝代码的网站,线上推广app,苏州知名互联网公司,有什么做兼职的好的网站吗本功能是在切面执行链基础上实现的功能,如果不知道切面执行链的同学,请看一下我之前专门介绍切面执行链的文章。 在SpringBoot项目中实现切面执行链功能-CSDN博客 1.定义防重复提交handler /*** 重复提交handler**/ AspectHandlerOrder public class …

本功能是在切面执行链基础上实现的功能,如果不知道切面执行链的同学,请看一下我之前专门介绍切面执行链的文章。

在SpringBoot项目中实现切面执行链功能-CSDN博客

1.定义防重复提交handler

/*** 重复提交handler**/
@AspectHandlerOrder
public class ResubmitAspectHandler implements AspectHandler {private StringRedisTemplate stringRedisTemplate;public void setStringRedisTemplate(StringRedisTemplate stringRedisTemplate) {this.stringRedisTemplate = stringRedisTemplate;}@Overridepublic boolean execute(ProceedingJoinPoint pjp) throws Exception {Method method = getMethod(pjp);if (!method.isAnnotationPresent(Resubmit.class)) {return true;}Resubmit annotation = method.getAnnotation(Resubmit.class);long ttl = annotation.ttl();String key = getKey();String value = "1";if (lock(key, value, ttl)) {return true;} throw new BaseRuntimeException(ExceptionEnums.ERROR_10012.getCode(), "操作频率过高,请稍后再试!");}@Overridepublic void afterCompletion(ProceedingJoinPoint pjp, Object response, Exception exception) {Method method = getMethod(pjp);if (method.isAnnotationPresent(Resubmit.class)) {unlock(getKey());}}/*** redis原子操作:如果key不存在就设置key:value** @param key* @param value* @return true:设置成功拿到锁,false:设置失败未拿到锁*/private boolean lock(final String key, final String value, final long ttl) {Boolean result = stringRedisTemplate.boundValueOps(key).setIfAbsent(value, Duration.ofSeconds(ttl));return result != null ? result : false;}/*** 解锁:删除key** @param key*/private void unlock(String key) {if (StringUtils.isNotBlank(key)) {stringRedisTemplate.delete(key);}}/*** 获取方法** @param pjp* @return*/private Method getMethod(ProceedingJoinPoint pjp) {MethodSignature signature = (MethodSignature) pjp.getSignature();Method method = signature.getMethod();return method;}/*** 获取key** @return*/private String getKey() {ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();HttpServletRequest request = requestAttributes.getRequest();String url = request.getRequestURI();String httpMethod = request.getMethod();HttpHeader httpHeader = WebContext.getHttpHeader();String deviceId = httpHeader.getDevice_id();String key = RedisConstants.REDIS_RESUBMIT_KEY + httpMethod + url + ":" + deviceId;return key;}
}

2.定义防重复提交注解

/*** 防止重复提交*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Resubmit {/*** 存活时间(秒),当意外情况(例如锁定之后重启服务)* 未能执行解锁功能,redis将在${ttl}秒之后自动删除锁标志* 默认 10秒* @return*/long ttl() default 10;}

3.在配置类中注入防重复提交切面类

@Bean
public List<AspectHandler> apiAspectHandlers() {ResubmitAspectHandler resubmitAspectHandler = new ResubmitAspectHandler();resubmitAspectHandler.setStringRedisTemplate(stringRedisTemplate);return Arrays.asList(resubmitAspectHandler);
}

4.controller中应用防重复提交注解

@PostMapping("/release")
@Resubmit
public ApiResponse<?> insert(@RequestBody @Valid InsertAppRequestDTO req) {// 处理业务逻辑
}

http://www.hkea.cn/news/34596/

相关文章:

  • 网站做公司女生学网络营销这个专业好吗
  • 网络运营主要工作内容seo教程自学入门教材
  • 用其他商标在自己网站做宣传百度云网盘资源分享网站
  • 对商家而言网站建设的好处淘宝关键词查询工具哪个好
  • 做简单网站代码关键词推广价格
  • 做品牌折扣的网站百度推广的五大优势
  • 南宁比较有好的网站制作公司百度推广后台登录页面
  • 长沙企业网站排名优化windows优化大师和360哪个好
  • 珠海网站开发维护科技公司免费的网络推广渠道有哪些
  • wp建站系统微信营销管理软件
  • 本地打开WordPress慢百度seo优化分析
  • 适合友情链接的网站排名函数
  • 开发公司岗位设置广州seo招聘网
  • 国内web设计网站宣传推广
  • 深圳高端网站定制公司小时seo
  • wordpress主菜单下拉箭头怎么设置台州seo排名优化
  • 网站系统管理员模块关键词查找工具
  • 望江县建设局网站外贸seo推广招聘
  • 微信网站上传图片手机怎么制作网站
  • 简单做网站需要学什么搜索引擎有哪些网站
  • 网站备案信息加到哪里如何进行网站推广
  • 昭通网站制作aso优化技巧
  • 制作网站时怎样做滚动字幕新网站多久会被百度收录
  • 余姚物流做网站微信指数是搜索量吗
  • 怎样做网站轮播今日国内重大新闻事件
  • 想给大学做网站百度网盘搜索神器
  • jsp网站开发论文官方app下载安装
  • 关于机场建设的网站今日疫情最新情况
  • 网站域名注册服务商google浏览器官方
  • 通过网站开发工具怎么改自动跳网站百度指数有哪些功能