国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

二哥:Java 防止重復(fù)提交最簡(jiǎn)單的方案是什么?

共 10660字,需瀏覽 22分鐘

 ·

2020-10-14 11:22

有位朋友,某天突然問(wèn)二哥:在 Java 中,防止重復(fù)提交最簡(jiǎn)單的方案是什么?

這句話中包含了兩個(gè)關(guān)鍵信息,第一:防止重復(fù)提交;第二:最簡(jiǎn)單。

于是二哥問(wèn)他,是單機(jī)環(huán)境還是分布式環(huán)境?

得到的反饋是單機(jī)環(huán)境,那就簡(jiǎn)單了,于是二哥就開(kāi)始裝*了。

話不多說(shuō),我們先來(lái)復(fù)現(xiàn)這個(gè)問(wèn)題。

模擬用戶場(chǎng)景

根據(jù)朋友的反饋,大致的場(chǎng)景是這樣的,如下圖所示:

簡(jiǎn)化的模擬代碼如下(基于 Spring Boot):

import?org.springframework.web.bind.annotation.RequestMapping;
import?org.springframework.web.bind.annotation.RestController;

@RequestMapping("/user")
@RestController
public?class?UserController?{
???/**
?????*?被重復(fù)請(qǐng)求的方法
?????*/

????@RequestMapping("/add")
????public?String?addUser(String?id)?{
????????//?業(yè)務(wù)代碼...
????????System.out.println("添加用戶ID:"?+?id);
????????return?"執(zhí)行成功!";
????}
}

于是二哥就想到:通過(guò)前、后端分別攔截的方式來(lái)解決數(shù)據(jù)重復(fù)提交的問(wèn)題。

前端攔截

前端攔截是指通過(guò) HTML 頁(yè)面來(lái)攔截重復(fù)請(qǐng)求,比如在用戶點(diǎn)擊完“提交”按鈕后,我們可以把按鈕設(shè)置為不可用或者隱藏狀態(tài)。

執(zhí)行效果如下圖所示:

前端攔截的實(shí)現(xiàn)代碼:

<html>
<script>
????function?subCli(){
????????//?按鈕設(shè)置為不可用
????????document.getElementById("btn_sub").disabled="disabled";
????????document.getElementById("dv1").innerText?=?"按鈕被點(diǎn)擊了~";
????}
script>
<body?style="margin-top:?100px;margin-left:?100px;">
????<input?id="btn_sub"?type="button"??value="?提?交?"??onclick="subCli()">
????<div?id="dv1"?style="margin-top:?80px;">div>
body>
html>

但前端攔截有一個(gè)致命的問(wèn)題,如果是懂行的程序員或非法用戶可以直接繞過(guò)前端頁(yè)面,通過(guò)模擬請(qǐng)求來(lái)重復(fù)提交請(qǐng)求,比如充值了 100 元,重復(fù)提交了 10 次變成了 1000 元(瞬間發(fā)現(xiàn)了一個(gè)致富的好辦法)。

所以除了前端攔截一部分正常的誤操作之外,后端的攔截也是必不可少。

后端攔截

后端攔截的實(shí)現(xiàn)思路是在方法執(zhí)行之前,先判斷此業(yè)務(wù)是否已經(jīng)執(zhí)行過(guò),如果執(zhí)行過(guò)則不再執(zhí)行,否則就正常執(zhí)行。

我們將請(qǐng)求的業(yè)務(wù) ID 存儲(chǔ)在內(nèi)存中,并且通過(guò)添加互斥鎖來(lái)保證多線程下的程序執(zhí)行安全,大體實(shí)現(xiàn)思路如下圖所示:

然而,將數(shù)據(jù)存儲(chǔ)在內(nèi)存中,最簡(jiǎn)單的方法就是使用 HashMap?存儲(chǔ),或者是使用 Guava Cache 也是同樣的效果,但很顯然 HashMap?可以更快的實(shí)現(xiàn)功能,所以我們先來(lái)實(shí)現(xiàn)一個(gè) HashMap 的防重(防止重復(fù))版本。

1.基礎(chǔ)版——HashMap

import?org.springframework.web.bind.annotation.RequestMapping;
import?org.springframework.web.bind.annotation.RestController;

import?java.util.HashMap;
import?java.util.Map;

/**
?*?普通?Map?版本
?*/

@RequestMapping("/user")
@RestController
public?class?UserController3?{

????//?緩存?ID?集合
????private?Map?reqCache?=?new?HashMap<>();

????@RequestMapping("/add")
????public?String?addUser(String?id)?{
????????//?非空判斷(忽略)...
????????synchronized?(this.getClass())?{
????????????//?重復(fù)請(qǐng)求判斷
????????????if?(reqCache.containsKey(id))?{
????????????????//?重復(fù)請(qǐng)求
????????????????System.out.println("請(qǐng)勿重復(fù)提交?。。??+?id);
????????????????return?"執(zhí)行失敗";
????????????}
????????????//?存儲(chǔ)請(qǐng)求?ID
????????????reqCache.put(id,?1);
????????}
????????//?業(yè)務(wù)代碼...
????????System.out.println("添加用戶ID:"?+?id);
????????return?"執(zhí)行成功!";
????}
}

實(shí)現(xiàn)效果如下圖所示:

存在的問(wèn)題:此實(shí)現(xiàn)方式有一個(gè)致命的問(wèn)題,因?yàn)?HashMap?是無(wú)限增長(zhǎng)的,因此它會(huì)占用越來(lái)越多的內(nèi)存,并且隨著 HashMap?數(shù)量的增加查找的速度也會(huì)降低,所以我們需要實(shí)現(xiàn)一個(gè)可以自動(dòng)“清除”過(guò)期數(shù)據(jù)的實(shí)現(xiàn)方案。

2.優(yōu)化版——固定大小的數(shù)組

