Spring MVC表單防重複提交
利用Spring MVC的過濾器及token傳遞驗證來實現表單防重複提交。
建立註解
@Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface Token { boolean create() default false; boolean remove() default false; }
在跳轉頁面的方法上加上:@Token(create = true)\在提交的action方法上加上:@Token(remove = true)
建立過濾器
public class TokenInterceptor extends HandlerInterceptorAdapter { private Logger logger = Logger.getLogger(TokenInterceptor.class); private static final String TOKEN = "token"; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { if (handler instanceof HandlerMethod) { Method method = ((HandlerMethod) handler).getMethod(); Token annotation = method.getAnnotation(Token.class); if (annotation != null) { HttpSession session = request.getSession(); // 建立token boolean create = annotation.create(); if (create) { session.setAttribute(TOKEN, UUID.randomUUID().toString()); return true; } // 刪除token boolean remove = annotation.remove(); if (remove) { if (isRepeatSubmit(request)) { logger.warn("表單不能重複提交:" + request.getRequestURL()); return false; } session.removeAttribute(TOKEN); } } } else { return super.preHandle(request, response, handler); } return true; } private boolean isRepeatSubmit(HttpServletRequest request) { String token = (String) request.getSession().getAttribute(TOKEN); if (token == null) { return true; } String reqToken = request.getParameter(TOKEN); if (reqToken == null) { return true; } if (!token.equals(reqToken)) { return true; } return false; } }
配置攔截器
<!--配置攔截器 --> <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**" /> <bean class="com.example.web.interceptor.TokenInterceptor"/> </mvc:interceptor> </mvc:interceptors>
表單新增token
<input type="hidden" id="token" name="token" value="$!{session.getAttribute('token')}"/>
在form表單裡面新增token域,提交表單時需要傳過去。
相關文章
- jFinal避免表單重複提交
- PHP 防止表單重複提交PHP
- java 表單避免重複提交?Java
- 如何避免表單的重複提交?
- Struts2防止表單重複提交
- PHP防止使用者重複提交表單PHP
- 【java工程師必知必會】spring防重複提交AOP方式Java工程師Spring
- SpringMVC後臺token防重複提交解決方案SpringMVC
- PHP透過session判斷防止表單重複提交例項PHPSession
- axios 重複提交iOS
- 簡單介紹redis分散式鎖解決表單重複提交的問題Redis分散式
- PHP 防抖(防重複提交)有哪些實現方法,具體程式碼PHP
- Asp.Net Mvc5表單提交之List集合ASP.NETMVC
- 分散式重複提交分散式
- WEB安全新玩法 [8] 阻止訂單重複提交Web
- 如何防止使用者重複提交訂單?(上)
- 如何防止使用者重複提交訂單?(下)
- 如何防止使用者重複提交訂單?(中)
- js 防止重複提交方案JS
- 提交表單
- 架構設計 | 介面冪等性原則,防重複提交Token管理架構
- 前端如何防止介面重複提交前端
- Spring MVC 檔案上傳、Restful、表單校驗框架SpringMVCREST框架
- SpringBoot如何防止重複提交?- Adrian AdendrataSpring Boot
- Spring Boot + Redis 解決陪玩平臺原始碼重複提交問題Spring BootRedis原始碼
- form表單提交方式ORM
- Spring MVC from 表單接收二維陣列的問題SpringMVC陣列
- Spring Boot(三):RestTemplate提交表單資料的三種方法Spring BootREST
- vue+elementUI 複雜表單的驗證、資料提交方案VueUI
- 重複提交,你是如何處理的?
- 前端防止使用者重複提交-js前端JS
- JavaWeb——驗證碼功能解決表單重複提交問題(使用谷歌驗證碼jar包為例)JavaWeb谷歌JAR
- js表單檔案提交JS
- Ajax 提交表單資料
- 《最佳化介面設計的思路》系列:第六篇—介面防抖(防重複提交)的一些方式
- ASP.NET MVC/Core表單提交後臺模型二級屬性驗證問題ASP.NETMVC模型
- form表單提交注意事項ORM
- spring - mvcSpringMVC