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域,提交表單時需要傳過去。
相關文章
- spring mvc 表單提交 亂碼SpringMVC
- PHP 防止表單重複提交PHP
- jFinal避免表單重複提交
- 防止表單重複提交的程式碼
- 關於ajax提交表單,重複提交解決方法
- PHP防止使用者重複提交表單PHP
- 防止表單重複提交的幾種策略
- 解決表單重複提交的問題
- PHP防止表單重複提交的解決方法PHP
- 前臺防止表單重複提交的方法。Jquery、jsjQueryJS
- AJAX防重複提交的辦法總結
- 專案分享七:客戶端防止表單重複提交客戶端
- 為何我用spring mvc獲取不到表單提交資料?SpringMVC
- PHP透過session判斷防止表單重複提交例項PHPSession
- SpringMVC後臺token防重複提交解決方案SpringMVC
- PHP 防抖(防重複提交)有哪些實現方法,具體程式碼PHP
- 簡單介紹redis分散式鎖解決表單重複提交的問題Redis分散式
- 防止表單提交按鈕重複點選現象程式碼例項
- 分散式重複提交分散式
- axios 重複提交iOS
- asp.net防重新整理重複提交、防後退www.yingtaowu.cnASP.NET
- WEB安全新玩法 [8] 阻止訂單重複提交Web
- Asp.Net Mvc5表單提交之List集合ASP.NETMVC
- js 防止重複提交方案JS
- **PHP分步表單提交思路(分頁表單提交)PHP
- 架構設計 | 介面冪等性原則,防重複提交Token管理架構
- 前端如何防止介面重複提交前端
- php表單提交PHP
- javascript提交表單JavaScript
- Spring3MVC提交彈出視窗表單後,自動返回父視窗的列表頁面SpringMVC
- ASP.NET MVC 第五個預覽版和表單提交場景ASP.NETMVC
- 重複提交,你是如何處理的?
- 前端防止使用者重複提交-js前端JS
- jquery防止重複提交程式碼例項jQuery
- Spring Boot + Redis 解決陪玩平臺原始碼重複提交問題Spring BootRedis原始碼
- vue+elementUI 複雜表單的驗證、資料提交方案VueUI
- Spring MVC 檔案上傳、Restful、表單校驗框架SpringMVCREST框架
- JavaWeb——驗證碼功能解決表單重複提交問題(使用谷歌驗證碼jar包為例)JavaWeb谷歌JAR