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

SpringBoot + Redis + 注解 + 攔截器來實現(xiàn)接口冪等性校驗

共 8317字,需瀏覽 17分鐘

 ·

2020-09-14 20:30

來源:jianshu.com/p/6189275403ed


一、概念

冪等性, 通俗的說就是一個接口, 多次發(fā)起同一個請求, 必須保證操作只能執(zhí)行一次
比如:

  • 訂單接口, 不能多次創(chuàng)建訂單

  • 支付接口, 重復支付同一筆訂單只能扣一次錢

  • 支付寶回調(diào)接口, 可能會多次回調(diào), 必須處理重復回調(diào)

  • 普通表單提交接口, 因為網(wǎng)絡超時等原因多次點擊提交, 只能成功一次
    等等

二、常見解決方案

  • 唯一索引 -- 防止新增臟數(shù)據(jù)

  • token機制 -- 防止頁面重復提交

  • 悲觀鎖 -- 獲取數(shù)據(jù)的時候加鎖(鎖表或鎖行)

  • 樂觀鎖 -- 基于版本號version實現(xiàn), 在更新數(shù)據(jù)那一刻校驗數(shù)據(jù)

  • 分布式鎖 -- redis(jedis、redisson)或zookeeper實現(xiàn)

  • 狀態(tài)機 -- 狀態(tài)變更, 更新數(shù)據(jù)時判斷狀態(tài)

三、本文實現(xiàn)

本文采用第2種方式實現(xiàn), 即通過redis + token機制實現(xiàn)接口冪等性校驗

四、實現(xiàn)思路

為需要保證冪等性的每一次請求創(chuàng)建一個唯一標識token, 先獲取token, 并將此token存入redis, 請求接口時, 將此token放到header或者作為請求參數(shù)請求接口, 后端接口判斷redis中是否存在此token:

  • 如果存在, 正常處理業(yè)務邏輯, 并從redis中刪除此token, 那么, 如果是重復請求, 由于token已被刪除, 則不能通過校驗, 返回請勿重復操作提示

  • 如果不存在, 說明參數(shù)不合法或者是重復請求, 返回提示即可

五、項目簡介

  • springboot

  • redis

  • @ApiIdempotent注解 + 攔截器對請求進行攔截

  • @ControllerAdvice全局異常處理

  • 壓測工具: jmeter

說明:

本文重點介紹冪等性核心實現(xiàn), 關于springboot如何集成redis、ServerResponse、ResponseCode等細枝末節(jié)不在本文討論范圍之內(nèi), 有興趣的小伙伴可以查看我的Github項目:

https://github.com/wangzaiplus/springboot/tree/wxw

六、代碼實現(xiàn)

pom

????????
????????<dependency>
????????????<groupId>redis.clientsgroupId>
????????????<artifactId>jedisartifactId>
????????????<version>2.9.0version>
????????dependency>

????????
????????<dependency>
????????????<groupId>org.projectlombokgroupId>
????????????<artifactId>lombokartifactId>
????????????<version>1.16.10version>
????????dependency>

JedisUtil

package?com.wangzaiplus.test.util;

import?lombok.extern.slf4j.Slf4j;
import?org.springframework.beans.factory.annotation.Autowired;
import?org.springframework.stereotype.Component;
import?redis.clients.jedis.Jedis;
import?redis.clients.jedis.JedisPool;

@Component
@Slf4j
public?class?JedisUtil?{

????@Autowired
????private?JedisPool?jedisPool;

????private?Jedis?getJedis()?{
????????return?jedisPool.getResource();
????}

????/**
?????*?設值
?????*
?????*?@param?key
?????*?@param?value
?????*?@return
?????*/

????public?String?set(String?key,?String?value)?{
????????Jedis?jedis?=?null;
????????try?{
????????????jedis?=?getJedis();
????????????return?jedis.set(key,?value);
????????}?catch?(Exception?e)?{
????????????log.error("set?key:{}?value:{}?error",?key,?value,?e);
????????????return?null;
????????}?finally?{
????????????close(jedis);
????????}
????}

????/**
?????*?設值
?????*
?????*?@param?key
?????*?@param?value
?????*?@param?expireTime?過期時間,?單位:?s
?????*?@return
?????*/

????public?String?set(String?key,?String?value,?int?expireTime)?{
????????Jedis?jedis?=?null;
????????try?{
????????????jedis?=?getJedis();
????????????return?jedis.setex(key,?expireTime,?value);
????????}?catch?(Exception?e)?{
????????????log.error("set?key:{}?value:{}?expireTime:{}?error",?key,?value,?expireTime,?e);
????????????return?null;
????????}?finally?{
????????????close(jedis);
????????}
????}

????/**
?????*?取值
?????*
?????*?@param?key
?????*?@return
?????*/

????public?String?get(String?key)?{
????????Jedis?jedis?=?null;
????????try?{
????????????jedis?=?getJedis();
????????????return?jedis.get(key);
????????}?catch?(Exception?e)?{
????????????log.error("get?key:{}?error",?key,?e);
????????????return?null;
????????}?finally?{
????????????close(jedis);
????????}
????}

????/**
?????*?刪除key
?????*
?????*?@param?key
?????*?@return
?????*/

????public?Long?del(String?key)?{
????????Jedis?jedis?=?null;
????????try?{
????????????jedis?=?getJedis();
????????????return?jedis.del(key.getBytes());
????????}?catch?(Exception?e)?{
????????????log.error("del?key:{}?error",?key,?e);
????????????return?null;
????????}?finally?{
????????????close(jedis);
????????}
????}

????/**
?????*?判斷key是否存在
?????*
?????*?@param?key
?????*?@return
?????*/

????public?Boolean?exists(String?key)?{
????????Jedis?jedis?=?null;
????????try?{
????????????jedis?=?getJedis();
????????????return?jedis.exists(key.getBytes());
????????}?catch?(Exception?e)?{
????????????log.error("exists?key:{}?error",?key,?e);
????????????return?null;
????????}?finally?{
????????????close(jedis);
????????}
????}

????/**
?????*?設值key過期時間
?????*
?????*?@param?key
?????*?@param?expireTime?過期時間,?單位:?s
?????*?@return
?????*/

????public?Long?expire(String?key,?int?expireTime)?{
????????Jedis?jedis?=?null;
????????try?{
????????????jedis?=?getJedis();
????????????return?jedis.expire(key.getBytes(),?expireTime);
????????}?catch?(Exception?e)?{
????????????log.error("expire?key:{}?error",?key,?e);
????????????return?null;
????????}?finally?{
????????????close(jedis);
????????}
????}

????/**
?????*?獲取剩余時間
?????*
?????*?@param?key
?????*?@return
?????*/

????public?Long?ttl(String?key)?{
????????Jedis?jedis?=?null;
????????try?{
????????????jedis?=?getJedis();
????????????return?jedis.ttl(key);
????????}?catch?(Exception?e)?{
????????????log.error("ttl?key:{}?error",?key,?e);
????????????return?null;
????????}?finally?{
????????????close(jedis);
????????}
????}

????private?void?close(Jedis?jedis)?{
????????if?(null?!=?jedis)?{
????????????jedis.close();
????????}
????}

}

