参考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;
}
分享到:
相关推荐
本文将深入探讨这个问题,以及如何通过JavaServer Pages(JSP)技术来防止表单的重复提交。 首先,理解表单重复提交的情况。当用户点击提交按钮后,由于网络延迟或刷新页面等原因,可能会导致同一个表单的数据被多...
浅谈利用Session防止表单重复提交 Session是Web应用程序中的一种机制,用于存储用户的会话信息。在Web应用程序中,表单重复提交是一个常见的问题,可能会导致数据库中产生冗余数据,浪费数据库资源。利用Session...
JSP中一种常用的方法是利用Session来防止表单的重复提交。Session在服务器端为每个用户创建一个独立的数据存储空间,可以在其中保存用户的特定信息。以下是这种方法的具体步骤: 1. **设置Session属性**:在用户...
总的来说,“简易投票系统jsp+servlet+javabean”项目是一个典型的Java Web开发实例,涵盖了前端交互、后端处理以及数据管理的核心技术,对于学习和理解Java Web开发具有很好的实践价值。通过这个项目,开发者可以...
在实现"jsp+ajax 无刷新聊天室"的过程中,开发者可能会遇到一些挑战,比如如何处理多个并发的Ajax请求,如何防止重复发送消息,如何优化数据传输以减少网络延迟等。解决这些问题需要对网络通信、并发控制和性能优化...
// 清除session中的令牌,防止重复提交 session.removeAttribute("TOKEN_IN_SESSION"); out.print("转出金额:" + money); } else { // 如果令牌无效,返回错误信息或跳转到错误页面 out.print("非法请求,表单...
这是一个简单的防止重复提交的实现方式,但需要注意的是,这种方法并不完全防止所有类型的重复提交,例如,如果用户在表单提交后刷新页面,浏览器可能会自动重新发送POST请求。为了解决这个问题,可以配合使用HTTP的...
- JSP是由Java Servlet技术发展而来,它将Java代码嵌入到HTML或XML文档中,使得开发者可以在服务器端进行动态内容生成。 - JSP页面由HTML标签、JSP指令、JSP动作和脚本元素组成。其中,JSP动作元素如`<jsp:include...
103.使用session对象防止表单重复提交? 104.获取用户真实IP地址? 105.获取请求中的所有参数? 106.获取完整的请求URL? 107.在重新显示表单时保留用户已经输入的合法数据? 108.使用选代器遍历集合 109.使用特定字符串...
3. **定期刷新验证码**:限制验证码的有效时间,防止重复使用。 4. **提高可读性**:通过扭曲、旋转、添加噪声等方式使验证码更难被机器识别,但同时保持人类可读。 在“security_test”这个项目中,我们可以看到...
- 开发过程中可能会用到IDE如Eclipse或IntelliJ IDEA,以及Tomcat或Jetty等Web服务器来运行和测试JSP和Servlet。 - 数据库管理工具,如MySQL Workbench,用于数据库的设计、管理和调试SQL查询。 - 版本控制系统如...
4. 解决JSP页面刷新时表单重复提交的问题,可以通过Session或Token机制来防止。 5. 在非表单请求中设置action的多种方式,扩展了页面交互的可能性。 6. jQuery AJAX提交表单,将action中的值传递给JSP,这种异步提交...
为了防止表单重复提交,开发者通常会在表单中添加一个唯一的标记,该标记在服务器端进行验证。以下是一种有效的解决方案: 1. 在用户首次访问表单页面时,服务器生成一个随机的唯一值(如UUID),并将这个值存储在...
当用户提交表单后,若立即对页面进行刷新,表单数据会被再次发送到服务器,造成重复提交。为解决此问题,可以改用重定向而非转发。在Servlet处理完请求后,不是使用`request.getRequestDispatcher()`进行转发,而是...
使用session对象防止表单重复提交? 104.获取用户真实IP地址? 105.获取请求中的所有参数? 106.获取完整的请求URL? 107.在重新显示表单时保留用户已经输入的合法数据? 108.使用选代器遍历集合 109....
JSP中的表单元素如`<form>`可以用来接收用户的文件选择,然后通过POST方式提交到后台的Servlet。 2. **Servlet处理**: Servlet是Java Web应用中的服务器端组件,负责处理客户端请求。在这个项目中,Servlet接收...
3. **分页参数安全**:验证用户提交的页码,防止恶意攻击。 4. **无刷新分页**:使用Ajax技术实现无刷新分页,提高用户体验。 **四、JSTL分页标签库** JSTL提供了一个`fmt:formatNumber`标签用于格式化页码,以及`...
3. **Servlet**:虽然JSP可以处理大部分业务逻辑,但复杂的操作如数据库连接、事务管理等通常由Servlet来完成。Servlet是Java Web应用程序中的核心组件,负责处理HTTP请求并生成响应。 4. **数据库**:存储投票数据...
验证码(CAPTCHA)是一种用于防止机器自动操作的验证机制,它通常用于网页表单,确保提交的是由真实人类而非自动化脚本完成的。在Java Web开发中,JSP(JavaServer Pages)可以用来创建动态的、包含随机验证码的图片...
同时,对于敏感操作,如选课,可能需要防止重复提交。 8. **异常处理**: 在开发过程中,需要为可能出现的错误和异常设置合适的处理机制,提供友好的错误提示,确保系统的稳定运行。 9. **性能优化**: 为了提高...