SpringMVC token 防止表单重复提交
来源:互联网 发布:文档拍照识别软件 编辑:程序博客网 时间:2024/04/30 22:33
一、定义注解 Token.java
@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public @interface Token { boolean save() default false; boolean remove() default false;}
二、定义token 过滤器 TokenInterceptor.java
package com.bra.common.web;import com.bra.common.web.annotation.Token;import org.springframework.web.method.HandlerMethod;import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.lang.reflect.Method;import java.util.UUID;public class TokenInterceptor extends HandlerInterceptorAdapter { @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(false).setAttribute("token", UUID.randomUUID().toString()); } boolean needRemoveSession = annotation.remove(); if (needRemoveSession) { if (isRepeatSubmit(request)) { return false; } request.getSession(false).removeAttribute("token"); } } return true; } else { return super.preHandle(request, response, handler); } } private boolean isRepeatSubmit(HttpServletRequest request) { String serverToken = (String) request.getSession(false).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; }}
三、拦截器配置 SpringMVC.xml
<mvc:interceptor><mvc:mapping path="${adminPath}/**" /><bean class="com.bra.common.web.TokenInterceptor" /></mvc:interceptor>
四、JSP
<input type="hidden" name="token" value="${token}"/>
五、Controller
1、请求表单时,生成token
@RequestMapping(value = "save") @Token(remove = true) public String save(ReserveField reserveField, Model model, RedirectAttributes redirectAttributes) throws ParseException { if (!beanValidator(model, reserveField)) { return form(reserveField, model); } reserveFieldService.save(reserveField); addMessage(redirectAttributes, "保存场地基本信息成功"); redirectAttributes.addAttribute("reserveVenue.id",reserveField.getReserveVenue().getId()); return "redirect:" + Global.getAdminPath() + "/reserve/reserveField/list"; }
2、保存时,验证token ,remove=true 表示删除同步token
@RequestMapping(value = "form") @Token(save = true) public String form(ReserveField reserveField, Model model) throws ParseException { //场地列表 List<ReserveField> fields = reserveFieldService.findList(new ReserveField()); User user=new User(); user.setUserType("7"); List<User> userList = reserveUserService.findList(user); model.addAttribute("userList", userList); model.addAttribute("reserveField", reserveField); model.addAttribute("fields", fields); model.addAttribute("venues", reserveVenueService.findList(new ReserveVenue())); model.addAttribute("projects", reserveProjectService.findList(new ReserveProject())); return "reserve/field/form"; }
0 0
- SpringMVC token 防止表单重复提交
- SpringMVC token 防止表单重复提交
- token防止表单重复提交
- token-防止表单重复提交
- springmvc中使用token来防止表单重复提交
- SpringMVC token 防止表单重复提交,加上注释,帮助理解
- springMVC中基于token防止表单重复提交
- SpringMVC 防止表单重复提交
- SpringMVC表单防止重复提交
- Springmvc表单防止重复提交
- struts2防止表单重复提交 token
- struts2之防止表单重复提交 token
- 《struts---利用Token防止表单重复提交》
- 运用session token防止表单重复提交
- session token 防止表单重复提交
- php表单加入Token防止重复提交
- structs2 防止表单的重复提交token
- <s:token/>防止表单重复提交
- 【微信支付】签名错误,参数错误
- 关于webview图片无法加载的问题?
- 转:C/C++的64位整型
- 第一次使用Android Studio时你应该知道的一切配置(三):gradle项目构建
- android一键分享功能不使用任何第三方sdk
- SpringMVC token 防止表单重复提交
- 【xv6学习之lab3】User Environment
- cvSetMouseCallback()鼠标坐标、事件返回
- Uiautomator2和Uiautomator的区别
- 自然语言处理中的Attention Model:是什么及为什么
- hdu 1160 FatMouse's Speed(最大上升子序列+路径输出)
- oracel 10G手工建库
- draggabilly一款功能强大的拖动拖拽元素插件
- iOS 自动化打包测试(使用jenkins、Tomcat、JDK实现)