自定義注解@ApiIdempotent

package?com.wangzaiplus.test.annotation;

import?java.lang.annotation.ElementType;
import?java.lang.annotation.Retention;
import?java.lang.annotation.RetentionPolicy;
import?java.lang.annotation.Target;

/**
?*?在需要保證?接口冪等性?的Controller的方法上使用此注解
?*/

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public?@interface?ApiIdempotent?{
}

ApiIdempotentInterceptor攔截器

package?com.wangzaiplus.test.interceptor;

import?com.wangzaiplus.test.annotation.ApiIdempotent;
import?com.wangzaiplus.test.service.TokenService;
import?org.springframework.beans.factory.annotation.Autowired;
import?org.springframework.web.method.HandlerMethod;
import?org.springframework.web.servlet.HandlerInterceptor;
import?org.springframework.web.servlet.ModelAndView;

import?javax.servlet.http.HttpServletRequest;
import?javax.servlet.http.HttpServletResponse;
import?java.lang.reflect.Method;

/**
?*?接口冪等性攔截器
?*/

public?class?ApiIdempotentInterceptor?implements?HandlerInterceptor?{

????@Autowired
????private?TokenService?tokenService;

????@Override
????public?boolean?preHandle(HttpServletRequest?request,?HttpServletResponse?response,?Object?handler)?{
????????if?(!(handler?instanceof?HandlerMethod))?{
????????????return?true;
????????}

????????HandlerMethod?handlerMethod?=?(HandlerMethod)?handler;
????????Method?method?=?handlerMethod.getMethod();

????????ApiIdempotent?methodAnnotation?=?method.getAnnotation(ApiIdempotent.class);
????????if?(methodAnnotation?!=?null)?{
????????????check(request);//?冪等性校驗,?校驗通過則放行,?校驗失敗則拋出異常,?并通過統(tǒng)一異常處理返回友好提示
????????}

????????return?true;
????}

????private?void?check(HttpServletRequest?request)?{
????????tokenService.checkToken(request);
????}

????@Override
????public?void?postHandle(HttpServletRequest?httpServletRequest,?HttpServletResponse?httpServletResponse,?Object?o,?ModelAndView?modelAndView)?throws?Exception?{
????}

????@Override
????public?void?afterCompletion(HttpServletRequest?httpServletRequest,?HttpServletResponse?httpServletResponse,?Object?o,?Exception?e)?throws?Exception?{
????}
}

TokenServiceImpl

package?com.wangzaiplus.test.service.impl;

import?com.wangzaiplus.test.common.Constant;
import?com.wangzaiplus.test.common.ResponseCode;
import?com.wangzaiplus.test.common.ServerResponse;
import?com.wangzaiplus.test.exception.ServiceException;
import?com.wangzaiplus.test.service.TokenService;
import?com.wangzaiplus.test.util.JedisUtil;
import?com.wangzaiplus.test.util.RandomUtil;
import?lombok.extern.slf4j.Slf4j;
import?org.apache.commons.lang3.StringUtils;
import?org.apache.commons.lang3.text.StrBuilder;
import?org.springframework.beans.factory.annotation.Autowired;
import?org.springframework.stereotype.Service;

import?javax.servlet.http.HttpServletRequest;

