国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > Java > 正文

Spring mvc防止數(shù)據(jù)重復(fù)提交的方法

2024-07-14 08:42:58
字體:
供稿:網(wǎng)友

本文實例為大家分享了Spring mvc如何防止數(shù)據(jù)重復(fù)提交,供大家參考,具體內(nèi)容如下

方法分析:

這里使用的防止數(shù)據(jù)重復(fù)提交的方法是使用token,給所有的url加一個攔截器,在攔截器里面用java的UUID生成一個隨機的UUID并把這個UUID放到session里面,然后在瀏覽器做數(shù)據(jù)提交的時候?qū)⒋薝UID提交到服務(wù)器。服務(wù)器在接收到此UUID后,檢查一下該UUID是否已經(jīng)被提交,如果已經(jīng)被提交,則不讓邏輯繼續(xù)執(zhí)行下去。

源碼實現(xiàn):

注解Token代碼:

@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public @interface Token {  boolean save() default false;  boolean remove() default false;}

攔截器TokenInterceptor代碼:

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;  }}

Spring MVC的配置文件:

<!-- 攔截器配置 -->  <mvc:interceptors>    <!-- 配置Token攔截器,防止用戶重復(fù)提交數(shù)據(jù) -->    <mvc:interceptor>      <mvc:mapping path="/**"/>      <bean class="com.storezhang.web.spring.TokenInterceptor"/>    </mvc:interceptor></mvc:interceptors>

使用方法:

1、在需要生成token的controller上增加@Token(save=true); 
2、而在需要檢查重復(fù)提交的controller上添加@Token(remove=true)就可以了。

另外,你需要在view里在form里增加下面代碼:

<input type="hidden" name="token" value="${token}" />

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持VeVb武林網(wǎng)。


注:相關(guān)教程知識閱讀請移步到JAVA教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 盐池县| 石楼县| 漳平市| 东港市| 德清县| 襄垣县| 蒙阴县| 静安区| 离岛区| 米易县| 深州市| 恩施市| 昂仁县| 翁牛特旗| 郎溪县| 邯郸县| 台安县| 育儿| 凭祥市| 绥江县| 阜南县| 芜湖市| 延川县| 江西省| 吉木萨尔县| 紫阳县| 乐安县| 曲靖市| 双江| 吴桥县| 盱眙县| 泌阳县| 获嘉县| 马山县| 夏津县| 清徐县| 虎林市| 汕尾市| 维西| 金华市| 司法|