此版本解決了 HashMap?無(wú)限增長(zhǎng)的問(wèn)題,它使用數(shù)組加下標(biāo)計(jì)數(shù)器(reqCacheCounter)的方式,實(shí)現(xiàn)了固定數(shù)組的循環(huán)存儲(chǔ)。

當(dāng)數(shù)組存儲(chǔ)到最后一位時(shí),將數(shù)組的存儲(chǔ)下標(biāo)設(shè)置 0,再?gòu)念^開(kāi)始存儲(chǔ)數(shù)據(jù),實(shí)現(xiàn)代碼如下:

import?org.springframework.web.bind.annotation.RequestMapping;
import?org.springframework.web.bind.annotation.RestController;

import?java.util.Arrays;

@RequestMapping("/user")
@RestController
public?class?UserController?{

????private?static?String[]?reqCache?=?new?String[100];?//?請(qǐng)求?ID?存儲(chǔ)集合
????private?static?Integer?reqCacheCounter?=?0;?//?請(qǐng)求計(jì)數(shù)器(指示?ID?存儲(chǔ)的位置)

????@RequestMapping("/add")
????public?String?addUser(String?id)?{
????????//?非空判斷(忽略)...
????????synchronized?(this.getClass())?{
????????????//?重復(fù)請(qǐng)求判斷
????????????if?(Arrays.asList(reqCache).contains(id))?{
????????????????//?重復(fù)請(qǐng)求
????????????????System.out.println("請(qǐng)勿重復(fù)提交!??!"?+?id);
????????????????return?"執(zhí)行失敗";
????????????}
????????????//?記錄請(qǐng)求?ID
????????????if?(reqCacheCounter?>=?reqCache.length)?reqCacheCounter?=?0;?//?重置計(jì)數(shù)器
????????????reqCache[reqCacheCounter]?=?id;?//?將?ID?保存到緩存
????????????reqCacheCounter++;?//?下標(biāo)往后移一位
????????}
????????//?業(yè)務(wù)代碼...
????????System.out.println("添加用戶ID:"?+?id);
????????return?"執(zhí)行成功!";
????}
}

3.擴(kuò)展版——雙重檢測(cè)鎖(DCL)

上一種實(shí)現(xiàn)方法將判斷和添加業(yè)務(wù),都放入 synchronized?中進(jìn)行加鎖操作,這樣顯然性能不是很高,于是我們可以使用單例中著名的 DCL(Double Checked Locking,雙重檢測(cè)鎖)來(lái)優(yōu)化代碼的執(zhí)行效率,實(shí)現(xiàn)代碼如下:

import?org.springframework.web.bind.annotation.RequestMapping;
import?org.springframework.web.bind.annotation.RestController;

import?java.util.Arrays;