@Service
public?class?TokenServiceImpl?implements?TokenService?{

????private?static?final?String?TOKEN_NAME?=?"token";

????@Autowired
????private?JedisUtil?jedisUtil;

????@Override
????public?ServerResponse?createToken()?{
????????String?str?=?RandomUtil.UUID32();
????????StrBuilder?token?=?new?StrBuilder();
????????token.append(Constant.Redis.TOKEN_PREFIX).append(str);

????????jedisUtil.set(token.toString(),?token.toString(),?Constant.Redis.EXPIRE_TIME_MINUTE);

????????return?ServerResponse.success(token.toString());
????}

????@Override
????public?void?checkToken(HttpServletRequest?request)?{
????????String?token?=?request.getHeader(TOKEN_NAME);
????????if?(StringUtils.isBlank(token))?{//?header中不存在token
????????????token?=?request.getParameter(TOKEN_NAME);
????????????if?(StringUtils.isBlank(token))?{//?parameter中也不存在token
????????????????throw?new?ServiceException(ResponseCode.ILLEGAL_ARGUMENT.getMsg());
????????????}
????????}

????????if?(!jedisUtil.exists(token))?{
????????????throw?new?ServiceException(ResponseCode.REPETITIVE_OPERATION.getMsg());
????????}

????????Long?del?=?jedisUtil.del(token);
????????if?(del?<=?0)?{
????????????throw?new?ServiceException(ResponseCode.REPETITIVE_OPERATION.getMsg());
????????}
????}

}

TestApplication

package?com.wangzaiplus.test;

import?com.wangzaiplus.test.interceptor.ApiIdempotentInterceptor;
import?org.mybatis.spring.annotation.MapperScan;
import?org.springframework.boot.SpringApplication;
import?org.springframework.boot.autoconfigure.SpringBootApplication;
import?org.springframework.context.annotation.Bean;
import?org.springframework.web.cors.CorsConfiguration;
import?org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import?org.springframework.web.filter.CorsFilter;
import?org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import?org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@SpringBootApplication
@MapperScan("com.wangzaiplus.test.mapper")
public?class?TestApplication??extends?WebMvcConfigurerAdapter?{

????public?static?void?main(String[]?args)?{
????????SpringApplication.run(TestApplication.class,?args);
????}

????/**
?????*?跨域
?????*?@return
?????*/

????@Bean
????public?CorsFilter?corsFilter()?{
????????final?UrlBasedCorsConfigurationSource?urlBasedCorsConfigurationSource?=?new?UrlBasedCorsConfigurationSource();
????????final?CorsConfiguration?corsConfiguration?=?new?CorsConfiguration();
????????corsConfiguration.setAllowCredentials(true);
????????corsConfiguration.addAllowedOrigin("*");
????????corsConfiguration.addAllowedHeader("*");
????????corsConfiguration.addAllowedMethod("*");
????????urlBasedCorsConfigurationSource.registerCorsConfiguration("/**",?corsConfiguration);
????????return?new?CorsFilter(urlBasedCorsConfigurationSource);
????}

????@Override
????public?void?addInterceptors(InterceptorRegistry?registry)?{
????????//?接口冪等性攔截器
????????registry.addInterceptor(apiIdempotentInterceptor());
????????super.addInterceptors(registry);
????}

????@Bean
????public?ApiIdempotentInterceptor?apiIdempotentInterceptor()?{
????????return?new?ApiIdempotentInterceptor();
????}

}

OK, 目前為止, 校驗代碼準備就緒, 接下來測試驗證

七、測試驗證

1、獲取token的控制器TokenController

package?com.wangzaiplus.test.controller;

import?com.wangzaiplus.test.common.ServerResponse;
import?com.wangzaiplus.test.service.TokenService;
import?org.springframework.beans.factory.annotation.Autowired;
import?org.springframework.web.bind.annotation.GetMapping;
import?org.springframework.web.bind.annotation.RequestMapping;
import?org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/token")
public?class?TokenController?{

????@Autowired
????private?TokenService?tokenService;

????@GetMapping
????public?ServerResponse?token()?{
????????return?tokenService.createToken();
????}

}

2、TestController, 注意@ApiIdempotent注解, 在需要冪等性校驗的方法上聲明此注解即可, 不需要校驗的無影響

package?com.wangzaiplus.test.controller;

import?com.wangzaiplus.test.annotation.ApiIdempotent;
import?com.wangzaiplus.test.common.ServerResponse;
import?com.wangzaiplus.test.service.TestService;
import?lombok.extern.slf4j.Slf4j;
import?org.springframework.beans.factory.annotation.Autowired;
import?org.springframework.web.bind.annotation.PostMapping;
import?org.springframework.web.bind.annotation.RequestMapping;
import?org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/test")
@Slf4j
public?class?TestController?{

????@Autowired
????private?TestService?testService;

????@ApiIdempotent
????@PostMapping("testIdempotence")
????public?ServerResponse?testIdempotence()?{
????????return?testService.testIdempotence();
????}

}

3、獲取token

查看redis

4、測試接口安全性: 利用jmeter測試工具模擬50個并發(fā)請求, 將上一步獲取到的token作為參數(shù)

5、header或參數(shù)均不傳token, 或者token值為空, 或者token值亂填, 均無法通過校驗, 如token值為"abcd"

八、注意點(非常重要)

上圖中, 不能單純的直接刪除token而不校驗是否刪除成功, 會出現(xiàn)并發(fā)安全性問題, 因為, 有可能多個線程同時走到第46行, 此時token還未被刪除, 所以繼續(xù)往下執(zhí)行, 如果不校驗jedisUtil.del(token)的刪除結(jié)果而直接放行, 那么還是會出現(xiàn)重復提交問題, 即使實際上只有一次真正的刪除操作, 下面重現(xiàn)一下

