欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2018年11月27日 10:37:16   投稿:lijiao  
這篇文章主要為大家詳細(xì)介紹了Spring mvc防止數(shù)據(jù)重復(fù)提交的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

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

方法分析:

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

源碼實(shí)現(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攔截器,防止用戶(hù)重復(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}" />

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java單例模式簡(jiǎn)單介紹

    Java單例模式簡(jiǎn)單介紹

    這篇文章主要為大家詳細(xì)介紹了Java單例模式簡(jiǎn)單的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • JAVA JDK8 List分組的實(shí)現(xiàn)和用法

    JAVA JDK8 List分組的實(shí)現(xiàn)和用法

    今天小編就為大家分享一篇關(guān)于JAVA JDK8 List分組的實(shí)現(xiàn)和用法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-12-12
  • 深入理解DevOps+微服務(wù)框架

    深入理解DevOps+微服務(wù)框架

    這篇文章主要介紹了深入理解DevOps+微服務(wù),主要包括DevOps 的三大支柱之中,即人(People)、流程(Process)和平臺(tái)(Platform)的知識(shí)講解,需要的朋友可以參考下
    2022-05-05
  • 深度解析Java中CountDownLatch的原理

    深度解析Java中CountDownLatch的原理

    在高并發(fā)編程中,AbstractQueuedSynchronizer(簡(jiǎn)稱(chēng)AQS)抽象的隊(duì)列同步器是我們必須掌握的,本文將通過(guò)CountDownLatch底層實(shí)現(xiàn)原理來(lái)了解AQS共享鎖模式的實(shí)現(xiàn)原理,快跟隨小編一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • SSH框架網(wǎng)上商城項(xiàng)目第2戰(zhàn)之基本增刪查改、Service和Action的抽取

    SSH框架網(wǎng)上商城項(xiàng)目第2戰(zhàn)之基本增刪查改、Service和Action的抽取

    SSH框架網(wǎng)上商城項(xiàng)目第2戰(zhàn)之基本增刪查改、Service和Action的抽取,感興趣的小伙伴們可以參考一下
    2016-05-05
  • 全面匯總SpringBoot和SpringClould常用注解

    全面匯總SpringBoot和SpringClould常用注解

    Java注解是附加在代碼中的一些元信息,用于一些工具在編譯、運(yùn)行時(shí)進(jìn)行解析和使用,起到說(shuō)明、配置的功能,這篇文章就帶你來(lái)了解一下
    2021-08-08
  • javamail 發(fā)送郵件的實(shí)例代碼分享

    javamail 發(fā)送郵件的實(shí)例代碼分享

    今天學(xué)習(xí)了一下JavaMail,javamail發(fā)送郵件確實(shí)是一個(gè)比較麻煩的問(wèn)題。為了以后使用方便,自己寫(xiě)了段代碼,打成jar包,以方便以后使用
    2013-08-08
  • SpringBoot熱部署和整合Mybatis的過(guò)程

    SpringBoot熱部署和整合Mybatis的過(guò)程

    熱部署,就是在應(yīng)用正在運(yùn)行的時(shí)候升級(jí)軟件,卻不需要重新啟動(dòng)應(yīng)用,本文給大家詳細(xì)介紹SpringBoot熱部署和整合Mybatis的過(guò)程,感興趣的朋友跟隨小編一起看看吧
    2023-10-10
  • Java連接六類(lèi)數(shù)據(jù)庫(kù)技巧全攻略

    Java連接六類(lèi)數(shù)據(jù)庫(kù)技巧全攻略

    本文主要為大家介紹了Java與Oracle、DB2、Sql Server、Sybase、MySQL、PostgreSQL等數(shù)據(jù)庫(kù)連接的方法。
    2015-09-09
  • 解決lambda表達(dá)式內(nèi)出現(xiàn)異常無(wú)法throw拋出的問(wèn)題

    解決lambda表達(dá)式內(nèi)出現(xiàn)異常無(wú)法throw拋出的問(wèn)題

    這篇文章主要介紹了lambda表達(dá)式內(nèi)出現(xiàn)異常無(wú)法throw拋出的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09

最新評(píng)論