@RequestMapping("/user")
@RestController
public?class?UserController?{

????private?static?String[]?reqCache?=?new?String[100];?//?請(qǐng)求?ID?存儲(chǔ)集合
????private?static?Integer?reqCacheCounter?=?0;?//?請(qǐng)求計(jì)數(shù)器(指示?ID?存儲(chǔ)的位置)

????@RequestMapping("/add")
????public?String?addUser(String?id)?{
????????//?非空判斷(忽略)...
????????//?重復(fù)請(qǐng)求判斷
????????if?(Arrays.asList(reqCache).contains(id))?{
????????????//?重復(fù)請(qǐng)求
????????????System.out.println("請(qǐng)勿重復(fù)提交?。?!"?+?id);
????????????return?"執(zhí)行失敗";
????????}
????????synchronized?(this.getClass())?{
????????????//?雙重檢查鎖(DCL,double?checked?locking)提高程序的執(zhí)行效率
????????????if?(Arrays.asList(reqCache).contains(id))?{
????????????????//?重復(fù)請(qǐng)求
????????????????System.out.println("請(qǐng)勿重復(fù)提交!?。??+?id);
????????????????return?"執(zhí)行失敗";
????????????}
????????????//?記錄請(qǐng)求?ID
????????????if?(reqCacheCounter?>=?reqCache.length)?reqCacheCounter?=?0;?//?重置計(jì)數(shù)器
????????????reqCache[reqCacheCounter]?=?id;?//?將?ID?保存到緩存
????????????reqCacheCounter++;?//?下標(biāo)往后移一位
????????}
????????//?業(yè)務(wù)代碼...
????????System.out.println("添加用戶ID:"?+?id);
????????return?"執(zhí)行成功!";
????}
}

注意:DCL 適用于重復(fù)提交頻繁比較高的業(yè)務(wù)場(chǎng)景,對(duì)于相反的業(yè)務(wù)場(chǎng)景下 DCL 并不適用。

4.完善版——LRUMap

上面的代碼基本已經(jīng)實(shí)現(xiàn)了重復(fù)數(shù)據(jù)的攔截,但顯然不夠簡(jiǎn)潔和優(yōu)雅,比如下標(biāo)計(jì)數(shù)器的聲明和業(yè)務(wù)處理等,但值得慶幸的是 Apache 為我們提供了一個(gè) commons-collections 的框架,里面有一個(gè)非常好用的數(shù)據(jù)結(jié)構(gòu) LRUMap?可以保存指定數(shù)量的固定的數(shù)據(jù),并且它會(huì)按照 LRU 算法,幫你清除最不常用的數(shù)據(jù)。

小貼士:LRU 是 Least Recently Used 的縮寫(xiě),即最近最少使用,是一種常用的數(shù)據(jù)淘汰算法,選擇最近最久未使用的數(shù)據(jù)予以淘汰。

首先,我們先來(lái)添加 Apache commons collections 的引用:

?

<dependency>
??<groupId>org.apache.commonsgroupId>
??<artifactId>commons-collections4artifactId>
??<version>4.4version>
dependency>

實(shí)現(xiàn)代碼如下:

import?org.apache.commons.collections4.map.LRUMap;
import?org.springframework.web.bind.annotation.RequestMapping;
import?org.springframework.web.bind.annotation.RestController;

@RequestMapping("/user")
@RestController
public?class?UserController?{

????//?最大容量?100?個(gè),根據(jù)?LRU?算法淘汰數(shù)據(jù)的?Map?集合
????private?LRUMap?reqCache?=?new?LRUMap<>(100);

????@RequestMapping("/add")
????public?String?addUser(String?id)?{
????????//?非空判斷(忽略)...
????????synchronized?(this.getClass())?{
????????????//?重復(fù)請(qǐng)求判斷
????????????if?(reqCache.containsKey(id))?{
????????????????//?重復(fù)請(qǐng)求
????????????????System.out.println("請(qǐng)勿重復(fù)提交!??!"?+?id);
????????????????return?"執(zhí)行失敗";
????????????}
????????????//?存儲(chǔ)請(qǐng)求?ID
????????????reqCache.put(id,?1);
????????}
????????//?業(yè)務(wù)代碼...
????????System.out.println("添加用戶ID:"?+?id);
????????return?"執(zhí)行成功!";
????}
}

使用了 LRUMap 之后,代碼顯然簡(jiǎn)潔了很多。

5.最終版——封裝

以上都是方法級(jí)別的實(shí)現(xiàn)方案,然而在實(shí)際的業(yè)務(wù)中,我們可能有很多的方法都需要防重,那么接下來(lái)我們就來(lái)封裝一個(gè)公共的方法,以供所有類使用:

import?org.apache.commons.collections4.map.LRUMap;

/**
?*?冪等性判斷
?*/

public?class?IdempotentUtils?{

????//?根據(jù)?LRU(Least?Recently?Used,最近最少使用)算法淘汰數(shù)據(jù)的?Map?集合,最大容量?100?個(gè)
????private?static?LRUMap?reqCache?=?new?LRUMap<>(100);

????/**
?????*?冪等性判斷
?????*?@return
?????*/

????public?static?boolean?judge(String?id,?Object?lockClass)?{
????????synchronized?(lockClass)?{
????????????//?重復(fù)請(qǐng)求判斷
????????????if?(reqCache.containsKey(id))?{
????????????????//?重復(fù)請(qǐng)求
????????????????System.out.println("請(qǐng)勿重復(fù)提交!??!"?+?id);
????????????????return?false;
????????????}
????????????//?非重復(fù)請(qǐng)求,存儲(chǔ)請(qǐng)求?ID
????????????reqCache.put(id,?1);
????????}
????????return?true;
????}
}

調(diào)用代碼如下:

import?com.example.idempote.util.IdempotentUtils;
import?org.springframework.web.bind.annotation.RequestMapping;
import?org.springframework.web.bind.annotation.RestController;

@RequestMapping("/user")
@RestController
public?class?UserController4?{
????@RequestMapping("/add")
????public?String?addUser(String?id)?{
????????//?非空判斷(忽略)...
????????//?--------------?冪等性調(diào)用(開(kāi)始)?--------------
????????if?(!IdempotentUtils.judge(id,?this.getClass()))?{
????????????return?"執(zhí)行失敗";
????????}
????????//?--------------?冪等性調(diào)用(結(jié)束)?--------------
????????//?業(yè)務(wù)代碼...
????????System.out.println("添加用戶ID:"?+?id);
????????return?"執(zhí)行成功!";
????}
}

小貼士:一般情況下代碼寫(xiě)到這里就結(jié)束了,但想要更簡(jiǎn)潔也是可以實(shí)現(xiàn)的,你可以通過(guò)自定義注解,將業(yè)務(wù)代碼寫(xiě)到注解中,需要調(diào)用的方法只需要寫(xiě)一行注解就可以防止數(shù)據(jù)重復(fù)提交了,老鐵們可以自行嘗試一下(需要磊哥擼一篇的,評(píng)論區(qū)留言 666)。

擴(kuò)展知識(shí)——LRUMap 實(shí)現(xiàn)原理分析

既然 LRUMap?如此強(qiáng)大,我們就來(lái)看看它是如何實(shí)現(xiàn)的。

LRUMap 的本質(zhì)是持有頭結(jié)點(diǎn)的環(huán)回雙鏈表結(jié)構(gòu),它的存儲(chǔ)結(jié)構(gòu)如下:

AbstractLinkedMap.LinkEntry?entry;

當(dāng)調(diào)用查詢方法時(shí),會(huì)將使用的元素放在雙鏈表 header 的前一個(gè)位置,源碼如下:

public?V?get(Object?key,?boolean?updateToMRU)?{
????LinkEntry?entry?=?this.getEntry(key);
????if?(entry?==?null)?{
????????return?null;
????}?else?{
????????if?(updateToMRU)?{
????????????this.moveToMRU(entry);
????????}

????????return?entry.getValue();
????}
}
protected?void?moveToMRU(LinkEntry?entry)?{
????if?(entry.after?!=?this.header)?{
????????++this.modCount;
????????if?(entry.before?==?null)?{
????????????throw?new?IllegalStateException("Entry.before?is?null.?This?should?not?occur?if?your?keys?are?immutable,?and?you?have?used?synchronization?properly.");
????????}

????????entry.before.after?=?entry.after;
????????entry.after.before?=?entry.before;
????????entry.after?=?this.header;
????????entry.before?=?this.header.before;
????????this.header.before.after?=?entry;
????????this.header.before?=?entry;
????}?else?if?(entry?==?this.header)?{
????????throw?new?IllegalStateException("Can't?move?header?to?MRU?This?should?not?occur?if?your?keys?are?immutable,?and?you?have?used?synchronization?properly.");
????}

}

如果新增元素時(shí),容量滿了就會(huì)移除 header 的后一個(gè)元素,添加源碼如下:

?protected?void?addMapping(int?hashIndex,?int?hashCode,?K?key,?V?value)?{
?????//?判斷容器是否已滿?
?????if?(this.isFull())?{
?????????LinkEntry?reuse?=?this.header.after;
?????????boolean?removeLRUEntry?=?false;
?????????if?(!this.scanUntilRemovable)?{
?????????????removeLRUEntry?=?this.removeLRU(reuse);
?????????}?else?{
?????????????while(reuse?!=?this.header?&&?reuse?!=?null)?{
?????????????????if?(this.removeLRU(reuse))?{
?????????????????????removeLRUEntry?=?true;
?????????????????????break;
?????????????????}
?????????????????reuse?=?reuse.after;
?????????????}
?????????????if?(reuse?==?null)?{
?????????????????throw?new?IllegalStateException("Entry.after=null,?header.after="?+?this.header.after?+?"?header.before="?+?this.header.before?+?"?key="?+?key?+?"?value="?+?value?+?"?size="?+?this.size?+?"?maxSize="?+?this.maxSize?+?"?This?should?not?occur?if?your?keys?are?immutable,?and?you?have?used?synchronization?properly.");
?????????????}
?????????}
?????????if?(removeLRUEntry)?{
?????????????if?(reuse?==?null)?{
?????????????????throw?new?IllegalStateException("reuse=null,?header.after="?+?this.header.after?+?"?header.before="?+?this.header.before?+?"?key="?+?key?+?"?value="?+?value?+?"?size="?+?this.size?+?"?maxSize="?+?this.maxSize?+?"?This?should?not?occur?if?your?keys?are?immutable,?and?you?have?used?synchronization?properly.");
?????????????}
?????????????this.reuseMapping(reuse,?hashIndex,?hashCode,?key,?value);
?????????}?else?{
?????????????super.addMapping(hashIndex,?hashCode,?key,?value);
?????????}
?????}?else?{
?????????super.addMapping(hashIndex,?hashCode,?key,?value);
?????}
?}

判斷容量的源碼:

public?boolean?isFull()?{
??return?size?>=?maxSize;
}

容量未滿就直接添加數(shù)據(jù):

super.addMapping(hashIndex,?hashCode,?key,?value);

如果容量滿了,就調(diào)用 reuseMapping 方法使用 LRU 算法對(duì)數(shù)據(jù)進(jìn)行清除。

綜合來(lái)說(shuō):LRUMap 的本質(zhì)是持有頭結(jié)點(diǎn)的環(huán)回雙鏈表結(jié)構(gòu),當(dāng)使用元素時(shí),就將該元素放在雙鏈表 header 的前一個(gè)位置,在新增元素時(shí),如果容量滿了就會(huì)移除 header 的后一個(gè)元素。

總結(jié)

本文講了防止數(shù)據(jù)重復(fù)提交的 6 種方法,首先是前端的攔截,通過(guò)隱藏和設(shè)置按鈕的不可用來(lái)屏蔽正常操作下的重復(fù)提交。但為了避免非正常渠道的重復(fù)提交,我們又實(shí)現(xiàn)了 5 個(gè)版本的后端攔截:HashMap 版、固定數(shù)組版、雙重檢測(cè)鎖的數(shù)組版、LRUMap 版和 LRUMap 的封裝版。

------------------

公眾號(hào):沉默王二
這是一枚沉默但有趣的程序員,你知道,他的文章風(fēng)趣幽默,讀起來(lái)就好像花錢(qián)一樣爽快。

長(zhǎng)按下圖二維碼關(guān)注,你將感受到一個(gè)有趣的靈魂,且每篇文章都有干貨。

------------------


如果覺(jué)得文章有點(diǎn)用的話,請(qǐng)毫不留情地素質(zhì)四連吧,分享、點(diǎn)贊、在看、留言,隨你便,這將是我寫(xiě)作更多優(yōu)質(zhì)文章的最強(qiáng)動(dòng)力!

瀏覽 65
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)
評(píng)論
圖片
表情
推薦
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 日本成人免费| 免费操逼网址| 无码人妻丰满熟妇区蜜桃| 天天做天天爱天天高潮| 国产一级婬乱A片| 成人区精品一区二区婷婷| 亚洲最新无码视频| 成人性爱在线| 日韩一区二区AV| 国产男女AV| 精品91美女| 影音先锋成人无码| av中文在线| 学生妹内射| 中文字字幕在线中文乱码电影| 国产成人片在线观看| 一级特黄大片录像i| 在线不卡无码| 亚洲成人小说| 青青青国产在线| 91久久国产性奴调教| av在线观看网站| 一本一道AV| 亚洲一区二区三区免费视频| 最近中文字幕| 影音先锋av网| 无码一区二区免费| 日韩三级片在线播放| 日韩一级欧美一级| 中文亚洲视频| 久久69| 99欧美精品| 欧美精品99| 午夜免费AV| 国产又粗又黄| 亚洲免费在线视频| 超碰在线无码| 国产69av| 亚洲五月婷| 人人操人人爱人人妻| 欧美成人精品一区二区三区| 亚洲大胆视频| 亚洲无码天堂| 大香蕉欧美在线| 亚洲影视中文字幕| 国产一级片在线播放| 香蕉国产在线| 久久精品6| 日韩骚货| 欧美日韩不卡在线| 国产免费黄色片| 国产精品久久7777777精品无码| 俺来也俺也去| 91黑人丨人妻丨国产丨| 亚洲综合社区在线| 99热er| 嫩草A片www在线观看| 久草视频免费| 亚洲高清电影| 久久免费操| 内射在线| 一级片AV| 黄色大片网站| 92久久| 日韩AV在线天堂| 国产少妇| 中文字幕成人无码| A视频免费在线观看| 人妻互换一二三区免费| 欧美国产乱伦| 婷婷六区| 亚洲色逼| 久久婷婷色| 中文无码网站| 国产女18毛片多18精品| 亚洲色射| 国模无码在线| 成人精品无码| 午夜精东影业传媒在线观看| 狠狠色噜噜狠狠狠888| 国产在线激情| 可以在线观看的av| 欧美AAAAAAAAAA特级| 中文字幕免费观看| 伊人88| 操逼视频一级| 国产欧美一区二区三区国产幕精品| 91超碰在线免费观看| 亚洲AV黄色| 松岛枫在线视频| 91成人视频18| 久久精品成人导航| 国产无码午夜| 爆操表妹| 91国产爽黄在线| 熟女少妇视频| 国产精品毛片VA一区二区三区 | 亚洲AV无码电影| 91精品成人电影| 操www| 操逼逼网| 91啦丨露脸丨熟女色啦| 91丝袜| 国产乱子伦-区二区三区熟睡91| 91久久精品国产91久久公交车 | aa人人操夜夜操人人| 久久嫩草精品久久久久精| 三级片日本在线| 国产精品aaa| gogogo免费高清在线偷拍| 人人操天天干| 成人丁香五月天| 天堂中文在线播放| 农村三级片| 激情六月丁香| 日韩亚洲视频| 西西西444www无码视| 先锋影音AV资源网| 国产性色| 甘肃WBBBB搡wBBBB| 女BBBBBB女BBB| 蜜桃视频欧美| 亚洲精品无码一区| 国产精品国产三级国产AⅤ中文| 爆操网站| 中文在线字幕免费观| 深夜福利18| 午夜无码精品一区二区三区99午 | 国产精品三级在线观看| 丁香五月天视频| 免费国产视频| 色高清无码免费视频| 看国产毛片| 性欧美丰满熟妇XXXX性久久久 | av资源观看| 成人免费三级| 91无码人妻一区二区成人AⅤ| JiZZjiZZ亚洲成熟熟妇| 北条麻妃无码观看| 天天综合视频| 骚妇p| 亚洲无码免费视频在线观看| 国产农村乱婬片A片AAA图片| 激情爱爱网站| 亚洲无码手机在线观看| 99热都是精品| 91香蕉在线| 国产麻豆AⅤMDMD0071 | 日本四级片| 国产精品白浆| 狠狠干天天操| 国产色视频一区二区三区QQ号| 午夜av在线观看| 欧美操逼图片| 国产视频一区二区三区四区| 日本免费福利视频| 久久久久久久久久久久高清毛片一级| 一级a性色毛片| 男人天堂视频在线观看| 天干天干天夜夜爽| 日韩在线观看| 国产成人精品亚洲男人的天堂| 成人免费爱爱视频| 亚洲男人的天堂AV| 亚洲综合社区| 天堂中文在线视频| 日韩视频免费观看高清完整版在线观| 52妺嘿嘿午夜福利在线| a√天堂资源中文8| 逼特逼视频在线| 免费三级网站| 天天干天天插| 日韩一级中文字幕| 在线观看亚洲中文字幕| 啊v在线| 97国产精品视频| 国精产品乱码一区一区三区四区 | 欧美成人精品激情在线观看| 欧美浮力影院| 好色综合| 日韩中文字幕| 亚洲码AV波多野| 猛男大粗猛爽H男人味| www.俺去| 无码中文字幕网站| 99热| 淫色AV| 手机AV在线播放| 成人在线免费网站| 亚洲天堂网在线观看| 在线亚洲福利| 婷婷丁香五月网| 欧美黄色片网站| 婷婷伊人大香蕉| 亚洲天堂无码在线| 亚洲无吗在线播放| 欧美一区二区三区在线观看| 美少妇AV| 夜夜撸一撸| 精品人妻午夜| 成人爽a毛片一区二区免费| 97人人艹| 国产成人午夜福利视频| 日本一区二区视频在线| 男人天堂视频网| 毛片一区二区| 日韩成人AV在线播放| 国产一级片内射| 91视频人人| 欧美精品黄片| 日本无码视频在线观看毒| 国产aaaaaaaaaa| 亚洲偷拍网| 国产成人精品一区二区| 一道本无码免费视频| 成人做爰黄片视频免费| 亚洲综合社区| 天天操操操| 台湾成人在线视频| 午夜啪啪视频| 婷婷五月av| 最新中文字幕视频| 亚洲天堂无| 亚洲图片在线观看| 五月丁香在线观看| 国产精品白浆| 东京热视频免费观看| 西西444WWW大胆无视频软件亮点 | 亚洲日逼网站| 91人妻最真实刺激绿帽| 久久蜜桃| 精品人妻人人操| 小明看台湾成人永久免费视频网站| 88AV在线| 99成人乱码一区二区三区在线| 欧美亚洲在线观看| 麻豆av在线观看| 免费一级A片在线观看视频| 中文字幕AV免费观看| 日韩一级片免费看| AA无码| 污视频在线免费| 97亚洲视频| 亚洲精品乱码久久久久久蜜桃91| 高清无码学生妹| 人妻HDHDHD96XXXX| 内射在线| 操杨幂| 欧美亚洲国产一区二区三区| 超级人人操| 91成人在线| 天天射天天日天天干| 婷婷五月丁香激情| 久草视频在线播放| 夜间福利视频| 欧美熟妇性爱| 最新AV在线播放| 黄av在线| 黄色视频亚洲| 久久久无码精品亚洲日韩男男| 亚洲最新无码| 中文字幕成人网| 亚洲午夜AV| 国产女人18毛片水18精品| 91工厂露脸熟女| 无码日韩电影| 欧美精品一级片| 婷婷五月天在线观看| 国产高清无码免费在线观看| 亚洲第一毛片| 成人做爰100片免费-百度| 日本视频免费| 91在线导航| 人人澡人人爽欧一区| 激情伊人五月天| 欧美激情一区二区三区| 大香蕉综合闲人| 国产免费a片| 久久毛| 72成人网| 久草视频免费| 久久天堂一区| 丁香五月天在线视频| 日韩性爱网站| 日韩欧美一区二区在线观看| 国产又粗又长的视频| 亚洲午夜精品久久久久久APP| 日韩骚货| 久草社区| 午夜亚洲无码| 秋霞一区| 久久成人久久| 免费观看黄色小视频| 国产福利视频| 国产欧美日韩视频| 免费在线观看A片| 91亚洲日韩| www.99精品| 国产成人精品a区在线观看| 一级a免一级a做免费线看内祥| 久久久久久亚洲| 91成人视频免费观看| 高清无码操逼| 亚洲vs无码蜜桃少妇| 欧美色图综合| 国产精品免费久久影院| 逼特逼在线视频| 日韩欧美高清视频| 国产精品秘国产精品88| 国产成人精品视频免费| 亚洲三级无码在线观看| 99国产精品99久久久久久粉嫩| 六月婷婷深爱| 蜜臀久久99精品久久久久酒店更新时间| 综合+夜夜| 日本国产在线视频| www.插插插| 霸道总裁雷总各种姿势白浆爱情岛论坛| 男女啪啪| 国产成人高清在线| av免费网址| 国产激情视频在线免费观看| 国产精品中文| 91熟女丰满原味| 婷婷五月色综合| 中文字幕成人电影| 亚洲中文偷拍| 婷婷激情四射| 一级AV在线| 黄色在线免费| 天天视频入口| 亚洲一本| 青春草在线视频免费观看| 无码视频在线观看免费| www.日本黄色| 国产精品a片| 2021狠狠操| 在线中文无码| 欧美日韩大屌| 中文无码日本一级A片久久影视 | 国色天香网站| 日韩精品| 国产亚洲欧洲| 麻豆免费福利视频| 亚洲成人视频在线免费观看| 天天干天天干| 天天日天天摸| 99re视频播放| 一级黄色电影免费观看| 国产Av大全| 男人在线天堂| 在线观看免费视频无码| 亚洲精品无码中文字幕| 日韩AV无码专区亚洲AV紧身裤| 人人射视频| 爱爱欧美| 最近中文字幕| 狠狠操天天操| 亚洲AV无码成人精品区国产| 天天爽夜夜操| 很很撸| 玖玖综合网| 日韩无码精品视频| 中文无码在线观看中文字幕av中文| 欧美日韩一区二区三区| 福利无码| 久久68| 一级一A片一a免费看| 亚洲精品乱码久久久久久蜜桃欧美| 五月天激情性爱| 欧美大胆a| AV三级片在线观看| 国产18禁网站| 亚洲国产成人精品女人| 婷婷看片| www.zaixianshipin| 超碰在线网站| 美女中文字幕| 亚洲青草| 日韩美在线| 在线不欧美| 久久中文字幕视频| 特黄特色免费大片| 黄色视频网站在线免费观看| 台湾成人在线视频| 欧美操操| 蜜桃视频日韩| 免费看黄片网站| 一本色综合亚洲精品| 精品人妻中文字幕视频| 亚洲第一免费视频| 国产精品v欧美精品v日韩精品 | 亚洲香蕉av| 国产综合久久久7777777| 成人片网站在线观看| 天天av天天av天天爽| 99国产在线观看免费视频| 青青草五月天色婷婷丁香| 中文字幕人成人乱码亚洲电影| 91三级片在线观看| 中文字幕在线成人| 日韩视频免费在线观看| 亚洲午夜电影| 欧美淫秽视频| 在线免费看a片| 操美女的网站| 婷婷丁香色| 亚洲艹| AV资源在线免费观看| 99这里只有精品| 韩国三级HD久久精品HD| 尻屄电影| 久久婷五月| 这里只有精品视频在线| 91成人情欲影视网| 日韩精品久久久久久久酒店| 99免费视频在线| 精品免费国产一区二区三区四区的使用方法 | 日韩一二三四区| 四川性BBB搡BBB爽爽爽小说 | 色吊丝中文字幕| 蜜桃av秘无码一区二区三| 一本色道久久综合亚洲精品小说| 4388亚洲最大| 插菊花综合网1| 成年人免费电影| 91精品国产综合久久久蜜臀图片| 91麻豆国产| 日本V片| 亚洲v欧美v| 一本色道久久综合亚洲二区三区| 在线播放国产精品| 手机看片福利一区二区| 俄罗斯熟妇搡BBBB搡BBBB| 婷婷五月天色综合| 五月色婷婷撸| 日本精品在线视频| 成人午夜啪免费视频在线观看软件 | 色天堂在线观看| 中文字幕精品人妻| 一区二区国产视频| 少妇一级| 一级黄色毛片视频| 国产精品人妻无码一区牛牛影视| 中文字幕免费高清| 探花视频在线观看| 制服丝袜一区| 在线你懂的| 91丨PORNY丨丰满人妻网站 | 小日本91在线观看| 亚洲无码专区在线观看| 四虎影成人精品A片| 欧美性爱超碰| 欧美色999| 欧美熟妇一区二区三区| 黄色电影毛片| a视频在线免费观看| 一级片学生妹| 688AV秘无码一区二区| 欧美日韩A片| 日韩高清在线播放| 日韩成人无码电影网站| 姐弟乱伦性爱| 亚洲AV永久无码精品| 精品国内自产拍在线观看视频| 亚洲无码操逼视频| 成人做爰黄A片免费看陈冠| 四虎黄色影院| 性爱xxxxx| 无码人妻一区二区三区四区老鸭窝| 亚洲va中文字幕| 国产成人三级视频| 东北成人毛片| 久久久久免费视频| 九一香蕉视频| 欧美MV日韩MV国产网站| 成人AV电影在线观看| 亚洲天堂2015| 人人爱人人摸人人操| 五月天婷婷小说| 无码操逼| 五月丁香大香蕉| 丰满人妻一区二区三区四区54| 无码做爰欢H肉动漫网站在线看 | 中文字幕毛片| 操欧美美女| 日韩高清欧美| 天天干天天日蜜臀色欲av| 日韩国产一区| 精品视频免费观看| 国产ts在线观看| 性爱AV| 国产三级网站| 小黄片免费在线观看| 久久久免费观看视频| 手机在线一区| 91免费在线视频| 免费精品视频| 黑人精品欧美一区二区蜜桃| 国产成人自拍视频在线| 日韩成人无码全裸视频| 欧美黑吊大战白妞| 日韩欧美手机在线| 美女黄视频网站| XXXX操| 97超碰在线播放| 囯产精品久久久久久久| 欧美日韩在线视频一区| 性欧美xxxx| adn日韩av| 淫揉BBB揉揉揉BBBBB| 国产精品成人免费久久黄AV片 | 超碰九色| 国产日韩a| 日本A片| 亚洲综合一区二区| 91探花秘在线播放偷拍| 成人无码区亚洲AV久久| A级片毛片| 亚洲AV无码乱码| 亚洲精品456| 澳门四虎影院| 91人人精品| 亚洲成人77777| 一区二区三区四区五区六区高清无吗视频 | 国产精品美女久久久| 国产欧美精品在线观看| 日韩天天操| 天天日天天射天天操| 九九热视频在线观看| av天堂资源| 国产精品日韩欧美| 三级视频在线观看| 日本无码专区| 撸久久| 欧美噜噜| 俺去也AV| www日韩无码| 水蜜桃在线视频| 荫蒂添出高潮A片视频| 黄色小视频在线免费看| AV无码免费| 一区二区三区四区无码在线| 特一级黄色电影| 欧美九九| 东方AV在线观看| 黄色a视频| av在线中文| 精品一区三区| 大香蕉在线播| 午夜免费播放观看在线视频| 黄色片在线| 亚洲影院在线观看| 亚洲涩情91日韩一区二区| 免看一级a毛片一片成人不卡| 激情五月天在线视频| 国产精品日韩欧美| 精品夜夜澡人妻无码AV| 亚洲综合日韩在线| 国产精品自拍小视频| 亚洲不卡在线观看| 成人福利视频在线观看| 欧美精品黄| 国产欧美精品AAAAAA片| 中字一区人妻水多多| 五月丁香在线视频| 91小宝寻花一区二区三区三级| 躁BBB躁BBB躁BBBBB乃| 日韩香蕉视频| 国产乱论视频| 99久久9| 久亚洲| 中国免费看片| 久久久久久久久久久久久久久久久久久久| 91丨九色丨东北熟女| 九九乱伦| 91久久精品视频| 不卡无码高清| 人人澡视频| 丁香花五月天| 免费看黄视频| 69视频在线观看免费| 日韩免费福利视频| 视频一区在线观看| av在线免费播放| 蜜桃久久久| 欧美日比视频| 一区二区三区视频在线| 91丝袜一区二区三区| 欧美老女人操逼视频| 江苏妇搡BBBB搡BBBB-百度| 欧美久久婷婷| 国产污视频| 自拍无码视频| 无码中文字幕高清| 亚洲香蕉视频| 欧美成人网站在线观看| 午夜无码福利| 91在线超碰| 一本道在线无码| 超碰天天| 牛牛精品视频| 可以免费看AV的网站| 99精品免费在线观看| 午夜福利站| 欧美日韩婷婷| 香蕉视频啪啪啪| 围内精品久久久久久久久白丝制服 | 亚洲第一综合网| 人妻少妇被猛烈进入中文字幕| 久操无码视频| 最全av在线| 你懂的在线视频| 欧美性爱在线观看| 人人舔| 日韩无码中文字幕| 悠悠色综合| 成人欧美| 高清无码电影| 综合五月| 无码AⅤ一区二区三区| 免费内射视频| 97福利在线| 黄片99| 老熟妇一区二区三区啪啪| 国产区欧美去区在线| 中文字幕日韩成人| 国产av资源网| 综合网插菊花| a√免费看| 夜夜福利| AV无码免费| 丁香天堂| 在线免费观看黄色视频网站| 超碰97老师| 久久久久久久久久国产精品| 欧美在线视频网| 免费成人视频在线观看| 日日夜夜精选视频| 影音先锋成人在线视频| 国产成人精品无码片子的价格| 久久国产热| 亚洲高清视频在线播放| 国产精品999999| 久久久久久久艹| 久久a视频| 无码一区二区黑人猛烈视频网站| 中文字幕国产一区| 亚洲成人午夜电影| 四季AV之日韩人妻无码| 国产夫妻AV| 永久av| 日韩精品成人免费观看视频| 日韩色情在线| 男人天堂综合网| 91亚洲精选| 国内久久婷婷| 欧美色噜噜| 久草视频网| 97免费| 天天干天天日天天色| 91精品国产麻豆国产自产在线| 天天日天天射天天操| 五月丁香天堂网| A片小视频| 亚洲永久免费| 三级片在线观看视频| 五月天操逼网| 国产骚逼| 久久久久久久久久久久久自慰小片 | 中文字幕在线视频无码| 九九成人精品| 亚洲第一成人久久网站| 国产口爆视频| 性爱日韩| 欧美大骚逼| 午夜福利大香蕉| A片免费播放| 国产午夜在线视频| 亚洲中文字幕码mv| 成人啪啪视频| 成年人毛片| 欧美激情网站| 国产av探花| 中国熟女视频| 成人免费高清| 国产精品午夜在线| 亚洲狠狠撸| 五月婷婷色播| 一本到无码| 日本黄色视| 大香蕉网伊人| 久久黄网| 国产aa| 亚洲天堂人妻少妇| 影音先锋AV资源网站| 亚洲最新AV在线| 极品久久久久| 苍井空无码在线观看| 国产一级a毛一级a毛视频在线网站? | 午夜无码熟妇丰满人妻| 91精品人妻一区二区三区| 日韩国产在线观看| 亚洲欧美日韩黑料吃瓜在线观看| 国产主播精品| 国产青草视频在线观看| 中文字幕在线无码视频| 国产精品国产精品国产专区不52 | 欧美一级黄片免费看| 骚BBBB槡BBB槡BBB| 日韩在线中文字幕| 91国内精品视频| 久久久夜夜夜| 91日逼视频| 亚洲黄色电影网站| 亚洲字幕| 中文字幕视频在线免费观看| 婷婷电影网| 狠狠操婷婷| 大香蕉在8线| 中文字幕在线国产| 中文字幕精品在线观看| 三级网址在线观看| 无码国产精品一区二区三| 六月丁香五月| 伊人久久久影视大全| 日韩三级片在线播放| 人人操人人干人人看| 国产成人在线免费| 久久久久久精| 99亚洲精品| 久久伊人春色| 亚洲一级一级黄色| 久久大香蕉精品| 欧美色插| 精品视频国产| 中文字幕在线免费观看视频| 久久视频理论| 精品国产AV鲁一鲁一区| 中文字幕乱伦视频| 欧美AAA片| 国产日韩在线观看视频| 小處女末发育嫩苞AV| 无码性爱视频| 国产Av大全| 一级一级a免一级a做免费线看内裤| 91精品国产成人做爰观看奶头| 999国产视频| 成人免费在线观看| 中文字幕精品视频| 蜜桃av秘一区二区三区| 一级免费爱爱视频| 中文字幕成人网站| 巨爆乳肉感一区二区三区| 日韩在线不卡视频| 天天色天天日| 粉嫩小泬BBBB免费看| 无码专区亚洲| 久久国产精品一区二区三区| 欧美日韩成人视频| 俺也操| 欧美成人电影| 操逼免费视频网站| 福利网址| 亚洲无码小电影| 婷婷五月丁香六月| 四虎在线视频观看96| 精品一区二区三区无码| 91精片| 亚洲手机视频| 你懂的视频| 一本久道综合| 欧美日皮| 91原创视频| 欧美性猛交XXXX乱大交3| 日韩成人精品| 特级西西444www高清大胆免费看 | 91久热| 四虎一区| 日韩欧美视频| 97桃色| 欧美A片免费| 三级亚洲| 天天久久综合| 免费AV黄色| 国产视频成人| 91久久综合| 亚洲欧美人妻| 欧美亚洲色色网视频| 三须三级久久三级久久18| 日韩一区二区不卡| 水密桃网站| caoporen| 大鸡巴操小逼视频| 激情久久av| 久久久久久久久免费看无码| 亚洲日韩中文字幕在线观看| 久久久久久久三级片| 欧美熟妇高潮流白浆| 热久久免费| 精品小视频| www.色在线观看| 九九热在线精品视频| 天天操夜操| 天堂一区二区三区| 中文字幕成人av| 噜噜噜久久久| 国产综合av| 西西444WWW大胆无| 成人无码99| 成人小视频在线| 亚洲AV高清| 亚洲天媒在线播放| 国产剧情一区二区| 超碰一区| 強姧伦一区二区三区在线播放| 天天干强奸视频在线综合| 久久久久亚洲AV无码专区| 亚洲乱码在线观看| 欧一美一婬一伦一区二区三区自慰| 任你爽在线视频| 日本黄色影院在线| 人妻成人网| 欧美在线视频99| 大香蕉在线播| 大香蕉三级| 国产精品1| 肏逼在线观看| 亚洲男女免费视频| 中文字幕国产精品| 白浆四溢av| 免费污视频在线观看| 99久久婷婷国产精品2020| 91操操| 日韩无码波多野结衣| 西西人体44www大胆无码| 欧美人与禽乱婬A片| 人人爱人人插高清| japanese在线观看| 亚洲视频中文字幕| 成人AV在线电影| 丁香午夜| 日本性爱无码| 人妻少妇av中文字幕乱码牛牛| 中文资源在线a| 苍井空一区二区三区| 91在线精品视频| 野花Av| 日韩有码在线观看| 伊人激情网| 亚洲AV无码成人精品区www| 日一日射一射| 高清无码视频网站| 无码人妻一区二区三区三| 久久黄色小视频| 人人色人人摸| 久久久久久久极品内射| 欧美日逼网| 五月婷婷在线观看| 天天色天天色| 69av在线视频| 91人妻在线| 一区免费在线观看| 国产免费AV网站| 午夜色色福利| 国产成人无码精品一区秘二区| 精品码一区二在线观看| 91日综合欧美| 激情五月婷婷综合| 欧美午夜福利在线观看| 人人爱人人插高清| 免费国产黄色视频| 久久久福利| 国产在线观看mv免费全集电视剧大全 | 久久99高清视频| 中文字幕第72页| 第一福利视频| 十八禁网站在线观看| 十八毛片| 天天日天天爽| 久久AV电影| 伊人88| 操屄国产| 黄色视频免费国产| 成人黄色免费网站| 黄色视频在线观看大全| 91色综合| 韩剧《邻居的妻子》电视剧| 91综合视频在线播放| 日韩福利电影| 亚洲va欧美va天堂v国产综合| 国产精品高潮呻吟久久| 欧美亚洲视频| 精品一区二区三区四区学生| 一级a一级a爱片免费免免高潮| youjizzcom日本| 成人日韩在线| 麻豆国产视频| 亚洲一区视频在线| 亚洲三级电影|