spring 注解重复(防重复请求)
1、配置拦截器
spring-mvc.xml
<mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**/*"/> <mvc:exclude-mapping path="/css/**"/> <mvc:exclude-mapping path="/images/**"/> <mvc:exclude-mapping path="/js/**"/> <mvc:exclude-mapping path="/upload/**"/> <bean class="com.tp.soft.common.interceptor.AvoidDuplicateSubmissionInterceptor" /> </mvc:interceptor> </mvc:interceptors>
2、写注解接口
Token.java
package com.tp.soft.common.interceptor;import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;@Target(ElementType.METHOD) @Retention (RetentionPolicy.RUNTIME) public @interface Token {boolean save() default false ;boolean remove() default false ; }
3、写拦截器
AvoidDuplicateSubmissionInterceptor.java
package com.tp.soft.common.interceptor;import java.lang.reflect.Method; import java.util.UUID;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;public class AvoidDuplicateSubmissionInterceptor extends HandlerInterceptorAdapter {@Overridepublic boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception {if (handler instanceof HandlerMethod) {HandlerMethod handlerMethod = (HandlerMethod) handler;Method method = handlerMethod.getMethod();Token annotation = method.getAnnotation(Token.class);if (annotation != null ) {boolean needSaveSession = annotation.save();if (needSaveSession) {request.getSession( false ).setAttribute("token", UUID.randomUUID().toString());}boolean needRemoveSession = annotation.remove();if (needRemoveSession) {if (isRepeatSubmit(request)) {return false ;}request.getSession( false ).removeAttribute( "token" );}}return true ;} else {return super .preHandle(request, response, handler);}}private boolean isRepeatSubmit(HttpServletRequest request) {String serverToken = (String) request.getSession( false ).getAttribute( "token" );if (serverToken == null ) {return true ;}String clinetToken = request.getParameter( "token" );if (clinetToken == null ) {return true ;}if (!serverToken.equals(clinetToken)) {return true ;}return false ;}}
4、在需要生成token的方法上写上@Token(save=true) 在重复请求的方法上写上@Token(remove=true)
5、在页面上如果是form表单写上
<input type="hidden" name="token" value="${token}" />
如果是异步的则直接用${token}传入参数
转载于:https://www.cnblogs.com/tplovejava/p/5473159.html
spring 注解重复(防重复请求)相关推荐
- 防止跨站请求伪造(CSRF)攻击 和 防重复提交 的方法的实现
CSRF的概念可以参考:http://netsecurity.51cto.com/art/200812/102951.htm 本文介绍的是基于spring拦截器的Spring MVC实现 首先配置拦截 ...
- AOP+自定义注解token令牌和参数防重复提交实战
目录 一.哪些因素会引起重复提交? 二.重复提交会带来哪些问题? 三.订单的防重复提交你能想到几种方案? 四.自定义注解方式 4.1Java核心知识-自定义注解(先了解下什么是自定义注解) 4.1.1 ...
- Spring MVC表单防重复提交
转载自 Spring MVC表单防重复提交 利用Spring MVC的过滤器及token传递验证来实现表单防重复提交. 创建注解 @Target(ElementType.METHOD) @Retent ...
- Spring AOP + Redis解决重复提交的问题
Spring AOP + Redis解决重复提交的问题 用户在点击操作的时候,可能会连续点击多次,虽然前端可以通过设置按钮的disable的属性来控制按钮不可连续点击,但是如果别人拿到请求进行模拟,依 ...
- springboot 主键重复导致数据重复_Springboot实现防重复提交和防重复点击(附源码)...
背景# 同一条数据被用户点击了多次,导致数据冗余,需要防止弱网络等环境下的重复点击 目标# 通过在指定的接口处添加注解,实现根据指定的接口参数来防重复点击 说明# 这里的重复点击是指在指定的时间段内多 ...
- redis+aop防重复提交
文章目录 1.防重复提交注解 2.redis分布式锁 3.防止重复提交Aop 之前有记录一篇用redis+拦截器防重复提交的内容: redis+拦截器防重复提交 1.防重复提交注解 @Target(E ...
- Java的token解决方案,SpringMVC后台token防重复提交解决方案
思路1.添加拦截器,拦截需要防重复提交的请求 2.通过注解@Token来添加token/移除token 3.前端页面表单添加(如果是Ajax请求则需要在请求的json数据中添加token值) 核 ...
- springBoot防重复提交
一.重复提交原因 由于客户端抖动,人为快速点击,造成服务器重复处理 二.后端防重复提交 1.基于token 访问请求到达服务器,服务器端生成token,分别保存在客户端和服务器.提交请求到达服务器,服 ...
- Java实现防重复提交
欢迎访问我的个人博客:www.ifueen.com 防重复提交的重要性? 在业务开发中,为什么我们要去想办法解决重复提交这一问题发生?网上的概念很多:导致表单重复提交,造成数据重复,增加服务器负载,严 ...
最新文章
- Python设计模式-职责链模式
- uploadify 上传
- 倒计时2天!AI大咖云集、30场技术公开课,还有乐队... 年度最有意思的AI开发者活动来了!...
- 如何使用Linux的Crontab定时执行PHP脚本的方法
- 《塔木德智慧全书》(之四)
- BSD:Berkeley Software Distribution,伯克利软件套件
- Python函数默认值参数的2个坑
- 如何在Mac电脑上调整日期和时间?如何高效管理时间?
- 失败程序员的十年总结
- html 手机底部广告,手机网站被UC浏览器强制嵌入推荐广告解决方案
- 相机快门、 光圈有啥区别?
- android中数据统计,Android 友盟统计集成
- X280 工业4g路由器
- excel表格合并程序
- Day 41多表查询以及pymysql相关操作 完善
- 2019牛客暑期多校训练营(第二场)H	Second Large Rectangle
- 为什么电子邮件发送失败?电子邮件发送失败的原因及解决方法
- python 课后习题:项目二数据分析之《冰与火之歌》全五卷人物关系图
- 储存程序通用计算机预设方案,【盛兴利合互动课堂功能―通用型备课及课堂授课应用】PjTime.COM 解决方案 盛兴利合...
- 炫云云模型收费模型免费下载
热门文章
- Python `__enter__` `__exit__`(with)
- C语言 gcc 静态库
- 编程语言对比 引用数据类型-字典
- Python 读写文本(open)
- class matplotlib.figure.Figure
- Pandas 文本数据方法 slice( )
- 在建工程直接费用化_临夏州开展建设工程安全专项整治
- java发送post请求json格式_Linux QT 4G发送HTTP POST请求发送JSON格式的数据
- Windows update一直停留在正在检查更新,为什么
- 华为云-云容器引擎 CCE新功能发布动态