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

filter全局控制重复提交

 
阅读更多

采用filter来全局控制重复提交

 

filter拦截需要控制重复提交的页面

filter中获取该页面的所有参数值

将参数值字符串进行计算hash值存入session,或者数据库中,保存最近一次操作的hash值

 

获取session中最近的hash值和本次获取参数值计算所得的hash值对比,,相同则为重复提交,不同则放行

 

@Override
	public void doFilter(ServletRequest req, ServletResponse res,
			FilterChain chain) throws IOException, ServletException {
		HttpServletRequest request = (HttpServletRequest)req;
		HttpServletResponse response = (HttpServletResponse)res;
		Integer session_token = (Integer)request.getSession(true).getAttribute("token");
		Enumeration<String>  en= request.getParameterNames();
		System.out.println("==session token:"+session_token);
		String strcode = "";
		while(en.hasMoreElements()){
			strcode +=request.getParameter(en.nextElement());
		}
		//将表单页面所有值相加字符串进行hash计算
		int hash_token = strcode.hashCode();
		//两次hash值相同,则表示为重复提交
		if(session_token!=null&&session_token==hash_token){
			response.sendRedirect(request.getContextPath()+"/chongfu.do");
		}else {
			//session中保持最近一次表单hash值
			request.getSession(true).setAttribute("token", hash_token);
			chain.doFilter(req, res);
		}
	}
 
分享到:
评论

相关推荐

    Java怎样防止重复提交

    - 在Servlet容器中,可以编写一个全局的过滤器来拦截请求,检查是否为重复提交。但这需要有可靠的判断标准,如基于请求的唯一ID或令牌。 综上所述,防止重复提交的方法多种多样,具体选择哪种策略取决于应用的需求...

    PHP表单提交开发实例

    10. **提交后的重定向**:提交成功后,可以使用`header()`函数重定向用户到其他页面,避免用户重复提交表单。 通过以上步骤,你可以构建一个完整的PHP表单提交系统,实现数据的收集、验证、处理以及与外部系统的...

    Java ssm 面试题 (2).docx

    - **读已提交(READ COMMITTED)**:只读取已提交的数据,减少了脏读的可能性,但可能导致不可重复读和幻读。 - **可重复读(REPEATABLE READ)**:防止不可重复读,但幻读仍可能发生,例如MySQL的InnoDB引擎默认...

    基于PHP的表单程序源码.zip

    9. **表单重定向**: 完成表单处理后,可能会使用`header()`函数进行重定向,避免用户重复提交表单。重定向到成功页面、错误页面或者刷新当前页面都是常见的实践。 10. **响应式设计**: 当今的Web应用需要适应不同...

    Java ssm 面试题.docx

    - `Isolation.REPEATABLE_READ`:可重复读,允许读取已经提交的数据,但在同一事务中多次读取同一数据始终一致,防止不可重复读。 - `Isolation.READ_COMMITTED`:读已提交,只保证事务内的读操作能看到其他事务已经...

    java表单提交中文乱码的解决方法

    3. **配置Web应用的字符集**:在`web.xml`文件中,可以通过`&lt;filter&gt;`和`&lt;filter-mapping&gt;`元素,配合`CharacterEncodingFilter`实现全局的请求编码设置。这样,无需在每个Servlet中单独设置编码,可以减少代码重复...

    MVC PPT,新手入门必备

    Action Filter是可重复使用的代码段,用于在执行控制器动作前后执行特定的任务。ASP.NET MVC提供了一些内置的过滤器,如授权、缓存等。过滤器可以通过特性(Attribute)的形式应用到控制器或动作上。 **使用AJAX** ...

    ajax提交session超时跳转页面使用全局的方法来处理

    3. 这种全局处理方式可以减少代码重复,提高代码复用性,同时也能确保用户体验的连贯性。 此外,你可能还对其他相关的主题感兴趣,例如设置Session超时的不同方法、使用AJAX重写Session超时跳转、IIS的Session超时...

    中文岂能乱码(J2EE)

    ### 过滤器(Filter)作为全局解决方案 过滤器是一种能够拦截客户端请求和服务器响应的技术,可以用于统一处理中文乱码问题。 #### 实现步骤: 1. **创建过滤器类:** 定义一个实现`javax.servlet.Filter`接口的类。 ...

    软件工程答辩常见问题总结.doc

    为了全局解决这个问题,可以使用过滤器(Filter)。 过滤器是Java Web应用中处理请求和响应的重要工具,它可以拦截请求并在执行实际业务逻辑之前或之后执行自定义操作。在本例中,创建了一个名为`...

    《Java-Web应用开发基础》综合练习3.docx

    11. Context参数:Context参数是Web应用的全局参数,可以在web.xml文件中配置。可以使用application对象来获取这些参数。 12. 表单提交:HTML中的表单可以使用post或get方法提交数据,提交地址可以是Servlet、jsp或...

    PHP经典实例--表单

    ...在PHP中,我们通常使用`$_POST`或`$_GET`全局数组来...以上就是PHP处理表单输入、验证、多页表单、错误显示以及防止XSS和重复提交的基本方法。理解并熟练运用这些技巧,对于开发健壮、安全的PHP应用程序至关重要。

    Git 魔法-PDF

    通过`git rebase`或`git filter-branch`等命令可以重写提交历史,但这需要谨慎操作。 **制造历史** 有时需要创建假的提交历史,例如为了测试某个工作流或演示目的。 **哪儿错了?** 当遇到问题时,可以通过分析...

    javaee中的乱码问题及解决方案(持续更新)(修改后).docx

    对于大型项目,使用过滤器(Filter)进行全局的编码转换是一种更高效的方法。过滤器可以在请求处理的早期阶段统一处理编码问题,避免在每个Servlet或JSP中重复设置。 总的来说,处理Java EE中的乱码问题,关键在于...

    JSP中文乱码解决集锦

    - 解决方案C:使用过滤器(Filter)全局处理请求编码。过滤器在请求处理前运行,可以统一设置所有JSP页面的字符集,避免在每个页面上重复设置。 3. **过滤器(Filter)的使用**: - 创建一个实现`Filter`接口的类...

    Struts2.1学习笔记

    - **token防止表单重复提交**:使用`&lt;s:token&gt;`标签可以生成一个隐藏字段,防止用户多次提交同一个表单。 通过以上内容的学习,可以全面了解Struts2.1框架的核心特性和使用方法,这对于开发者来说是非常宝贵的资源...

    php__表单处理

    最后,当表单数据成功处理后,我们通常会通过`header()`函数重定向用户到另一个页面,防止重复提交: ```php header('Location: success.php'); exit; ``` 以上就是关于“PHP表单处理”的基本介绍。在实际开发中,...

    Struts2框架笔记

    Struts2框架提供了大量的常量供开发者配置,这些常量可以控制框架的各个方面,例如: - **struts.devMode**: 开发模式开关,开启后会提供更多调试信息。 - **struts.action.extension**: 指定Action URL的扩展名。 ...

    Struts2学习资料

    每种类型的Result都有不同的用途,例如`redirectAction`常用于防止重复提交,而`dispatcher`则用于展示动态生成的视图。 以上就是Struts2框架的基本工作原理和配置。通过理解和掌握这些概念,开发者能够有效地构建...

    JSP面试题--基础

    - **request**:封装客户端请求,包括客户端提交的所有信息。 - **response**:封装服务器响应,用于向客户端发送数据。 - **out**:用于输出数据到客户端。 - **session**:封装 HttpSession 对象,用于存储会话...

Global site tag (gtag.js) - Google Analytics