`
wjcom1127
  • 浏览: 41420 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

jsp、servlet防止刷新重复提交

阅读更多
参考struts的token(令牌)机制

在提交的时候在Servlet中根据用户的sessionid和当前时间的long值生成一个令牌(每次提交都会生成一个新令牌),将令牌保存在该用户的会话中,并将令牌的值以request属性形式传到前端页面,在前端页面的form中增加传递令牌的隐藏域<input type="hidden" name="clientToken" value="<%=clientToken%>" />,提交form的时候,也会将clientToken传入Servlet,如果session中保存的令牌值与传入的不同,则是重复提交,因为每次请求Servlet都会生成新的令牌,刷新时的令牌值是旧的令牌值,不是最新的令牌值。

jsp:
<%

//获取令牌、防止刷新重复提交
String clientToken = (String)request.getSession().getAttribute("clientToken");
clientToken = (StringUtils.isEmpty(clientToken)) ? "" : clientToken;

%>

<form>中增加<input type="hidden" name="clientToken" value="<%=clientToken%>" /> 




java:

/**
	 * 令牌验证防止刷新提交
	 */
	private String clientToken;


/**
	 * 验证防止刷新重复提交
	 * @return
	 */
	private boolean validateToken()
	{
		boolean bl = false;
		try
		{
			String sessionToken = (String) getHttpRequest().getSession().getAttribute(
					"token");
			if (StringUtils.isNotEmpty(sessionToken) && !clientToken.equals(sessionToken))
			{
				// 禁止刷新
				bl = false;
			}
			else
			{
				// 正常的操作
				bl = true;
				
				// 生成新令牌
				String sToken = UUID.randomUUID().toString().toUpperCase();
				getHttpRequest().getSession().setAttribute("clientToken", sToken);
				// 替换旧令牌
				getHttpRequest().getSession().setAttribute("token", sToken);
			}
		}
		catch (Exception e)
		{
			LOGGER.error(e.getMessage());
		}
		
		return bl;
	}
分享到:
评论

相关推荐

    jsp项目放置表单重复提交

    本文将深入探讨这个问题,以及如何通过JavaServer Pages(JSP)技术来防止表单的重复提交。 首先,理解表单重复提交的情况。当用户点击提交按钮后,由于网络延迟或刷新页面等原因,可能会导致同一个表单的数据被多...

    浅谈利用Session防止表单重复提交

    浅谈利用Session防止表单重复提交 Session是Web应用程序中的一种机制,用于存储用户的会话信息。在Web应用程序中,表单重复提交是一个常见的问题,可能会导致数据库中产生冗余数据,浪费数据库资源。利用Session...

    JSP针对表单重复提交的处理方法

    JSP中一种常用的方法是利用Session来防止表单的重复提交。Session在服务器端为每个用户创建一个独立的数据存储空间,可以在其中保存用户的特定信息。以下是这种方法的具体步骤: 1. **设置Session属性**:在用户...

    简易投票系统jsp+servlet+javabean

    总的来说,“简易投票系统jsp+servlet+javabean”项目是一个典型的Java Web开发实例,涵盖了前端交互、后端处理以及数据管理的核心技术,对于学习和理解Java Web开发具有很好的实践价值。通过这个项目,开发者可以...

    jsp+ajax 无刷新聊天室

    在实现"jsp+ajax 无刷新聊天室"的过程中,开发者可能会遇到一些挑战,比如如何处理多个并发的Ajax请求,如何防止重复发送消息,如何优化数据传输以减少网络延迟等。解决这些问题需要对网络通信、并发控制和性能优化...

    Java表单重复提交的避免方法

    // 清除session中的令牌,防止重复提交 session.removeAttribute("TOKEN_IN_SESSION"); out.print("转出金额:" + money); } else { // 如果令牌无效,返回错误信息或跳转到错误页面 out.print("非法请求,表单...

    JAVA防止重复提交Web表单的方法

    这是一个简单的防止重复提交的实现方式,但需要注意的是,这种方法并不完全防止所有类型的重复提交,例如,如果用户在表单提交后刷新页面,浏览器可能会自动重新发送POST请求。为了解决这个问题,可以配合使用HTTP的...

    jsp网上投票系统,可禁止同一IP重复投票

    - JSP是由Java Servlet技术发展而来,它将Java代码嵌入到HTML或XML文档中,使得开发者可以在服务器端进行动态内容生成。 - JSP页面由HTML标签、JSP指令、JSP动作和脚本元素组成。其中,JSP动作元素如`&lt;jsp:include...

    JSP实用技巧集合,jsp编程的一些小技巧总结

    103.使用session对象防止表单重复提交? 104.获取用户真实IP地址? 105.获取请求中的所有参数? 106.获取完整的请求URL? 107.在重新显示表单时保留用户已经输入的合法数据? 108.使用选代器遍历集合 109.使用特定字符串...

    servlet实现的验证码

    3. **定期刷新验证码**:限制验证码的有效时间,防止重复使用。 4. **提高可读性**:通过扭曲、旋转、添加噪声等方式使验证码更难被机器识别,但同时保持人类可读。 在“security_test”这个项目中,我们可以看到...

    vote投票系统java jsp mysql

    - 开发过程中可能会用到IDE如Eclipse或IntelliJ IDEA,以及Tomcat或Jetty等Web服务器来运行和测试JSP和Servlet。 - 数据库管理工具,如MySQL Workbench,用于数据库的设计、管理和调试SQL查询。 - 版本控制系统如...

    jsp源码实例2(获取表单参数).docx

    4. 解决JSP页面刷新时表单重复提交的问题,可以通过Session或Token机制来防止。 5. 在非表单请求中设置action的多种方式,扩展了页面交互的可能性。 6. jQuery AJAX提交表单,将action中的值传递给JSP,这种异步提交...

    JavaWeb中HttpSession中表单的重复提交示例

    为了防止表单重复提交,开发者通常会在表单中添加一个唯一的标记,该标记在服务器端进行验证。以下是一种有效的解决方案: 1. 在用户首次访问表单页面时,服务器生成一个随机的唯一值(如UUID),并将这个值存储在...

    详谈表单重复提交的三种情况及解决方法

    当用户提交表单后,若立即对页面进行刷新,表单数据会被再次发送到服务器,造成重复提交。为解决此问题,可以改用重定向而非转发。在Servlet处理完请求后,不是使用`request.getRequestDispatcher()`进行转发,而是...

    jsp编程技巧集锦

    使用session对象防止表单重复提交? 104.获取用户真实IP地址? 105.获取请求中的所有参数? 106.获取完整的请求URL? 107.在重新显示表单时保留用户已经输入的合法数据? 108.使用选代器遍历集合 109....

    JSP照片模糊

    JSP中的表单元素如`&lt;form&gt;`可以用来接收用户的文件选择,然后通过POST方式提交到后台的Servlet。 2. **Servlet处理**: Servlet是Java Web应用中的服务器端组件,负责处理客户端请求。在这个项目中,Servlet接收...

    jsp分页技术算法jsp分页技术算法

    3. **分页参数安全**:验证用户提交的页码,防止恶意攻击。 4. **无刷新分页**:使用Ajax技术实现无刷新分页,提高用户体验。 **四、JSTL分页标签库** JSTL提供了一个`fmt:formatNumber`标签用于格式化页码,以及`...

    JSP投票管理系统,内含源代码

    3. **Servlet**:虽然JSP可以处理大部分业务逻辑,但复杂的操作如数据库连接、事务管理等通常由Servlet来完成。Servlet是Java Web应用程序中的核心组件,负责处理HTTP请求并生成响应。 4. **数据库**:存储投票数据...

    jsp随机验证码(图片)

    验证码(CAPTCHA)是一种用于防止机器自动操作的验证机制,它通常用于网页表单,确保提交的是由真实人类而非自动化脚本完成的。在Java Web开发中,JSP(JavaServer Pages)可以用来创建动态的、包含随机验证码的图片...

    基于JSP的网上选课系统

    同时,对于敏感操作,如选课,可能需要防止重复提交。 8. **异常处理**: 在开发过程中,需要为可能出现的错误和异常设置合适的处理机制,提供友好的错误提示,确保系统的稳定运行。 9. **性能优化**: 为了提高...

Global site tag (gtag.js) - Google Analytics