zygod
2016-09-29 10:58:30
spring mvc防止表单重复提交的代码片段
1.定义一个token接口
package com.bigbigrain.token; import java.lang.annotation.Documented; import java.lang.annotation.Retention; import java.lang.annotation.Target; import java.lang.annotation.ElementType; import java.lang.annotation.RetentionPolicy; @Target({ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface Token { boolean save() default false; boolean remove() default false; }
2.实现拦截器
package com.bigbigrain.token; import java.lang.reflect.Method; import java.util.UUID; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; import org.springframework.web.method.HandlerMethod; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; public class TokenInterceptor extends HandlerInterceptorAdapter { private static final Logger LOG = Logger.getLogger(Token.class); @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(true).setAttribute("token", UUID.randomUUID().toString()); } boolean needRemoveSession = annotation.remove(); if (needRemoveSession) { if (isRepeatSubmit(request)) { LOG.warn("please don't repeat submit,url:"+ request.getServletPath()); return false; } request.getSession(true).removeAttribute("token"); } } return true; } else { return super.preHandle(request, response, handler); } } private boolean isRepeatSubmit(HttpServletRequest request) { String serverToken = (String) request.getSession(true).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; } }
3.配置文件配置
~<!-- 拦截器配置 -->
<mvc:interceptors>
<!-- 配置Token拦截器,防止用户重复提交数据 -->
<mvc:interceptor>
<mvc:mapping path="/**"/><!--这个地方时你要拦截得路径 我这个意思是拦截所有得URL-->
<bean class="com.dinfo.interceptor.TokenInterceptor"/><!--class文件路径改成你自己写得拦截器路径!! -->
</mvc:interceptor>
</mvc:interceptors>
4.在跳转需要生成token页面的controller的方法加上注解~@Token(save=true);页面加上~<input type="hidden" name="token" value="${token}" />;在页面提交处理方法上加上~@Token(remove=true)注解
===========》》》》》飞奔吧骚年
猜你喜欢
- java防止表单重复提交代码
- springmvc @RequestMapping注解的入门配置教程
- 基于浏览器首选语言的springmvc和freemarker国际化配置的实现
- 基于maven与springMVC的拦截器Interceptor,控制器Controller的使用
- Spring MVC框架实现提交简易信息的JavaWeb项目
- springmvc @RequestMapping注解伪静态技术
- SpringMVC的三种统一异常处理实例代码分享
- SpringMVC整合Redis demo小例子
- bootstrap jquery underscore backbone 新浪微博 springmvc整合demo代码
- SpringMvc从propertites属性文件读取常量
- java Web SpringMVC项目实现12306余票查询功能
- spring mvc-showcase,便于学习springmvc,maven工程,建议使用谷歌浏览器
请下载代码后再发表评论
相关代码
- 证精 基于浏览器首选语言的springmvc和freemarker国际化配置的实现
- 原 基于maven与springMVC的拦截器Interceptor,控制器Controller的使用
- springmvc @RequestMapping注解的入门配置教程
- 精 SpringMVC的三种统一异常处理实例代码分享
- 证精 bootstrap jquery underscore backbone 新浪微博 springmvc整合demo代码
- 精 spring mvc-showcase,便于学习springmvc,maven工程,建议使用谷歌浏览器
- 原证精 springmvc @RequestMapping注解伪静态技术
- 原 springMVC注解与hibernate完美结合完成基本的增删改查demo源码下载
- 原 SpringMVC整合Redis demo小例子
- 原证精 java Web SpringMVC项目实现12306余票查询功能
- 原证 springmvc开发微信公众平台验证token接口教程及其java源代码分享
- 原 SpringMvc整合Mybatis搭建java Web入门项目实例,是基于MAVEN的java web工程
最近下载
最近浏览
xiaoxiexie LV13
2022年11月13日
gshnlj LV15
2022年5月13日
866521 LV2
2020年10月20日
小乞儿 LV7
2020年8月8日
Misshuang LV13
2020年6月9日
哈哈zr LV11
2020年5月11日
dgdhfgvjhbj LV2
2020年1月6日
hehe264 LV20
2020年1月6日
至恶咕哒子 LV7
2019年12月25日
wjm777777 LV1
2019年12月2日