- 浏览: 3425234 次
- 性别:
- 来自: 珠海
文章分类
- 全部博客 (1633)
- Java (250)
- Android&HTML5 (111)
- Struts (10)
- Spring (236)
- Hibernate&MyBatis (115)
- SSH (49)
- jQuery插件收集 (55)
- Javascript (145)
- PHP (77)
- REST&WebService (18)
- BIRT (27)
- .NET (7)
- Database (105)
- 设计模式 (16)
- 自动化和测试 (19)
- Maven&Ant (43)
- 工作流 (36)
- 开源应用 (156)
- 其他 (16)
- 前台&美工 (119)
- 工作积累 (0)
- OS&Docker (83)
- Python&爬虫 (28)
- 工具软件 (157)
- 问题收集 (61)
- OFbiz (6)
- noSQL (12)
最新评论
-
HEZR曾嶸:
你好博主,这个不是很理解,能解释一下嘛//左边+1,上边+1, ...
java 两字符串相似度计算算法 -
天使建站:
写得不错,可以看这里,和这里的这篇文章一起看,有 ...
jquery 遍历对象、数组、集合 -
xue88ming:
很有用,谢谢
@PathVariable映射出现错误: Name for argument type -
jnjeC:
厉害,困扰了我很久
MyBatis排序时使用order by 动态参数时需要注意,用$而不是# -
TopLongMan:
非常好,很实用啊。。
PostgreSQL递归查询实现树状结构查询
http://my.oschina.net/zyqjustin/blog/692789
如何在Spring MVC里面解决此问题(其它框架也一样,逻辑一样,思想一样,和具体框架没什么关系)。要解决重复提交,有很多办法,比如说在提交完成后redirect一下,也可以用本文提到的使用token的方法(我不使用redirect是因为那样解决不了ajax提交数据或者移动应用提交数据,另一个原因是现在比较通行的方法是使用token,像python里的django框架也是使用token来解决)。
使用token的逻辑是,给所有的url加一个拦截器,在拦截器里面用java的UUID生成一个随机的UUID并把这个UUID放到session里面,然后在浏览器做数据提交的时候将此UUID提交到服务器。服务器在接收到此UUID后,检查一下该UUID是否已经被提交,如果已经被提交,则不让逻辑继续执行下去…
好的,来点实际代码,也许实际代码才是最好的老师:
注解Token代码:
拦截器TokenInterceptor代码:
然后在Spring MVC的配置文件里加入:注意,要在*-servlet。xml里面配置
相关代码已经注释,相信你能看懂。
关于这个方法的用法是:在需要生成token的controller上增加@Token(save=true),而在需要检查重复提交的controller上添加@Token(remove=true)就可以了。
另外,你需要在view里在form里增加下面代码:
如何在Spring MVC里面解决此问题(其它框架也一样,逻辑一样,思想一样,和具体框架没什么关系)。要解决重复提交,有很多办法,比如说在提交完成后redirect一下,也可以用本文提到的使用token的方法(我不使用redirect是因为那样解决不了ajax提交数据或者移动应用提交数据,另一个原因是现在比较通行的方法是使用token,像python里的django框架也是使用token来解决)。
使用token的逻辑是,给所有的url加一个拦截器,在拦截器里面用java的UUID生成一个随机的UUID并把这个UUID放到session里面,然后在浏览器做数据提交的时候将此UUID提交到服务器。服务器在接收到此UUID后,检查一下该UUID是否已经被提交,如果已经被提交,则不让逻辑继续执行下去…
好的,来点实际代码,也许实际代码才是最好的老师:
注解Token代码:
@Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface Token { boolean save() default false; boolean remove() default false; }
拦截器TokenInterceptor代码:
public class TokenInterceptor extends HandlerInterceptorAdapter { @Override public 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; } }
然后在Spring MVC的配置文件里加入:注意,要在*-servlet。xml里面配置
<!-- 拦截器配置 --> <mvc:interceptors> <!-- 配置Shiro拦截器,实现注册用户的注入 --> <mvc:interceptor> <mvc:mapping path="/**"/> <bean class="com.storezhang.video.shiro.ShiroInterceptor"/> </mvc:interceptor> <!-- 配置Token拦截器,防止用户重复提交数据 --> <mvc:interceptor> <mvc:mapping path="/**"/> <bean class="com.storezhang.web.spring.TokenInterceptor"/> </mvc:interceptor> </mvc:interceptors>
相关代码已经注释,相信你能看懂。
关于这个方法的用法是:在需要生成token的controller上增加@Token(save=true),而在需要检查重复提交的controller上添加@Token(remove=true)就可以了。
另外,你需要在view里在form里增加下面代码:
<input type="hidden" name="token" value="${token}" />
发表评论
-
Spring Boot 属性配置
2016-06-24 11:04 1183Spring Boot 属性配置和使用 http://blog ... -
Spring Boot 集成MyBatis
2016-06-24 10:55 2028Spring Boot 集成MyBatis http://bl ... -
Spring容器加载完之后执行特定任务
2016-06-17 15:36 2288http://my.oschina.net/simpleton ... -
使用spring-session和shiro来代理session的配置
2016-06-16 11:21 12062使用spring-session和redis来代理sessio ... -
JSTL 的 if else : 有 c:if 没有 else 的处理
2016-06-14 09:52 1337http://blog.csdn.net/xiyuan1999 ... -
spring mvc 请求转发和重定向
2016-06-14 09:48 1400http://blog.csdn.net/jackpk/art ... -
mvc:view-controller
2016-05-18 10:26 1084http://blog.csdn.net/lzwglory/a ... -
spring配置事物的方式:注解和aop配置
2016-05-14 00:26 4104参考: Spring AOP中pointcut express ... -
分布式任务调度组件 Uncode-Schedule
2016-05-13 14:47 2287http://www.oschina.net/p/uncode ... -
Mybatis分库分表扩展插件
2016-05-12 15:47 1625http://fangjialong.iteye.com/bl ... -
spring+mybatis+atomikos 实现JTA事务
2016-05-11 22:00 5524sping配置多个数据源 不同用户操作不同数据库 http:/ ... -
Spring中使用注解 @Scheduled执行定时任务
2016-05-10 09:39 1567原文:http://dwf07223.blog.51cto.c ... -
Spring中配置Websocket
2016-05-05 16:55 1278spring+websocket整合(springMVC+sp ... -
redis 集群中Session解决方案之Spring Session
2016-05-04 08:54 1316集群中Session解决方案之Spring Session h ... -
使用Spring-data进行Redis操作
2016-05-04 08:54 4795使用Spring-data进行Redis操作 http://z ... -
Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC
2016-05-03 13:35 1062Spring4新特性——集成Bean Validation 1 ... -
SpringMVC介绍之Validation
2016-05-03 13:10 985SpringMVC介绍之Validation http://h ... -
spring 注解方式下使用commons-validator 验证表单
2016-05-03 11:08 3078原文: http://www.programgo.com/ar ... -
Spring MVC学习详解
2016-04-28 09:13 1005原文 http://blog.csdn.net/alsocod ... -
Hessian 二进制RPC协议整合到SpringMVC
2016-04-27 09:47 1742SpringMVC集成Hessianhttp://blog.c ...
相关推荐
Spring MVC 防止数据重复提交的方法 Spring MVC 防止数据重复提交的方法是使用 Token 机制来实现的,该机制通过在服务器端生成一个随机的 UUID,并将其存储在 Session 中,然后在客户端提交数据时带上该 UUID,...
Spring MVC接口防数据篡改和重复提交 Spring MVC框架中,数据篡改和重复提交是常见的安全问题,本文将详细介绍如何使用Spring MVC防止数据篡改和重复提交。 一、自定义注解 在Spring MVC中,可以使用自定义注解来...
在Spring MVC框架中,防止重复提交是一个重要的议题,特别是在处理敏感数据或执行不可逆操作时。重复提交可能会导致数据不一致性和系统混乱。"Token-SpringMVC"是一种常见的解决方案,它利用令牌(Token)机制来确保...
在现代Web应用开发中,防止表单重复提交是一项重要的任务,因为这可能导致数据不一致性和服务器资源浪费。本文将深入探讨如何使用Spring Boot 2.1、Redis和拦截器来实现这一功能。以下是对这个主题的详细解释: ...
在Spring框架中,防止重复提交是一项重要的功能,它有助于确保数据的一致性和完整性。重复提交可能会导致数据库中的数据不一致,特别是在并发环境下。本篇将详细介绍如何在Spring中实现这一功能,主要分为四个步骤:...
Spring 注解方式防止重复提交原理详解 Spring 注解方式防止重复提交原理详解是 Spring 框架中的一种防止重复提交的方法。该方法通过使用注解和拦截器来实现防止重复提交。 首先,我们需要定义一个 annotation,名...
3. **Spring的拦截器(Interceptor)**:可以自定义拦截器,实现`HandlerInterceptor`接口,其中的`postHandle()`方法可以用来处理表单提交后的状态,防止重复提交。 4. **令牌(Token)机制**:与Servlet中的令牌...
登录成功后,可以使用RedirectAttributes进行重定向,以防止表单重复提交。 **8. CSRF防护** 为了增强安全性,还需要考虑跨站请求伪造(CSRF)攻击的防护。Spring Security默认提供了CSRF保护,可以通过配置关闭或...
在Spring MVC框架中,防重复提交是一个常见的需求,特别是在处理重要的业务操作时,如订单创建、用户注册等。重复提交可能会导致数据不一致,影响系统的稳定性。本篇将详细介绍如何在Spring MVC中自定义实现防重复...
3. **AOP(面向切面编程)**:Spring的AOP功能可用于实现通用的日志记录、性能监控等功能,减少重复代码。 4. **Spring MVC的ModelAndView与MyBatis的结合**:在Controller中调用MyBatis的Mapper方法,将查询结果放...
JUnit作为Java领域最流行的单元测试框架,与Spring MVC和Spring Boot的集成使得开发者能够更高效地进行测试驱动开发(TDD)或行为驱动开发(BDD)。下面将详细介绍这个主题中的相关知识点。 1. JUnit JUnit是一个...
在Spring MVC Web应用程序中集成Jasper报表工具是一个常见的需求,以提供动态生成和展示各种复杂数据的报表。JasperReports是一款强大的开源报表库,能够帮助开发者创建、设计和展示多种格式的报表,如PDF、HTML、...
在Spring MVC中,所有请求都会被提交给一个名为DispatcherServlet的中央调度器。这个调度器会根据配置,将请求分派给相应的Controller,即处理器。在Controller处理完毕后,会返回一个ModelAndView对象,该对象既...
本项目基于Java技术栈,具体使用了Spring、Spring MVC和Mybatis这三大框架,它们共同构成了一个强大的后端处理机制。下面将详细介绍这三个组件以及在用户注册和密码修改场景中的应用。 **1. Spring框架** Spring是...
在Java Web开发中,Spring MVC框架是一个非常流行的MVC(模型-视图-控制器)架构模式实现,它为开发者提供了构建高效、灵活且可维护的Web应用的强大工具。本篇文章将详细探讨`Spring MVC`中的`SimpleFormController`...
- **设计模式**:Spring MVC遵循传统的MVC模式,而Struts2则采用了拦截器模式。 - **灵活性**:Spring MVC提供了更多的灵活性,因为它是基于POJO的,而Struts2则是基于API的。 - **配置**:Spring MVC更倾向于使用...
### Spring MVC面试试题详解 #### 一、Spring MVC框架的核心组件与流程 1. **DispatcherServlet的作用**:作为Spring MVC框架的前端控制器,DispatcherServlet是整个请求处理过程的起点,负责接收客户端请求,并将...
9. **拦截器/过滤器**:在Spring Boot中,可以使用Spring MVC的拦截器或Filter来拦截请求,实现请求的预处理和后处理,包括防重复提交的逻辑。 10. **AOP(面向切面编程)**:通过定义切面,可以在方法执行前后添加...
### 基于Spring MVC的高校学院学工助理系统的设计与实现 #### 一、引言 随着互联网技术的发展和普及,高校管理信息化已经成为一种趋势。为了提高学工助理的工作效率,更好地服务师生,本研究设计并实现了基于...
SpringMVC中基于Token防止表单重复提交方法 SpringMVC中基于Token防止表单重复提交方法是指通过在SpringMVC配置文件中添加拦截器配置,来拦截页面请求和表单提交请求,以防止表单重复提交。下面是该方法的实现思路...