`

过滤器防止重复提交

    博客分类:
  • web
 
阅读更多
java过滤器代码
import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
 * @author tai.tan
 * 用来处理重复提交过滤器
 */
public class DuplicataSubmitFilter implements Filter {

	public void destroy() {
		
	}

	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain arg2) throws IOException, ServletException {
		HttpServletRequest servletrequest = (HttpServletRequest) request;
		HttpServletResponse servletresponse = (HttpServletResponse) response;
		String clientToken = servletrequest.getParameter("token");//获取页面token值
		//页面token值为空就不用过滤
		if(clientToken==null){
			arg2.doFilter(request, response);
		}else{
			HttpSession session = servletrequest.getSession();
			String sessionToken = (String) session.getAttribute("token");//获取会话token值
			//判断页面token值是否等于会话token值,会话token值为空就是第一次提交,相等就是重复提交
			if (sessionToken != null && clientToken.equals(sessionToken)) {
				servletresponse.setContentType("text/html");
				servletresponse.setCharacterEncoding("GBK");
				//跳转到错误提示页面
				servletresponse.sendRedirect(servletrequest.getContextPath()+"/public/duplicataSubmitError.jsp");
			}else{
				session.setAttribute("token", clientToken);//把页面token值赋予会话token值
				arg2.doFilter(request, response);	
			}
		}
	}

	public void init(FilterConfig arg0) throws ServletException {
		
	}

}

在jsp的form里面添加
<input type="hidden" name="token" value="<%=System.currentTimeMillis()%>" />
分享到:
评论

相关推荐

    asp.net 页面防止重复提交

    防止重复提交对于确保数据的准确性和应用的稳定性至关重要。本文将深入探讨如何在ASP.NET环境中解决这个问题。 首先,理解问题的本质:当用户点击提交按钮两次或者由于网络延迟,浏览器可能会发送两次请求到服务器...

    token-springMVC 防止重复提交

    5. **扩展技术**:除了Token机制,还可以结合其他方法,如`HttpSessionOncePerRequestFilter`过滤器,或者利用数据库的唯一约束来防止重复提交。在分布式环境中,可以考虑使用分布式锁或者分布式令牌桶算法。 6. **...

    通过xml配置搞定Struts重复提交问题

    在Struts的配置文件(例如`struts.xml`)中,为需要防止重复提交的Action添加一个拦截器栈,包括`token`和`tokenSession`拦截器。 ```xml &lt;!-- 配置错误结果页面 --&gt; &lt;param name="includeParams"&gt;none ...

    Java怎样防止重复提交

    在Java Web开发中,防止重复提交是一个重要的议题,尤其是在大型分布式应用中,因为这可能导致服务器资源的过度消耗,甚至引发系统性能问题。以下是一些防止重复提交的常见策略和技术: 1. **令牌(Token)机制**:...

    struts2防止重复提交

    在Web开发中,防止重复提交是一项重要的任务,因为它可能导致数据的不一致性或处理逻辑的错误执行。Struts2提供了几种策略来防止表单的重复提交,确保请求的唯一性和事务的一致性。 一、令牌(Token)机制 Struts2...

    jQuery如何防止Ajax重复提交

    在Web开发中,防止Ajax重复提交是一个重要的问题,因为这能有效避免服务器处理多次相同请求,从而减轻服务器负载,防止数据异常。jQuery提供了一种优雅的方式来处理这个问题,通过使用`$.ajaxPrefilter`方法,我们...

    springboot防重复提交工具包

    9. **拦截器/过滤器**:在Spring Boot中,可以使用Spring MVC的拦截器或Filter来拦截请求,实现请求的预处理和后处理,包括防重复提交的逻辑。 10. **AOP(面向切面编程)**:通过定义切面,可以在方法执行前后添加...

    前端防止用户重复提交js实现代码示例

    需要注意的是,对于防止重复提交,无论是异步还是同步操作,都必须考虑用户的使用体验。不应该让用户感到困惑或者操作不流畅。因此,在实现上要尽量简化逻辑,避免过于复杂的用户操作,同时确保数据的准确性和一致性...

    Python-cljcbloom一个用Clojure脚本实现的跨平台布隆过滤器

    - 邮件系统:防止垃圾邮件的重复发送。 6. **性能优化**: cljc-bloom可能包含对布隆过滤器大小和哈希函数数量的优化策略,以在保证较低误报率的同时,尽可能减少空间占用。 7. **扩展性**: 由于Clojure的灵活...

    get与post乱码过滤器.zip

    通过这样的过滤器,开发者可以统一处理所有可能出现乱码的HTTP请求,避免在不同地方重复编写相同的编码转换逻辑,提高代码的可维护性和健壮性。 总结来说,这个"get与post乱码过滤器.zip"中的Java源代码提供了对...

    字符过滤字符过滤字符过滤

    在Java中,开发人员可能会创建这样的过滤器类来定义一组规则,对输入进行检查,如果发现不符合规则的字符,就进行替换、删除或抛出异常。这个类可能包含了常见的正则表达式,用于匹配和移除特定类型的字符,比如SQL...

    Asp.net Core 3.1基于AspectCore实现AOP实现事务、缓存拦截器功能

    最近想给我的框架加一种功能,就是比如给一个方法加一个事务的特性Attribute,那这个方法就会启用事务处理。给一个方法加一个缓存特性,那这个方法就会进行缓存。 这个也是网上说的面向切面编程AOP。...

    jsp实现登录验证的过滤器

    - 安全性:通过过滤器可以防止未授权的用户访问受保护的资源,提高应用的安全性。 - 统一处理:过滤器可以统一处理如登录验证、权限控制、数据校验等逻辑,避免在每个受保护的Servlet中重复这些代码。 - 易于扩展...

    Laravel开发-cookie-csrf

    对于防止重复提交,可以在提交成功后清除或改变表单的提交标识,如设置一个session变量,或者在数据库中记录已提交的状态。 对于跨域问题,Laravel的`VerifyCsrfToken`中间件默认只允许同源请求,但可以通过修改...

    Struts2配置详解

    拦截器可以实现诸如防止表单重复提交等功能。 - **Action执行**:通过拦截器后,Action开始执行其业务逻辑。 - **结果加载**:Action执行完成后,ActionInvocation使用`Result`加载响应,可以是JSP、PDF、XML等...

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

    Java表单提交中文乱码问题是一个常见的开发中遇到的困扰,尤其在处理用户...通过设置页面编码、请求编码,以及利用过滤器等手段,可以有效地防止和解决乱码问题。在实际开发中,应根据项目需求和环境选择合适的方法。

    struts2_工作流程

    - **TokenInterceptor**:防止表单重复提交。 - **TokenSessionInterceptor**:处理与会话相关的令牌。 理解Struts2的工作流程和拦截器机制对于开发高效的MVC应用至关重要,因为它允许开发者通过拦截器进行定制化...

    Struts2知识点总结

    防止表单重复提交是Web开发中的一个重要功能,为了避免重复提交造成的数据重复或错误,Struts2同样提供拦截器实现这一功能。可以配置token拦截器来为每个请求生成一个令牌(token),并将这个令牌存储在客户端。提交...

    学生信息注册代码

    过滤器的使用增强了系统的安全性,并且可以实现通用的处理逻辑,而不需要在每个请求处理方法中重复编写代码。 在过滤器验证通过后,用户的输入会被传递到服务器端进行进一步处理。这部分可能涉及到JavaBean,...

Global site tag (gtag.js) - Google Analytics