解决SpringMVC表单重复提交总结
来源:互联网 发布:排序算法比较次数 编辑:程序博客网 时间:2024/05/23 00:29
1.表单加添加隐藏域
<input type="hidden" name="token" value="${token}" id="token"/>
2.编写Annotation
package cn.zzu.wcj.interceptor.token;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public @interface Token { boolean save() default false; boolean remove() default false;}
3.编写Inteceptor
package cn.zzu.wcj.interceptor;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;import cn.zzu.wcj.interceptor.token.Token;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; }}
4.在SpringMVC配置文件中注册Interceptor
<mvc:interceptors> <!-- 配置Token拦截器,防止用户重复提交数据 --> <mvc:interceptor> <!--拦截所有得URL--> <mvc:mapping path="/**"/> <!--拦截器路径--> <bean class="cn.zzu.wcj.interceptor.TokenInterceptor"/> </mvc:interceptor> </mvc:interceptors>
Tips:在使用Ajax提交表单时注意获取隐藏域<input type="hidden" name="token" value="${token}" id="token"/>
的值作为参数传递到后台.
0 0
- 解决SpringMVC表单重复提交总结
- 解决表单重复提交
- 解决表单重复提交
- 解决表单重复提交
- 解决表单重复提交
- 解决重复提交表单
- SpringMVC 防止表单重复提交
- SpringMVC表单防止重复提交
- Springmvc表单防止重复提交
- springmvc表单防重复提交
- Struts2解决表单重复提交
- 解决表单重复提交问题
- 解决表单重复提交1
- 解决表单重复提交问题
- 解决表单重复提交问题
- springmvc之表单重复提交问题
- SpringMVC避免表单的重复提交解决办法
- SpringMVC token 防止表单重复提交
- 洛谷 P1019 [NOIP2000 T3] 单词接龙
- opencv学习(二)之图像的加载、显示、保存
- ECMAScript6笔记:let和const命令
- LoRa点对点系统3 与PC接口
- Android Studio 导入.so文件
- 解决SpringMVC表单重复提交总结
- 新的开始
- 彻底关闭win10后台同步数据
- 关于ajax返回值读取的问题
- 经典算法研究系列:九之续、sift算法的编译与实现
- 压力测试——测试MySQL
- ADB授权原理
- 使用Android的draw9patch制作点9图
- 用一部极客电影让你感受互联网科技的潜力