利用redis实现分布式请求防重复提交
2019独角兽企业重金招聘Python工程师标准>>>
1.自定义注解类Token
@Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface Token {String flag() default ""; }
2.在需要拦截的路径上加自定义注解
@Token @RequestMapping(value = "/pda/pick-task/list") public RespJson getPickTask(@RequestParam("whNo") String whNo,@RequestParam(value = "sourceType", required = false) Integer sourceType,@RequestParam(value = "retrieveValue", required = false) String retrieveValue,@RequestParam(value = "realTimePick", required = false, defaultValue = "0") int realTimePick,@RequestParam(value = "taskGroupNo", required = false) String taskGroupNo) { ...
3.利用切面拦截请求
@Aspect @Component public class MethodInterceptor {private Logger logger = LoggerFactory.getLogger(MethodInterceptor.class);
/*** 重复请求拦截** @param joinPoint* @return* @throws Throwable*/ @Around("@annotation(com.haiziwang.kwms.common.annotation.Token)") public Object repeatRequestAround(ProceedingJoinPoint joinPoint) throws Throwable {MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();Method currentMethod = joinPoint.getTarget().getClass().getMethod(methodSignature.getName(), methodSignature.getParameterTypes());IKMEMCache cache = KMemServiceImpl.getCache();//拼接签名StringBuilder signBuffer = new StringBuilder(currentMethod.getAnnotation(RequestMapping.class).value()[0]);Object[] args = joinPoint.getArgs();for (Object object : args) {if (object != null) {String str = "";try {str = JSONObject.toJSONString(object);} catch (Exception e) {}signBuffer.append("^").append(str);}}String tokenKey = signBuffer.toString();if (StringUtils.isNotBlank(cache.readFromHash(RedisKeyType.TOKEN.getName(), tokenKey))) {if (StringConstants.WCS.equals(currentMethod.getAnnotation(Token.class).flag())) {throw new WMS3CheckedException(WMS3ExceptionCode.WCS_REPEAT_REQUEST_EXCEPTION);}if (currentMethod.getReturnType() == RespJson.class) {throw new WMS3CheckedException(WMS3ExceptionCode.REPEAT_REQUEST_EXCEPTION);}if (currentMethod.getReturnType() == PageRespJson.class) {throw new WMS3CheckedException(WMS3ExceptionCode.REPEAT_REQUEST_PAGE_EXCEPTION);}}cache.write4Hash(RedisKeyType.TOKEN.getName(), tokenKey, "token");try {return joinPoint.proceed();} finally {cache.deleteHashFields(RedisKeyType.TOKEN.getName(), tokenKey);} }
转载于:https://my.oschina.net/u/2485283/blog/1859323
利用redis实现分布式请求防重复提交相关推荐
- redis+aop防重复提交
文章目录 1.防重复提交注解 2.redis分布式锁 3.防止重复提交Aop 之前有记录一篇用redis+拦截器防重复提交的内容: redis+拦截器防重复提交 1.防重复提交注解 @Target(E ...
- 防止跨站请求伪造(CSRF)攻击 和 防重复提交 的方法的实现
CSRF的概念可以参考:http://netsecurity.51cto.com/art/200812/102951.htm 本文介绍的是基于spring拦截器的Spring MVC实现 首先配置拦截 ...
- AOP+自定义注解token令牌和参数防重复提交实战
目录 一.哪些因素会引起重复提交? 二.重复提交会带来哪些问题? 三.订单的防重复提交你能想到几种方案? 四.自定义注解方式 4.1Java核心知识-自定义注解(先了解下什么是自定义注解) 4.1.1 ...
- java mysql防重复提交_防止数据重复提交的6种方法(超简单)!
有位朋友,某天突然问磊哥:在 Java 中,防止重复提交最简单的方案是什么? 这句话中包含了两个关键信息,第一:防止重复提交:第二:最简单. 于是磊哥问他,是单机环境还是分布式环境? 得到的反馈是单机 ...
- springBoot防重复提交
一.重复提交原因 由于客户端抖动,人为快速点击,造成服务器重复处理 二.后端防重复提交 1.基于token 访问请求到达服务器,服务器端生成token,分别保存在客户端和服务器.提交请求到达服务器,服 ...
- 架构设计 | 接口幂等性原则,防重复提交Token管理
本文源码:GitHub·点这里 || GitEE·点这里 一.幂等性概念 1.幂等简介 编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同.就是说,一次和多次请求某一个资源会产 ...
- 处理接口超时_架构设计 | 接口幂等性原则,防重复提交Token管理
一.幂等性概念 1.幂等简介 编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同.就是说,一次和多次请求某一个资源会产生同样的作用影响. 2.HTTP请求 遵循Http协议的请 ...
- Java实现防重复提交
欢迎访问我的个人博客:www.ifueen.com 防重复提交的重要性? 在业务开发中,为什么我们要去想办法解决重复提交这一问题发生?网上的概念很多:导致表单重复提交,造成数据重复,增加服务器负载,严 ...
- 浅谈C#在网络波动时防重复提交
前几天,公司数据库出现了两条相同的数据,而且时间相同(毫秒也相同).排查原因,发现是网络波动造成了重复提交. 由于网络波动而重复提交的例子也比较多: 网络上,防重复提交的方法也很多,使用redis锁, ...
最新文章
- Hooq 登陆新加坡,“亚洲版 Netflix ”要与对标公司抢夺东南亚视频市场
- 研究揭示大脑在工作记忆中存储信息的神经机制
- HTML5 input placeholder 颜色 改动
- sqoop 使用心得(sqoop增量倒入)
- Address already in use: JVM_Bind:8080类似问题解决方法
- 红警conquer.mix文件
- c语言指针选择题库及答案,C语言指针练习习题及答案.doc
- jQuery Fancybox插件介绍
- Android RecyclerView 横屏禁用滚动/竖屏开启滚动
- 1*1卷积核的作用(bottleneck的作用)
- NOIP 2012 国王游戏
- 让浏览器自动在指定网站地址前加https
- linux下java导出execl_POI实现导出EXCEL详解
- 逆转力 | 不屈服,就不会垮掉
- 【安全01】防火墙的性能指标
- android2.5纬数字地图,步行者地图安卓版下载
- uniapp蓝牙模块demo
- 网易云音乐极速版,开屏无广告,免升级,无花里胡哨的功能
- C++ Primer(顺序容器 上)
- servlet的运行原理
热门文章
- mysql+monitor+下载_详解MySQL监控工具 mysql-monitor
- 柯美复印机服务器操作系统,柯尼卡美能达C350复印机网传真设置
- python做后端速度慢吗_【后端开发】python为什么慢?
- pytorch 查看当前学习率_pytorch调整模型训练的学习率
- EventBus3.0开发详解 近万开发者收藏
- Android中事件分发机制的总结
- Guassdb T 在EulerOS系统安装说明
- Retrofit 2.0
- oracle 作业 断开原因,解惑 | Oracle JOB 异常中断原因分析
- linux中mtools工具_Linux mtools命令