稍微修改一下代碼:

再次請求

再看看控制臺

雖然只有一個真正刪除掉token, 但由于沒有對刪除結(jié)果進行校驗, 所以還是有并發(fā)問題, 因此, 必須校驗

九、總結(jié)

其實思路很簡單, 就是每次請求保證唯一性, 從而保證冪等性, 通過攔截器+注解, 就不用每次請求都寫重復代碼, 其實也可以利用spring aop實現(xiàn), 無所謂。

Github

https://github.com/wangzaiplus/springboot/tree/wxw

END
好文讓朋友知道你“在看”
瀏覽 55
點贊
評論
收藏
分享

手機掃一掃分享

分享
舉報
評論
圖片
表情
推薦
點贊
評論
收藏
分享

手機掃一掃分享

分享
舉報

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

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 国产无遮挡又黄又爽又色视频| 夜夜狠狠躁日日躁| 蜜臀久久99精品久久久兰草影视| 久久9久| 婷婷丁香色| 久久依人大香蕉| а√在线中文网新版地址在线 | 欧美日韩黄色极品| 很很撸在线视频| 免费观看高清无码视频| 精品无码一区二区人妻久久蜜桃| 黄片在线免费观看| 日本在线播放| 国产91无码精品秘入口在线观看| 午夜福利片| 小處女末发育嫩苞AV| 九色PORNY9l原创自拍| 一二三区视频| av在线观看中文字幕| 欧美操BB| 91亚洲国产成人久久精品麻豆| 午夜视频免费| 日韩啊啊啊| 在线免费中文字幕| 国产亚洲99久久精品熟女| 无码精品黑人| 中文字幕丰满的翔田千里| 日逼高清视频| 永久免费黄色视频网站| 伊人久久大香线蕉| 无码A级| 操逼电影免费| 激情久久五月天| 日本成片网| 在线不卡免费Av| 中文无码在线| 大香蕉欧美| 69视频在线观看| 国精产品一区二区三区| 日本精品人妻无码77777| 毛片国产| 美女天天操| 欧美黄色电影网站| 日本欧美国产| 山东熟妇搡BBBB搡BBBB| 天天操夜夜骑| 免费一级A片| 欧美成人免费| 上海熟搡BBB搡BBBB| 亚洲AV影院| 特级丰满少妇一级AAAA爱毛片| 黄色在线网站| 亚洲无码三级片| 天天射天天干| 亚洲欧美美国产| 韩国AV三级| 狼友视频第二页| 国产激情视频在线免费观看| 最新中文字幕观看| 国产在线成人视频| 韩无码| 亚洲AV无码成人精品久久久| 欧美一级做| 欧美十区| 国产对白视频| 欧美一区免费| 黄色免费一级片| www.五月丁香| 午夜爽爽爽| AV日韩无码| 亚欧洲精品在线视频免费观看| 亚欧洲精品在线视频免费观看| 欧美亚洲日韩中文字幕| 婷婷色综合| av中文字幕在线播放| 国产一区在线视频| 黄色操逼网站| 一线av| 韩国三级HD中文字幕2019年| 好吊一区二区| 亚洲色视频在线| 无码做爰欢H肉动漫网站在线看 | 老熟妇一区二区三区啪啪| 黄色A片一级| 中文字幕亚洲一区| 麻豆91精品人妻成人无码| 一级片日韩| 国产激情AV| 操一操| 久久久久久无码日韩欧美电影| 日本黄色视频官网| 日本精品在线观看视频| 亚洲一区二区视频在线观看| 亚洲手机在线播放| 国产欧美日韩在线视频| 五月天激情导航| 久久区| 人人操人人干人人摸| 天天操中文字幕| 黄色伊人| 欧美午夜精品一区二区蜜桃 | 成人黄A片免费| 中文字幕高清无码在线| 自拍偷拍精品| 成人爽a毛片一区二区免费| 无码人妻一区二区三区线花季传件| 大香蕉在线电影| 人妻日韩精品中文字幕| 天天插天天爽| 国产一级做a爱免费视频| 欧美AA级毛片| 9久9久9久9久女女女女| caopeng97| 免费成人黄色网址| 国产精品一级片| 日韩无码高清视频| 亚洲成人在线视频观看| 亚洲国产精品尤物yw在线观看| 米奇狠狠干| 无码精品一区二区在线| 丁香婷婷五月色成人网站| 亚洲69视频| 国产夫妻在线| 国产成人综合自拍| 国模无码在线| 亚洲日韩黄色| 超碰成人97| 日韩三级在线观看| 三级网站在线播放| 久操视频在线| 蜜桃av久久久亚洲精品| 亚洲熟妇在线观看一区二区| 久久9久| 国产精品成人在线| 午夜成人黄片| 97国产| 色老板在线视频| 国产又粗又猛又黄又爽无遮挡 | av一区二区在线观看| 精品少妇人妻一区二区| 国产嫩草精品A88AV| 亚洲免费成人网站| 久久久999精品日韩一区二区| 巨い巨乳の少妇あジed2k| 婷婷欧美色图| 你懂得在线视频| 国产无码AV在线| 五月婷中文字幕| JUY-579被丈夫的上司侵犯后的第7天,我 | 中文字幕无码日韩| 免费看无码一级A片在线播放| 国产成人免费| 中文字幕自拍偷拍| 永久免费AV无码| 黑人巨大精品欧美| 你懂的视频网站| 亚洲骚妇| 松岛枫在线视频| 欧美成人国产| 黑人猛躁白人BBBBBBBBB| 国产一级a毛一级a毛视频在线网站 | 国产91www| 成人伊人综合网| 欧美一区二区三区免费| 日韩城人免费| 囯产精品久久久久久久久久久久久久 | 婷婷五月激情中文字幕| www在线播放| 黄片小视频在线观看| 足浴店少妇69XXX| 中文字幕AV在线| 激情a| 国产在线播放91| 豆花成人在线| 操屄视频免费观看| 97超碰伊人| 日韩一级免费毛片| 99精品视频在线观看| 日韩精品免费一区二区在线观看| 久久久免费观看视频| 亚洲操逼逼| 婷婷五月丁香五月| 一级a一级a爰片免费免免在线| 强伦轩一区二区三区在线观看| A片免费在线播放| 天天干天天射天天操| 菊花插综合网| 在线中文字幕亚洲| 无码囯无精品毛片大码| 国产一级黄色| 国产美女激情视频| 人人插人人射| 免费看黃色AAAAAA片| 尹人香蕉久久| 天堂a在线8| 久草新视频| 人人操人| 中文字幕成人av| 人成无码| 婷婷五月天无码| 午夜福利高清在线观看| 成年片免费观看网站免费观看,亚洲+欧...| 亚洲成人AV电影| 亚洲欧美在线观看视频| 2012天天夜夜| 婷婷五月天丁香在线| 人妻熟妇乱子伦精品无码专区毛片| av解说| 国产搡BBB爽爽爽视频| 国产丰满乱子伦无码| 肉乳无码A片av| 久久大香蕉| 在线观看免费a片| 黄片无码免费观看| 大鸡巴在线视频| 中文字幕亚洲观看| 亚洲精品中文字幕成人片| 日本爱爱免费视频| 国产黄色AV片| 免费在线观看无码| 欧美日韩中文字幕| 日本少妇电影| 天天舔天天射| 91在线一区二区| 日韩综合色视频导航| 99色国产| 免费视频一区二区三区四区| 乱轮少妇| 日韩欧美人妻无码精品| 婷婷五月AV| 久久99视频| 黄色国产在线| 国产福利免费| 51黄片| 影音先锋91| 五月丁香999| 蜜桃视频网| 天天干天天干天天操| 在线观看免费无码| 日韩精品| 小草一区| 日韩国产成人| 天天日天天日天天日| 日韩无码少妇| 99啪啪| 国产精品尤物| 日韩精品一区二区三区黄冈站长| 日韩无码中字| 成人A片免费在线观看| 丁香五月欧美激情| 中文字幕在线观看辣文| 亚洲高清电影| 日韩二区三区| 苍井空在线播放| 久久国产精品一区二区三区| 激情乱伦视频| 国产在线性爱视频| 国产熟妇婬乱A片免费看牛牛 | 无码欧美| 高清无码免费观看视频| 西西人体大胆ww4444| 国产毛片欧美毛片高潮| 俺来俺也去| 无码日逼| 精品三级在线观看| 午夜精品久久久久久久| 北条麻妃精品青青久久价格| 亚洲网站在线播放| 亚洲色图15P| 亚洲精品白浆高清久久久久久| 亚洲高清无码在线播放| 国产91在线中日| 成人一级a片| 欧美黄色网| 91高潮久久久久久久| 大香伊人中文字幕精品| 国产高清精品无码| www.日韩无码| 国产96在线亚洲| 黄片高清视频| 综合久久久| 嫩BBB搡BBB搡BBB四川| 亚洲AV免费看| V天堂在线视频| 日韩欧美V| 人妻少妇av中文字幕乱码牛牛 | 北条麻妃一区二区三区在线观看| 中文字幕日本精品5| 水蜜桃视频在线观看| 国产18禁网站| 亚洲天堂精品在线观看| 日韩视频免费在线| 一级特黄AAAA片| 亚洲偷拍中文| 偷拍欧美日韩| 成人小视频十八禁免费观看| 欧美AⅤ在线| 欧美不卡视频| 国产最新av| 最新中文字幕777私人在线| 猛男大粗猛爽h男人味| 毛片A片| 九九惹伊人| 蜜桃视频一区二区| 正在播放无码| 中文有码在线| 日本亚洲欧洲免费| 丁香欧美| 无码精品一区二区三区在线播放| 国产一区二区三区在线观看免费视频免费视频免费视频 | 久久久青草| 蜜桃91精品秘入口| 国产成人精品无码| 亚洲在线观看视频| va婷婷在线免费观看| 免费无码国产在线53| 三级成人免费| 九色91视频| 天堂AV网站| www.水蜜桃| 伊人伊人网| 日韩国产av| 亚洲第一成人久久网站| 成人在线免费视频观看| 成人H在线| 午夜性爱网| 夜夜爽7777精品国产三级| 国产秘久久一区二区| 激情五月天综合网| 日韩成人影片| 国产视频成人| 国产97视频| 亚洲www视频| 亚洲中文在线视频| 三级91| 黄色视频在线观看18| 特黄AAAAAAAAA真人毛片| 一区二区三区四区无码| 一本一本久久a久久精品牛牛影视 91无码人妻精品一区二区蜜桃 | 日韩国产在线| 亚洲欧美成人在线视频| 91视频在线| 国产TS在线| 色色欧美色色| 免费观看黄色小视频| 国产性综合| 免费av在线播放| 中文字幕一区三区人妻视频| 欧美熟妇精品黑人巨大一二三区| 免费无码婬片AAAAA片| 日韩欧美爱爱| 天堂视频在线观看亚洲美女| 成人网址| 日本视频精品| 搡BBBB推BBBB推BBBB| 日韩中文字幕无码中字字幕| 囯产精品久久久久久久久久久久久久 | 色妞视频| 亚洲A网站| 久久一二三区| 欧美性受XXXX黑人XYX性爽一 | 国产高清小视频| 强伦轩人妻一区二区三区70后| 日韩成人黄色| 黄色视频日韩| 中文字幕一区二区三区免费2023| 亚洲福利网| 特级毛片| 狠狠操2019| 国产欧美一区在线看| 国产无套内射视频| 色老板在线精品免费观看| 北条麻妃高清无码| 日韩精品中文字幕在线观看| 偷拍99| 成人无码日韩精品| 亚洲无码操逼视频| 欧美日比视频| 操鸡视频在线观看| 日韩精品视频在线| 91无码秘蜜桃一区二区三区-百度 精品人妻一区二区三区在线视频不卡 | 中韩一区二区| 99无码国产成人精品| 热re99久久精品国产99热| 五月天中文字幕| 五月婷在线观看| 国产偷拍精品视频| 久久九九国产| 欧美视频久久| 在线观看视频一区| 免费的av网站| 四川少妇搡BBw搡BBBB搡| 国模精品无码一区二区免费蜜桃| 69成人在线电影| 土耳其电影《爱与罚》| 大黄网站在线观看| 粉嫩99国产精品久久久久久人妻| 国产精品天天干| 手机av在线观看| 欧洲毛片基地c区| 国产欧美一区二区三区四区| 无码人妻一区二区三区蜜桃视频| 三级片久久| 国产在线视频一区二区三区| www.啪| 国产小黄片| 中文在线免费看视频| 中国一级黄片| 臭小子啊轻点灬太粗太长了的视频 | 青青操在线| 色99在线| 青青草视频在线观看| 色妞视频| 无码人妻丰满熟妇啪啪| 亚洲中文无码视频| 欧美日韩亚洲中文字幕| 日逼无码视频| 中文字幕精品视频| 中文字幕一区二区三区日本在线| 婷婷五月激情小说| 嫩BBB槡BBBB槡BBB| 狠狠色色| 三级片男人天堂| 日日撸夜夜撸| 91伊人久热精品| 午夜福利无码视频| 日本天堂在线| 成人做爰100片免费视频| 日本欧美久久久久免费播放网| 婷婷精品在线| ThePorn精品无码| 免费18蜜桃久久19| 婷婷五月天国产| 亚洲狠狠撸| 久草新| 在线免费看毛片| 国产乱子伦一区二区三区在线观看| 3d动漫一区二区| 一级女婬片A片AAAA片| 亚洲无吗在线观看| 人人操天天| 奇米色色| 91免费高清视频| 国产无码电影在线观看| 兔子先生和優奈玩游戲脫衣服,運氣報表優奈輸到脫精光 | 丁香六月激情婷婷| 不卡无码中文字幕一区| 精品成人在线| 黃色一級片黃色一級片尖叫声-百度-百 | 在线观看2区| 亚洲一卡二卡| 国产视频一区二区在线观看| 九九re精品视频在线观看| 18禁网址| 亚洲天堂色| 91性爱视频在线观看| 一区无码视频| 影音先锋自拍| 探花AV| 中文字幕日本成人| 丁香五月亭亭| 日韩乱伦小说| 成人无码区免费A片久久| 啪啪视频在线观看| 卡一卡二卡三| 91色色色| 2025av天堂网| 日韩视频91| 一区无码视频| 日韩av在线免费观看| 亚洲性爱影院| 欧美在线| 国产精品探花熟女| 亚洲成人一区| 免费无码进口视频| 成人久久综合| 欧美日韩免费观看视频| 日韩东京热中文字幕| 国产精品片| 日韩视频网址| 高清无码视频免费看| 国产亚洲视频在线观看视频| 成人一级电影| 操逼网国产| 日韩三级在线播放| 99AV| 久久香蕉网| 97超碰人妻| 欧美日韩色| 北条麻妃中文字幕旡码| 九九九九九九国产| 国产在线观看免费视频| 大荫蒂hd大荫蒂视频| 亚洲高清视频免费| 欧美性爱第四页| 亚洲免费MV| 男女午夜福利| 东京热在线视频观看| 一区二区三级片| 一本色道久久综合狠狠躁| 黄网站在线观看| 另类罕见稀奇videos| 伊人久久香| 刘玥一级婬片A片AAA| 97超碰色| 婷婷色色婷婷五月天| 美女做爱视频| 亚洲色在线观看| 免费观看高清无码| 精品狼友| 五月天超碰| 五月婷婷激情| 黄色成人视频在线免费观看| 特级艺体西西444WWw| 操B影院| 干少妇视频| 国产精品乱码毛片在线人与| 欧美三级片在线播放| 亚洲天堂成人网| AV网站在线免费观看| 亚洲婷婷综合网| 炮友五月天| 亚洲日韩乱码在线| 插插视频| 欧美色色色色色色| 亚洲精品无码a片| 麻豆精品国产传媒| 成人一级黄色电影| 久久人人做| 黄色视频在线免费看| 丁香五月天视频| 黄色视频在线观看国产| 欧美av| 1000部毛片A片免费视频| 黄片精品| 木牛AV| 91成人在线观看学生和老师| 五月丁香伊人| 草草久久久无码国产专区的优势| 黄色三级电影| 91综合视频在线播放| 久久高潮| 在线免费三级| 成人小说视频在线社区| 成人在线视频网站| 黄色小网站在线观看| 国产精品911| 亚洲AV无码精品国产| 国产亚洲无码激情| 亚洲A片视频| 亚洲国产精品成人网站| 亚洲在线视频| 亚洲日韩中文字幕| 高清AV无码| 中文字幕四区| 啪啪网站免费| 91吴梦梦无码一区二区| 日韩av一级| 超碰超爽| 一级免费毛片| A片一级片| 91啪啪视频| 波多野结衣高清无码视频| 成人AV三级片| 狠狠色婷婷| 人妻av在线| 另类小说五月天| 日韩A√| 草草视频在线观看| 欧美日韩在线视频免费| 国产成人片在线观看| 婷婷精品秘进入| 国产女人免费| 特黄特黄免费看| 日本中文字幕在线观看| 51妺妺嘿嘿午夜成人A片| 激情综合婷婷| 91小视频在线观看| 黄色在线视频网站| 玖玖av| 黄色一级片免费观看| 欧美性猛交XXXXⅩXX| 四虎成人精品永久免费AV九九 | www.操| 黄色福利视频在线观看| 三级视频国产| 天堂成人av| 久久久综合网| 日韩中文字幕无码人妻| 色四播播| 日韩人妻无码专区一区二区| 大香蕉在线视频99| 免费看a| 婷婷五月中文字幕| 日本色色| 陈冠希和张柏芝mv| 久久综合热| 成人做爰黄AA片免费看三区 | 亚洲黄色小视频| 国产又大又黄| 在线看91| 家庭乱伦AV| 青青草成人电影| 亚洲一级性爱| 色播AV| 亚洲精品久久久久毛片A级绿茶| 亚洲第一色婷婷| 国产欧美综合一区二区| 亚洲中文免费观看| 能看毛片的网站| 欧美wwwww| 亚洲日韩色色| 91香蕉视频在线看| 手机无码在线播放| 人人操人人爱人人摸| 国产三级黄色片| 久久天堂影院| 熟女啪啪| 色欲成人AV| 国产精品AV网站| 亚洲AV无码国产精品二区| 国内自拍激情视频| 亚洲欧美熟妇久久久久久久久| 亚洲成人一区二区在线观看| 欧美激情色色| 中文免费高清在线观看视频| 一级黄色电影A片| 亚洲免费MV| 最新AV在线播放| 久久久精品电影91| 中文字幕日本欧美| 欧美怕怕怕| 人妻少妇一区二区| 中字无码AV| 久久A√一区二区| 欧美综合视频在线观看| 成人国产精品秘欧美高清| 国产精品久久久久的角色| 日韩AV免费网站| 精品人妻人人操| 无码人妻av一区| 欧美+日产+中文| 国产高清AV在线| 特级西西人体www高清大胆| 中国精品77777777| 亚洲午夜无码久久久| 日本免费不卡视频| 成人美女视频| 大香蕉尹人在线观看| 久久色播| 福利在线| 国产一级操逼视频| 婷婷五月天国产| 日韩午夜福利视频| 成人无码区免费AV片| 人人插人人操| 中国女人操逼视频| 久操影视| 欧美人操逼一二区| 神马午夜av| 四虎影库男人天堂| 亚洲成人人妻| 无码AV天堂| 亚洲精品福利视频导航| 操老女人逼视频| 天天天天天天天操| 大地影视中文第三页最新在线观看| 色婷婷18禁| 欧美另类色| 无码视频一区二区三区| 亚洲成人天堂| 日韩一级免费视频| 中文字幕亚洲有码| 大香蕉AV在线| 色四播播| 国偷自产视频一区二区久| 日本色中文字幕| 国产精品一区二区免费| 亚洲视频福利| 中文字幕手机在线视频| 五月天成人网址| 日韩精品中文字幕无码| 无码一区二区三区四| 18禁网站在线| 成人二区| 男女操逼视频网站免费| 无码精品一区二区三区在线观看| 青草视频在线观看免费| 二区视频在线| 五月乱伦| 人人爽久久涩噜噜噜网站| 色香蕉在线| 中文字幕在线有码| 国产对白在线| 日韩无码免费| 欧美footjob| 91AV免费看| 99精品999| 天天综合在线观看| 欧美高清无码在线观看| 欧美黄色三级片| 无码免费一区二区| 大香蕉久| 北条麻妃在线观看香蕉| 欧美三级免费| 51伦理| 韩国免费一级a一片在线播放| 日韩免费视频观看| 毛片毛片毛片毛片毛片毛片| 操逼视频在线播放| 91丨露脸丨熟女| 2019中文字幕在线| 黄色成人网站大全| 豆花视频免费| 婷婷五月开心五月| 国产无码中文字幕| 91口爆| 夜夜骚精品人妻av一区| 欧美日韩四区| 2021国产精品视频| 人人天天爽| 一级黄色片免费| 伊人久久免费视频| 亚洲少妇视频| 国产性交网站| 天堂综合网久久| 免费人成视频在线播放| 91视频在| a黄色片| 无码av网站| 中文字幕精品在线免费视频观看视频 | 亚洲日韩中文字幕无码| 午夜在线无码| 久久久久久免费毛片精品| 天天骑夜夜操| 欧美偷拍视频| 翔田千里无码精品| 国产高清激情| 麻豆传媒在线| 狠狠色婷婷777| 欧美日韩三区| 东京热视频在线观看| 暴操美女网站| 亚洲欧美日韩中文字幕在线观看| 无码秘蜜桃吴梦梦| 老熟女一区二区三区| 999无码| 中文字幕午夜福利| 制服.丝袜.亚洲.中文.豆花 | 国外成人性视频免费| 69AV在线播放| 色一区二区三区| 天天操免费| 国产美女被爽到高潮免费A片软件 国产无遮挡又黄又爽又色视频软件 | 天天玩天天操| 久草新在线| 澳门黄片| 国产精品久久免费视频| 在线免费中文字幕| 18禁激韩| 中文字幕网站| 中文字幕在线观看a| 欧美激情一区二区A片成人牛牛| 在线观看视频无码| 无码日| 一级黄色片免费看| 五月亚洲六月婷婷| 综合合一品道| 天堂资源中文在线| 性爱国产| 欧美日韩中国操逼打炮| 精品国产久久久久| 丰满人妻一区二区三区四区54| 俺也去啦WWW色官网| 天天干天天做| 国产一毛a一毛a在线观看| 岛国AV免费在线| 中文字幕成人视频| 成人日韩无码| 亚洲无码激情在线| 国产精品无码无套在线照片| 成人亚洲AV| 亚洲一级内射| 操美女影院| 先锋影音资源一区| 欧美性BBB槡BBB槡BBB| 丁香五月天堂| 日本成人中文字幕在线观看| 欧美久久性爱视频| 精品国产午夜福利在线观看| 日韩午夜精品| 91无码一区二区三区在线| 日本99视频| 久草国产视频| 99热18| a片视频免费观看| 天天插天天拍| WWWA片| 青娱乐精品视频| 91成人免费在线观看| 蜜臀av在线播放| 内射无码专区久久亚洲| 草久美女| 91在线视频免费播放| 亚洲日韩欧美在线观看| 成人性生活免费视频| 啪啪网网站| 午夜性福利视频| 色欲av伊人久久大香线蕉影院| 欧美一级在线观看| 天天久久毛片| 亚洲性爱视频| 蜜桃av秘无码一区二区三区| 亚洲午夜无码精品专区| 成人免费乱码大片a毛片蜜芽| 美女肏逼| 国产一级黄片| 九九九九九九精品视频| 久久久久精| 日本a在线| 高清无码一区二区在线| 日韩精品在线免费| 亚洲va国产va天堂va久久| 国产欧美毛片| 亚洲天堂影音先锋| 一级A黄色片| 成人毛片在线播放免费| 婷婷深爱激情| a视频免费观看| 91精品视频在线| 伊人大香蕉婷婷| 操逼视频免费网站| 久久久亚洲无码| 亚洲国产免费视频| 五月天一区二区| 久久er| igao在线观看| 国产黄色免费电影| 欧美一卡二卡三卡| 亲子乱AV一区二区| 91AV在线电影| 综合天堂AV久久久久久久| 日韩欧美一级A片| 人人干97| 亚洲黄色电影网站| 黄色视频免费在线看| 国产无遮挡又黄又爽又色| 日本精品视频在线观看| 免费日韩AV| 国产成人高清视频| 午夜国产在线| 日皮视频在线观看免费| 亚洲成人AV无码| 97人人操| 亚洲无码少妇| 老太色HD色老太HD| 狠狠干| 翔田千里在线观看| 北条麻妃高清无码| 欧美性BBwBBwBBwHD| 97精品一区二区三区A片| 夜夜爽久久精品91| 蜜芽av在线观看| 日本成人电影在线观看| 五月天激情婷婷| 精品国产999久久久免费| 东方a在线| 日韩欧美高清| 中文字幕免费无码| 正在播放国产精品| 国产g蝌蚪| 欧美人人爱| 蜜桃视频网站| 亚洲AV无码成人精品区www| 91在线网址| 亚洲搞清视频日本| 亚洲在线中文| 成人午夜福利网站| 日韩av电影免费在线观看| 簧片在线免费观看| 在线观看高清无码| 亚洲成年人在线| 激情综合婷婷| 亚洲精品国产精品乱码不卡√香蕉 | 97伊人大香蕉| 色五月天婷婷| 婷婷五月大香蕉| 亚洲精品久久久久久久久蜜桃| 泄火熟妇2-ThePorn| 亚洲操屄| 国产无码中文字幕| 青娱乐黄片| 一本道综合网| 无码电影网| 一级片网址| 免费v片在线观看| 人妻丝袜蕾丝高跟双飞| 大香蕉东京热| 国产午夜激情| 欧美黄色成人视频|