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

天天都在使用的 Java 注解,你真的了解它嗎?

共 18294字,需瀏覽 37分鐘

 ·

2020-11-29 01:22




Hello,大家好,我是阿粉,Java 的注解相信大家天天都在用,但是關(guān)于注解的原理,大家都了解嗎?這篇文章通過(guò)意見(jiàn)簡(jiǎn)單的示例給大家演示一下注解的使用和原理。

Java 元注解

注解(Annotation)是一種可以放在 Java 類上,方法上,屬性上,參數(shù)前面的一種特殊的注釋,用來(lái)注釋注解的注解叫做元注解。元注解我們平常不會(huì)編寫(xiě),只需要添加到我們自己編寫(xiě)的注解上即可,。

Java 自帶的常用的元注解有@Target@Retention,@Documented,@Inherited 分別有如下含義

  1. @Target:標(biāo)記這個(gè)注解使用的地方,取值范圍在枚舉 java.lang.annotation.ElementTypeTYPE,FIELD,METHOD,PARAMETER,CONSTRUCTOR,LOCAL_VARIABLE,ANNOTATION_TYPE,PACKAGE,TYPE_PARAMETER,TYPE_USE。
  2. @Retention :標(biāo)識(shí)這個(gè)注解的生命周期,取值范圍在枚舉 java.lang.annotation.RetentionPolicySOURCE,CLASS,RUNTIME,一般定義的注解都是在運(yùn)行時(shí)使用,所有要用 @Retention(RetentionPolicy.RUNTIME);
  3. @Documented:表示注解是否包含到文檔中。
  4. @Inherited :使用@Inherited定義子類是否可繼承父類定義的Annotation。@Inherited僅針對(duì)@Target(ElementType.TYPE)類型的annotation有效,并且僅針對(duì)class的繼承,對(duì)interface的繼承無(wú)效。

定義注解

上面介紹了幾個(gè)元注解,下面我們定義一個(gè)日志注解來(lái)演示一下,我們通過(guò)定義一個(gè)名為OperationLog ?的注解來(lái)記錄一些通用的操作日志,比如記錄什么時(shí)候什么人查詢的哪個(gè)表的數(shù)據(jù)或者新增了什么數(shù)據(jù)。編寫(xiě)注解我們用的是 @interface 關(guān)鍵字,相關(guān)代碼如下:

package?com.api.annotation;

import?java.lang.annotation.*;

/**
?*?

?*?Function:

?*?Author:@author?子悠

?*?Date:2020-11-17 22:10

?*?Desc:用于記錄操作日志

?*/

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

????/**
?????*?操作類型
?????*
?????*?@return
?????*/

????String?type()?default?OperationType.SELECT;

????/**
?????*?操作說(shuō)明
?????*
?????*?@return
?????*/

????String?desc()?default?"";

????/**
?????*?請(qǐng)求路徑
?????*
?????*?@return
?????*/

????String?path()?default?"";

????/**
?????*?是否記錄日志,默認(rèn)是
?????*
?????*?@return
?????*/

????boolean?write()?default?true;

????/**
?????*?是否需要登錄信息
?????*
?????*?@return
?????*/

????boolean?auth()?default?true;
???/**
?????*?當(dāng)?type?為?save?時(shí)必須
?????*
?????*?@return
?????*/

????String?primaryKey()?default?"";

????/**
?????*?對(duì)應(yīng)?service?的?Class
?????*
?????*?@return
?????*/

????Class?defaultServiceClass()?default?Object.class;
}

說(shuō)明

上面的注解,我們?cè)黾恿?code style="font-size: 14px;overflow-wrap: break-word;padding: 2px 4px;border-radius: 4px;margin-right: 2px;margin-left: 2px;background-color: rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(40, 202, 113);">@Target({ElementType.METHOD}) , @Retention(RetentionPolicy.RUNTIME), @Documented 三個(gè)元注解,表示我們這個(gè)注解是使用在方法上的,并且生命周期是運(yùn)行時(shí),而且可以記錄到文檔中。然后我們可以看到定義注解采用的u是@interface ?關(guān)鍵字,并且我們給這個(gè)注解定義了幾個(gè)屬性,同時(shí)設(shè)置了默認(rèn)值。主要注意的是平時(shí)我們編寫(xiě)的注解一般必須設(shè)置@Target@Retention,而且 @Retention一般設(shè)置為RUNTIME,這是因?yàn)槲覀冏远x的注解通常要求在運(yùn)行期讀取,另外一般情況下,不必寫(xiě)@Inherited。

使用

上面的動(dòng)作只是把注解定義出來(lái)了,但是光光定義出來(lái)是沒(méi)有用的,必須有一個(gè)地方讀取解析,才能提現(xiàn)出注解的價(jià)值,我們就采用 Spring 的 AOP 攔截這個(gè)注解,將所有攜帶這個(gè)注解的方法所進(jìn)行的操作都記錄下來(lái)。

package?com.api.config;

import?lombok.extern.slf4j.Slf4j;
import?org.aspectj.lang.ProceedingJoinPoint;
import?org.aspectj.lang.annotation.Around;
import?org.aspectj.lang.annotation.Aspect;
import?org.aspectj.lang.annotation.Pointcut;
import?org.aspectj.lang.reflect.MethodSignature;
import?org.springframework.beans.factory.annotation.Autowired;
import?org.springframework.core.annotation.Order;
import?org.springframework.stereotype.Component;
import?org.springframework.web.bind.annotation.GetMapping;
import?org.springframework.web.bind.annotation.PostMapping;
import?org.springframework.web.bind.annotation.RequestMapping;

import?javax.servlet.http.HttpServletRequest;
import?java.lang.reflect.Field;
import?java.lang.reflect.Method;
import?java.util.*;

/**
?*?

?*?Function:

?*?Author:@author?子悠

?*?Date:2020-11-17 14:40

?*?Desc:aspect for operation log

?*/

@Aspect
@Component
@Order(-5)
@Slf4j
public?class?LogAspect?{
????/**
?????*?Pointcut?for?methods?which?need?to?record?operate?log
?????*/

????@Pointcut("within(com.xx.yy.controller..*)?&&?@annotation(com.api.annotation.OperationLog)")
????public?void?logAspect()?{
????}

????/**
?????*?record?log?for?Admin?and?DSP
?????*
?????*?@param?joinPoint?parameter
?????*?@return?result
?????*?@throws?Throwable
?????*/

????@Around("logAspect()")
????public?Object?around(ProceedingJoinPoint?joinPoint)?throws?Throwable?{
????????Object?proceed?=?null;
????????String?classType?=?joinPoint.getTarget().getClass().getName();
????????Class?targetCls?=?Class.forName(classType);
????????MethodSignature?ms?=?(MethodSignature)?joinPoint.getSignature();
????????Method?targetMethod?=?targetCls.getDeclaredMethod(ms.getName(),?ms.getParameterTypes());
????????OperationLog?operation?=?targetMethod.getAnnotation(OperationLog.class);
????????if?(null?!=?operation?&&?operation.write())?{
????????????SysMenuOpLogEntity?opLogEntity?=?new?SysMenuOpLogEntity();
????????????StringBuilder?change?=?new?StringBuilder();
????????????if?(StrUtil.isNotBlank(operation.type()))?{
????????????????switch?(operation.type())?{
????????????????????case?OperationType.ADD:
????????????????????????proceed?=?joinPoint.proceed();
????????????????????????String?addString?=?genAddData(targetCls,?operation.defaultServiceClass(),?joinPoint.getArgs());
????????????????????????opLogEntity.setAfterJson(addString);
????????????????????????change.append(OperationType.ADD);
????????????????????????break;
????????????????????case?OperationType.DELETE:
????????????????????????String?deleteString?=?autoQueryDeletedData(targetCls,?operation.primaryKey(),?operation.defaultServiceClass(),?joinPoint.getArgs());
????????????????????????opLogEntity.setBeforeJson(deleteString);
????????????????????????change.append(OperationType.DELETE);
????????????????????????proceed?=?joinPoint.proceed();
????????????????????????break;
????????????????????case?OperationType.EDIT:
????????????????????????change.append(OperationType.EDIT);
????????????????????????setOpLogEntity(opLogEntity,?targetCls,?operation.primaryKey(),?operation.defaultServiceClass(),?joinPoint.getArgs());
????????????????????????proceed?=?joinPoint.proceed();
????????????????????????break;
????????????????????case?OperationType.SELECT:
????????????????????????opLogEntity.setBeforeJson(getQueryString(targetCls,?operation.defaultServiceClass(),?joinPoint.getArgs()));
????????????????????????change.append(operation.type());
????????????????????????proceed?=?joinPoint.proceed();
????????????????????????break;
????????????????????case?OperationType.SAVE:
????????????????????????savedDataOpLog(opLogEntity,?targetCls,?operation.primaryKey(),?operation.defaultServiceClass(),?joinPoint.getArgs());
????????????????????????change.append(operation.type());
????????????????????????proceed?=?joinPoint.proceed();
????????????????????????break;
????????????????????case?OperationType.EXPORT:
????????????????????case?OperationType.DOWNLOAD:
????????????????????????change.append(operation.type());
????????????????????????proceed?=?joinPoint.proceed();
????????????????????????break;
????????????????????default:
????????????????}
????????????????opLogEntity.setExecType(operation.type());
????????????}
????????????StringBuilder?changing?=?new?StringBuilder();
????????????if?(StrUtil.isNotBlank(opLogEntity.getExecType()))?{
????????????????if?(operation.auth())?{
????????????????????LoginUserVO?loginUser?=?getLoginUser();
????????????????????if?(null?!=?loginUser)?{
????????????????????????opLogEntity.setUserId(loginUser.getUserId());
????????????????????????opLogEntity.setUserName(loginUser.getUserName());
????????????????????????changing.append(loginUser.getUserName()).append("-");
????????????????????}?else?{
????????????????????????log.error("用戶未登錄");
????????????????????}
????????????????}
????????????????opLogEntity.setCreateTime(DateUtils.getCurDate());
????????????????opLogEntity.setRemark(getOperateMenuName(targetMethod,?operation.desc()));
????????????????opLogEntity.setPath(getPath(targetMethod,?targetMethod.getName()));
????????????????opLogEntity.setChanging(changing.append(change).toString());
????????????????menuOpLogService.save(opLogEntity);
????????????}
????????}
????????return?proceed;
????}

????/**
?????*?query?data?by?userId
?????*
?????*?@param?targetCls???????????class
?????*?@param?defaultServiceClass?default?service?class
?????*?@return
?????*?@throws?Exception
?????*/

????private?String?queryByCurrentUserId(Class?targetCls,?Class?defaultServiceClass)?throws?Exception?{
????????BaseService?baseService?=?getBaseService(targetCls,?defaultServiceClass);
????????LoginUserVO?loginUser?=?dspBaseService.getLoginUser();
????????if?(null?!=?loginUser)?{
????????????Object?o?=?baseService.queryId(loginUser.getUserId());
????????????return?JsonUtils.obj2Json(o);
????????}
????????return?null;
????}

????/**
?????*?return?query?parameter
?????*
?????*?@param?targetCls???????????class
?????*?@param?args????????????????parameter
?????*?@param?defaultServiceClass?default?service?class
?????*?@return
?????*?@throws?Exception
?????*/

????private?String?getQueryString(Class?targetCls,?Class?defaultServiceClass,?Object[]?args)?{
????????if?(args.length?>?0)?{
????????????Class?entityClz?=?getEntityClz(targetCls,?defaultServiceClass);
????????????for?(Object?arg?:?args)?{
????????????????if?(arg.getClass().equals(entityClz)?||?arg?instanceof?BaseModel)?{
????????????????????return?JsonUtils.obj2Json(arg);
????????????????}
????????????}
????????}
????????return?null;
????}

????/**
?????*?save?record?log?while?OperatorType?is?SAVE
?????*
?????*?@param?opLogEntity?????????entity
?????*?@param?targetCls???????????class
?????*?@param?primaryKey??????????primaryKey
?????*?@param?defaultServiceClass?default?service?class
?????*?@param?args????????????????parameter
?????*?@throws?Exception
?????*/

????private?void?savedDataOpLog(SysMenuOpLogEntity?opLogEntity,?Class?targetCls,?String?primaryKey,?Class?defaultServiceClass,?Object[]?args)?throws?Exception?{
????????Class?entityClz?=?getEntityClz(targetCls,?defaultServiceClass);
????????BaseService?baseService?=?getBaseService(targetCls,?defaultServiceClass);
????????for?(Object?arg?:?args)?{
????????????if?(arg.getClass().equals(entityClz))?{
????????????????if?(StrUtil.isNotBlank(primaryKey))?{
????????????????????Field?declaredField?=?entityClz.getDeclaredField(primaryKey);
????????????????????declaredField.setAccessible(true);
????????????????????Object?primaryKeyValue?=?declaredField.get(arg);
????????????????????//if?primary?key?is?not?null?that?means?edit,?otherwise?is?add
????????????????????if?(null?!=?primaryKeyValue)?{
????????????????????????//query?data?by?primary?key
????????????????????????Object?o?=?baseService.queryId(primaryKeyValue);
????????????????????????opLogEntity.setBeforeJson(JsonUtils.obj2Json(o));
????????????????????}
????????????????}
????????????????opLogEntity.setAfterJson(JsonUtils.obj2Json(arg));
????????????}
????????}
????}

????/**
?????*?set?parameter?which?edit?data
?????*
?????*?@param?opLogEntity?????????entity
?????*?@param?targetCls???????????class
?????*?@param?primaryKey??????????primaryKey
?????*?@param?defaultServiceClass?default?service?class
?????*?@param?args????????????????parameter
?????*?@throws?Exception
?????*/

????private?void?setOpLogEntity(SysMenuOpLogEntity?opLogEntity,?Class?targetCls,?String?primaryKey,?Class?defaultServiceClass,?Object[]?args)?throws?Exception?{
????????Map?saveMap?=?autoQueryEditedData(targetCls,?primaryKey,?defaultServiceClass,?args);
????????if?(null?!=?saveMap)?{
????????????if?(saveMap.containsKey(ASPECT_LOG_OLD_DATA))?{
????????????????opLogEntity.setBeforeJson(saveMap.get(ASPECT_LOG_OLD_DATA));
????????????}
????????????if?(saveMap.containsKey(ASPECT_LOG_NEW_DATA))?{
????????????????opLogEntity.setBeforeJson(saveMap.get(ASPECT_LOG_NEW_DATA));
????????????}
????????}
????}

????/**
?????*?query?data?for?edit?and?after?edit?operate
?????*
?????*?@param?targetCls???????????class
?????*?@param?primaryKey??????????primaryKey
?????*?@param?defaultServiceClass?default?service?class
?????*?@param?args????????????????parameter
?????*?@return?map?which?data
?????*?@throws?Exception
?????*/

????private?Map?autoQueryEditedData(Class?targetCls,?String?primaryKey,?Class?defaultServiceClass,?Object[]?args)?throws?Exception?{
????????if?(StrUtil.isBlank(primaryKey))?{
????????????throw?new?Exception();
????????}
????????Map?map?=?new?HashMap<>(16);
????????Class?entityClz?=?getEntityClz(targetCls,?defaultServiceClass);
????????BaseService?baseService?=?getBaseService(targetCls,?defaultServiceClass);
????????for?(Object?arg?:?args)?{
????????????if?(arg.getClass().equals(entityClz))?{
????????????????Field?declaredField?=?entityClz.getDeclaredField(primaryKey);
????????????????declaredField.setAccessible(true);
????????????????Object?primaryKeyValue?=?declaredField.get(arg);
????????????????//query?the?data?before?edit
????????????????if?(null?!=?primaryKeyValue)?{
????????????????????//query?data?by?primary?key
????????????????????Object?o?=?baseService.queryId(primaryKeyValue);
????????????????????map.put(ASPECT_LOG_OLD_DATA,?JsonUtils.obj2Json(o));
????????????????????map.put(ASPECT_LOG_NEW_DATA,?JsonUtils.obj2Json(arg));
????????????????????return?map;
????????????????}
????????????}
????????}
????????return?null;
????}

????/**
?????*?return?JSON?data?which?add?operate
?????*
?????*?@param?targetCls???????????class
?????*?@param?args????????????????parameter
?????*?@param?defaultServiceClass?default?service?class
?????*?@return?add?data?which?will?be?added
?????*?@throws?Exception
?????*/

????private?String?genAddData(Class?targetCls,?Class?defaultServiceClass,?Object[]?args)?throws?Exception?{
????????List?parameter?=?new?ArrayList<>();
????????for?(Object?arg?:?args)?{
????????????if?(arg?instanceof?HttpServletRequest)?{
????????????}?else?{
????????????????parameter.add(arg);
????????????}
????????}
????????return?JsonUtils.obj2Json(parameter);
????}

????/**
?????*?query?delete?data?before?delete?operate
?????*
?????*?@param?targetCls???????????class
?????*?@param?primaryKey??????????primaryKey
?????*?@param?defaultServiceClass?default?service?class
?????*?@param?ids?????????????????ids
?????*?@return?delete?data?which?will?be?deleted
?????*?@throws?Throwable
?????*/

????private?String?autoQueryDeletedData(Class?targetCls,?String?primaryKey,?Class?defaultServiceClass,?Object[]?ids)?throws?Throwable?{
????????if?(StrUtil.isBlank(primaryKey))?{
????????????throw?new?OriginException(TipEnum.LOG_ASPECT_PRIMARY_KEY_NOT_EXIST);
????????}
????????//get?service
????????BaseService?baseService?=?getBaseService(targetCls,?defaultServiceClass);
????????//get?entity
????????Class?entityClz?=?getEntityClz(targetCls,?defaultServiceClass);
????????//query?deleted?data?by?primary?key
????????Query?query?=?new?Query();
????????WhereOperator?whereOperator?=?new?WhereOperator(entityClz);
????????Set?set?=?new?HashSet<>(Arrays.asList((Object[])?ids[0]));
????????whereOperator.and(primaryKey).in(set.toArray());
????????query.addWhereOperator(whereOperator);
????????List?list?=?baseService.queryList(query);
????????return?JsonUtils.obj2Json(list);
????}


????/**
?????*?return?service?by?targetCls
?????*
?????*?@param?targetCls???????????current?controller?class
?????*?@param?defaultServiceClass?default?service?class
?????*?@return?service?instance
?????*?@throws?Exception
?????*/

????private?BaseService?getBaseService(Class?targetCls,?Class?defaultServiceClass)?throws?Exception?{
????????//根據(jù)類名拿到對(duì)應(yīng)的?service?名稱
????????String?serviceName?=?getServiceName(targetCls,?defaultServiceClass);
????????BaseService?baseService;
????????if?(null?!=?defaultServiceClass)?{
????????????baseService?=?(BaseService)?ApplicationContextProvider.getBean(serviceName,?defaultServiceClass);
????????}?else?{
????????????Class?type?=?targetCls.getDeclaredField(serviceName).getType();
????????????baseService?=?(BaseService)?ApplicationContextProvider.getBean(serviceName,?type);
????????}
????????return?baseService;
????}

????/**
?????*?return?service?name
?????*
?????*?@param?targetCls???????????current?controller?class
?????*?@param?defaultServiceClass?default?service?class
?????*?@return?service?name
?????*/

????private?String?getServiceName(Class?targetCls,?Class?defaultServiceClass)?{
????????if?(null?!=?defaultServiceClass?&&?Object.class?!=?defaultServiceClass)?{
????????????return?StrUtil.left(defaultServiceClass.getSimpleName(),?1).toLowerCase()?+?defaultServiceClass.getSimpleName().substring(1);
????????}
????????return?StrUtil.left(targetCls.getSimpleName(),?1).toLowerCase()?+?targetCls.getSimpleName().substring(1).replace("Controller",?"Service");
????}


????/**
?????*?return?entity?class
?????*
?????*?@param?targetCls???????????current?controller?class
?????*?@param?defaultServiceClass?default?service?class
?????*?@return?entity?class
?????*?@throws?Exception
?????*/

????private?Class?getEntityClz(Class?targetCls,?Class?defaultServiceClass)?{
????????try?{
????????????Class?type;
????????????if?(null?!=?defaultServiceClass?&&?Object.class?!=?defaultServiceClass)?{
????????????????type?=?defaultServiceClass;
????????????}?else?{
????????????????type?=?targetCls.getDeclaredField(getServiceName(targetCls,?null)).getType();
????????????}
????????????String?entityName?=?type.getName().replace("service",?"entity").replace("Service",?"Entity");
????????????Class?entityClz?=?Class.forName(entityName);
????????????return?entityClz;
????????}?catch?(Exception?e)?{
????????????log.error("獲取?class?失敗");
????????}
????????return?null;
????}


????/**
?????*?require?path
?????*
?????*?@param?targetMethod?target?method
?????*?@param?defaultPath??default?require?path
?????*?@return?require?path
?????*/

????private?String?getPath(Method?targetMethod,?String?defaultPath)?{
????????String?path?=?defaultPath;
????????PostMapping?postMapping?=?targetMethod.getAnnotation(PostMapping.class);
????????GetMapping?getMapping?=?targetMethod.getAnnotation(GetMapping.class);
????????RequestMapping?requestMapping?=?targetMethod.getAnnotation(RequestMapping.class);
????????if?(null?!=?postMapping)?{
????????????path?=?postMapping.value()[0];
????????}?else?if?(null?!=?getMapping)?{
????????????path?=?getMapping.value()[0];
????????}?else?if?(null?!=?requestMapping)?{
????????????path?=?requestMapping.value()[0];
????????}
????????return?path;
????}

}


上面的代碼中我們定義了一個(gè)切面指定需要攔截的包名和注解,因?yàn)樯婕暗胶芏鄻I(yè)務(wù)相關(guān)的代碼,所以不能完整的提供出來(lái),但是整個(gè)思路就是這樣的,在每種操作類型前后將需要記錄的數(shù)據(jù)查詢出來(lái)進(jìn)行記錄。代碼很長(zhǎng)主要是用來(lái)獲取相應(yīng)的參數(shù)值的,大家使用的時(shí)候可以根據(jù)自己的需要進(jìn)行取舍。比如在新增操作的時(shí)候,我們將新增的數(shù)據(jù)進(jìn)行記錄下來(lái);編輯的時(shí)候?qū)⒕庉嬊暗臄?shù)據(jù)查詢出來(lái)和編輯后的數(shù)據(jù)一起保存起來(lái),刪除也是一樣的,在刪除前將數(shù)據(jù)查詢出來(lái)保存到日志表中。

同樣導(dǎo)出和下載都會(huì)記錄相應(yīng)信息,整個(gè)操作類型的代碼如下:

package?com.api.annotation;

/**
?*?

?*?Function:

?*?Author:@author 子悠

?*?Date:2020-11-17 22:11

?*?Desc:無(wú)

?*/
public?interface?OperationType?{
????/**
?????*?新增
?????**/
????String?ADD?=?"add";
????/**
?????*?刪除
?????**/
????String?DELETE?=?"delete";
????/**
?????*?使用實(shí)體參數(shù)修改
?????**/
????String?EDIT?=?"edit";
????/**
?????*?查詢
?????**/
????String?SELECT?=?"select";

????/**
?????*?新增和修改的保存方法,使用此類型時(shí)必須配置主鍵字段名稱
?????**/
????String?SAVE?=?"save";

????/**
?????*?導(dǎo)出
?????**/
????String?EXPORT?=?"export";

????/**
?????*?下載
?????**/
????String?DOWNLOAD?=?"download";

}

后續(xù)在使用的時(shí)候只需要在需要的方法上加上注解,填上相應(yīng)的參數(shù)即可@OperationLog(desc = "查詢單條記錄", path = "/data")

總結(jié)

注解一個(gè)我們天天再用的東西,雖然不難,但是我們卻很少自己去寫(xiě)注解的代碼,通過(guò)這篇文章能給大家展示一下注解的使用邏輯,希望對(duì)大家有幫助。Spring 中的各種注解本質(zhì)上也是這種邏輯都需要定義使用和解析。很多時(shí)候我們可以通過(guò)自定義注解去解決很多場(chǎng)景,比如日志,緩存等。


喜歡就三連


關(guān)注 Stephen,一起學(xué)習(xí),一起成長(zhǎng)。


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

手機(jī)掃一掃分享

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

手機(jī)掃一掃分享

分享
舉報(bào)

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

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 无码一区二区在线观看| 久久一级片| 成人做爰100部免费网站| 日韩在线免费播放| 中文一区在线观看| 国产精品一区网站| 亚洲AV在线观看| 亚洲三级视频在线观看| 一区二区三区观看| 亚洲成人视频在线播放| 色色加勒比综合| 激情色播| 成人AV影院| 成人黄网站免费视频| 五月丁香视频在线| 柠檬福利第一导航| 久草这里只有精品| 免费看成人A片无码照片88hⅤ| 成年人黄色视频网站| 欧美日韩在线观看一区二区三区| 牛牛精品视频一区二区| 日韩精品视频在线| 久草视频福利| 亚洲无码123| h片免费网站| 国产精品一区二区AV日韩在线| 午夜亚洲国产一区视频网站| 午夜激情在线观看| 欧美综合在线观看| 北条麻妃无码一区二区| 99reav| 午夜性爱网址| 色婷婷91| 天天射天天干| 一级片在线观看视频| 久久久夜夜夜| 国外成人性视频免费| 在线日韩国产| 欧美激情xxx| gogogo高清在线观看免费直播中国 | 国产不卡在线观看| 国产人体视频| 97超碰人人摸| 友田真希一级婬片A片| 乱伦a片| 成人在线免费视频| 日韩综合一区| www.99爱| www.激情五月天| 亚洲性爱小说| www高清无码| 中文资源在线观看| 91欧美精品成人AAA片| 又粗又硬又爽18级A片| gay成人在线观看| 69AV在线观看| 欧美成人色图| 撸一撸在线| 日本免费不卡| 夜夜撸天天干| 日韩有码中文字幕在线观看| 97人人爽人人爽人人爽人人爽| 麻豆蜜桃91无码| 欧美亚洲系列| 欧美洲成人网站| 无码少妇| 91在线网站| 99精品视频在线播放免费| 2025AV天堂| 婷婷五月一区| 特级西西444www大精品| 成人性爱视频在线播放| 丁香啪啪| 亚洲ww国产a大作| 亚洲成人AV| 亚洲AV永久无码精品国产精| 人成免费网站| 色婷婷久久久久swag精品| 无码高清| 成人视频免费在线观看| 麻豆91视频| 国产suv精品一区二区| 啪啪国产| 91九色视频| 久久免费视屏| 国产日韩欧美在线播放| 91AV免费观看| 人人爽久久涩噜噜噜网站| 一区二区三区观看| 日韩亚洲在线观看| 91麻豆精品在线观看| 免费的一级片| 91无码影院| 免费国产黄色视频网站| 国产免费观看AV| 日本欧美中文字幕| 久久久老熟女一区二区三区91 | 久操视频在线观看| 丁香花在线小说免费全文| 中文字幕婷婷| 黄色一级网站| 人人射| 国产黄色免费| 亚洲国产精品视频| 蜜桃一区二区三区| 无码秘人妻一区红中av漫画| 黄色三级片网站| 亚洲最大成人网站| 午夜精品久久久久久久99黑人 | 国产第七页| 国产精品v欧美精品v日韩精品| 亚洲成人性爱在线| 在线观看亚洲无码视频| 好看的中文字幕av| 米奇色色色| 一级片国产| 国产又粗又大又爽| 波多野结衣无码网站| 亚洲国产中文字幕在线播放| 亚洲AV无码成人精品区h麻豆| 国产精品伊人| 久久久久一区二区三区| 亚洲一区2区| AAA片视频| 久草网在线观看| 一级片国产| 高清无码视频免费版本在线观看| 亚洲Av秘无码一区二区| 大肉大捧视频免费观看| 丁香婷婷综合网| 丝袜三级片| 四川少妇搡bbw搡bbbb| 可以免费看的黄色视频| 777色色色| 天堂网在线播放| 国产高清免费无码| 国产精品久久久久无码| 中文字幕成人视频| 无码免费一区| 国产黄A片免费网站免费| H片在线免费观看| 狠狠撸狠狠干| 500部大龄熟乱4K视频| 亚洲AV无码A片在线观看蜜桃| 亚洲天堂中文字幕| 综合欧美国产视频二区| 天天干天天上| 成人无码99| 免费av播放| 激情网站在线| 国产黄色视频免费在线观看| 免费的av网站| 亚洲电影av| AV在线直播| 麻豆视频在线观看| 五月丁香六月| 亚洲图片激情乱伦小说| A片欧美| 成人中文字幕无码| 日韩午夜在线观看| 97久久精品| 人人澡超碰碰| 91在线无码精品秘入口国战| 老鸭窝在线观看视频| 免费成人毛片| 成人精品18| 欧美午夜精品久久久| 欧美婷婷五月| 亚洲Av无码午夜国产精品色软件| 久久综合色色| AV免费网址| 蜜臀精品一区二区三区| 北京熟妇槡BBBB槡BBBB| 伊人久艹| 国产午夜福利电影| 亚洲无码中文人妻| 国产免费高清无码| 精品国精品自拍自在线| H片免费在线观看| 欧美国产日韩在线观看| 国产成人无码区免费AV片在线| 韩国精品无码一区二区三区18| 91久色| 国产一级美女操逼视频免费播放| 国产精品三级在线| 特级西西444www大胆高清图片 | 人人操人人摸人人爱| 中文字幕亚洲区| 成人A片在线观看| AV在线观看黄| 国产ts视频| 色色网的五月天| 国产成人精品无码| 五月天激情性爱| 欧美一级一级| 九九热精品| 亚洲精品图片| 2016超碰| 久9视频| 无码精品视频在线观看| 日韩一区二区三区视频| 日韩高清无码三级片| Chinese搡老女人| 天天干天天拍| 91熟女丰满原味| 激情婷婷在线| 日韩AV无码一区二区| 91小视频在线| 久久视频精品| 国产精品视频| 国产一级a毛一级a做免费的视频 | 伊人在线综合| 成人免费乱码大片a毛片蜜芽 | 日本一本草久p| aaa免费视频| 日韩色情片| 玖玖爱AV| 黄片观看| 人人做人人操| 丝袜足交视频| 黄片网站免费观看| 中文字幕www一区| 蜜桃视频无码区在线观看| AV小说在线观看| 久久久久久成人电影| 久久狠| 91久久久久久久久久久| 欧美操逼在线观看| 久久亚洲免费视频| 18XXX亚洲HD护士JD| AV天堂小说| 免费色色网站| 一级特黄色| 欧美性爱无码| 色色色色色色色色欧美| 涩涩视频成人| 欧洲第一无人区观看| a网站在线观看| 国产视频福利| 在线不卡中文字幕| 新版欧美内射大全| 国产女人视频| 久色视频福利| 少妇人妻一级A毛片| 亚洲AV成人无码AV小说| 91超碰在线免费观看| 一区二区三区免费| 黄色片一级片| 中国老女人性爱视频| 久久久久久AV| 亚洲国产精品成人va在线观看| 日本一级片免费看| 五月天无码在线| 亚洲成人视频网站| 成人免看一级a一片| 欧美成人手机在线看片| 久一精品| 麻豆天美蜜桃91| 熟女人妻人妻の视频| 日韩人妻精品中文字幕专区不卡 | 国产乱叫456在线| 日韩欧美第一页| 怡春院国产| 亚洲国产成人精品综合99| 亚洲毛片网站| 2018天天干天天操| 日韩精品欧美一区二区三区 | 亚洲AV黄片| 国产成人精品一区二区三区| 国产日韩欧美综合精品在线观看| 亚洲国产精品VA在线看黑人| 国产精品无码在线| 天天干夜夜爽| 亚洲色一| 在线观看无码av| 国产三级在线播放| 91久久久久久久久久久| 97中文字幕在线| 欧美亚洲黄片| 999国产精品视频| 日韩黄色一级| 久久成人毛片| 一级成人片在线观看| 日韩久久久久| 岛国免费av| 精品少妇视频| 亚洲乱伦网站| 老司机免费视频| 丁香色婷婷五月天| 日本AAAA片| 色九九综合| 囯产精品久久久久久久久久久久久久| 久久艹伊人| 国产肏逼视频| 亚洲无吗在线视频| 亚洲AV无码专区在线播放中文 | 免费射精一二三区| 日韩三级片在线播放| 色色色网站| 色色天堂成人电影| 中文亚洲视频| 91干| 操逼逼一区二区三区| 婷婷六月色| 躁BBB躁BBB添BBBBBB| 黄色带亚州| 毛茸茸BBBBBB毛茸茸| 久久91视频| 欧洲黄色片| 国产精品五月天| 天天操天天干天天日| 国产精久久| 91草视频| 影音先锋人妻资源| 日韩成人一级片| 无码一区在线观看| 翔田千里av在线| 亚洲Av无码成人专区擼| 另类老妇性BBwBBw| 综合色在线| 午夜影音| www.黄色大片| 日逼日逼日逼| 天天日很很操| 97国产在线观看| 少妇搡BBBB搡BBBB毛多多| 日本精品视频在线| 99热电影| 国产在线成人视频| 婷婷狠狠操| 综合一区二区| 欧美一级a视频免费放| 中文字幕乱码中文字乱码影响大吗 | 台湾AV在线| 国产香蕉在线观看| 国产成人97精品免费看片| 欧美三级网站在线观看| 中文字幕在线免费| 日本一级黄| 国产丨熟女丨国产熟女视频| 无码欧美人XXXXX日本无码| 成人国产精品在线看| 婷婷深爱五月丁香网| 中文字幕在线播放视频| 三级视频在线播放| 另类无码| 日韩v| 中文字幕乱码中文乱码图片| 免费日韩| 无码国产精品一区二区性色AV| 成人精品毛片| av天天日| 婷婷三级片| 亚洲无码久久飞鱼网站| 操逼中文字幕| 欧美经典自拍狼友| 爱逼综合| 欧美精产国品一二三区别电影| 亚洲三级无码在线| 九九九亚洲| 69久久成人精品| 伊人久久av| 激情乱伦网站| 中文字幕一区二区三区四区五区六区| 国产小视频免费在线观看| 国产精品成人在线观看| 久久久久久久久久国产精品免费观看-百度 | 大香蕉啪啪啪啪| 四虎精品成人无码A片| 98无码人妻精品一区二区三区| 亚洲无码视频免费| 在线观看毛片网站| 在线内射视频| 日韩三级片AV| 欧美男人的天堂| 国产一级特黄aaa大片| 西西444WWW无码精品| 黄色网址av| 国产精品VA| 国产又爽又黄视频| 五月无码| 亚洲高清无码播放| 你懂的网址在线观看| 国产乱码精品一区二区三区的特点 | 日本爱爱免费播放视频| 欧美操| 婷婷国产精品视频| 91青青草| 欧美亚洲图区| 久久久久久久久久久久久自慰小片| 2026国产精品视频| 国产精品18进进出出17c| 欧美第一色| 日本成片网| 国产精品粉嫩福利在线| 日韩无码视频二区| 亚洲午夜久久久久久久久红桃| 国产卡一卡二在线观看| 网址你懂得| 高清免费在线中文Av| 成人伊人大香蕉| 国产久视频| 中文字幕日韩高清| 在线看一区二区三区| 日韩无码首页| 国产乱叫456在线| www黄色视频| 国产做爰XXXⅩ久久久骚妇| 大香蕉视频在线观看| 亚洲激情无码视频| 加勒比黑人和翔田千里在线播放| 日韩三级片无码| 特级西西444WWW高清大视频| 天天操人妻| 人人爽人人爽人人| 亚洲午夜福利在线观看| 婷婷午夜精品久久久久久性色| 亚洲无码播放| 黑人猛躁白人BBBBBBBBB| 91香蕉在线观看视频在线播放| 久久久久性爱| aV无码av天天aV天天爽第一| 波多野结衣AV在线播放| 国产八区| 99re在线视频| 国产女主播在线观看| 国模一区二区三区| 国产成人精品av在线观看| 超碰青娱乐| 在线播放一区二区三区| 欧美动态视频| 久久高清亚洲| 草久影院| 久久视频一区| 亚洲精品鲁一鲁一区二区三区| 免费av大全| 俺来俺去www色官网| 美国一级A片草草视频| 午夜久久电影| 丁香五月婷婷啪啪| 中文字幕久久播放| 超碰在线观看免费| 无码国精品一区二区免费蜜桃| 精品人妻一区二区三区-国产精品| 蜜桃人妻无码| 色欲国产精品欧美在线密| 日韩精品人妻中文字幕第4区| 亚洲人做受| 日韩无码一二三| 国产ts在线观看| 新亚洲天堂男子Av-| xxxxx日韩| 日区无码| 高清国产mv在线观看| 日韩二级片| 黄色AV天堂| 免费在线观看AV网站| 日本欧美操| 一本久久精品一区二区| 思思热在线视频精品| 91色色| 婷婷五月久久| 亚洲日韩精品成人无码专区AV| 日本A片在线观看| 久久久久久久| 亚洲午夜免费视频| 亚洲AV中文在线| 日韩一区二区无码| 人妻制服丝袜| 久久精品操| 欧美视频在线观看免费| 国产一级a毛一级a毛视频在线网站) | 国产Av大全| 日本中文字幕在线视频| 欧美BBWBBWBBWBBWBBwBBW | 久久天堂av| 久久精品福利视频| 青青草社区| 精品欧美片在线观看步骤| 激情视频网| 波多野结衣91| 欧美日韩一区二区三区四区 | 91免费高清视频| 一区二区三区无码精品| 91在线无码精品秘入口动作| 成人网大香蕉| 你懂的在线视频观看| 日韩在线视频播放| 日韩一级片免费观看| 婷婷爱五月天| 欧美日韩黄片| 国产无码播放| 国产xxxx视频| 欧美日韩狠狠操在线观看视频| 性爱无码网站| 黄色视频免费网站| 色第一页| 婷婷精品国产a久久综合| 无码一区二区三区四区五区六区| 亚洲俺去了| 特极西西444WWW大胆无码| 国产精品污www在线观看| 亚洲日本中文字幕在线| 日韩电影无码| 国产精品一区在线| 无码99| 免费看黄色A片| 亚洲欧美在线观看| 三个黑人猛躁我一晚上| 青青草原免费在线视频| 国产91福利| 日韩久久久久| 人人人妻人人人操| 玖玖在线视频| 亚欧免费视频| 91丨九色丨老熟女探花| 在线天堂v| 免费观看无码| 久久艹逼| 一区二区三级片| 鸡巴在线观看| 日本免费爱爱视频| 成人网站毛片| 污网站18禁| 国产人妻人伦精品1国产丝袜| 高清一区二区三区| 国产精品夜夜爽7777777 | 国产精品秘久久久久久| 国产丝袜在线| 久久青青草在线视频| 天天看天天干| 夜夜操影院| igao视频| 成人毛片100免费观看| 日韩中文字幕av在线| 秋霞午夜福利影院| 男人午夜网站| 成人亚洲精品一区二区三区| 狠狠干高清成人二区三区| www操逼| 精品人妻一区二区三区-国产精品| 中文字幕亚洲专区| 国产精品一区网站| 亚洲综合自拍| 日逼网站免费观看| 色噜噜人妻丝袜无码影院| 日韩一级免费观看| 久久91人妻无码精品蜜桃HD| 婷婷啪啪| 国产av一级片| 欧美热热| 九色蝌蚪9l视频蝌蚪9l视频成人熟妇 | 色94色.欧美.setu| 亚洲激情五月天| 杨门女将婬乱史1—6| 日韩精品成人专区无码| 国产久久久久| 99久久精品国产精品有折扣吗| 中文无码专区| 怡春院欧美| 国产在线视频网站| 亚洲AV中文在线| 特黄视频在线观看| 国产精品嫩草久久久久yw193| 精品秘一区性综合三区| 91香蕉网站| 国产精品特级毛片| A片在线免费播放| 69国产精品无码免费| 一本色道久久88综合无码| 久久久性爱| 中文字幕无码Av在线看| 狠狠色狠狠干| 欧美日韩小电影| 最近中文字幕中文翻译歌词| 国产精品aaa| 大香蕉啪啪啪| 91精品亚洲| 国产日韩一区| 夜夜撸天天干| 国产三级片91| www.日本黄色| 在线A∨视频| 甘肃WBBBB搡wBBBB| 欧美三级片网址| 亚洲欧洲AV| 特级西西人体WWWww| 亚洲天堂2017| 伊人久久爱| 99热91| 亚洲毛片网| 中文无码人妻| 欧美日韩一区在线| 色欲99| 木下凛凛子AV888AV在线观看| 欧美69| 97爱爱视频| 国产婬片一级A片AAA毛片AⅤ| 91麻豆一区二区| 五月天四房播播| 草逼com| 日本性爱一区| jizz在线观看| 亚洲天堂网在线视频| 色色五月天网站| 亚洲最新AV网站| 欧美性爱内射| 四川搡BBBBB搡BBB| 亚洲在线免费观看| 大香伊人网| 成人网站免费在线观看| 欧美性综合| 91精品在线观看视频| 18禁一区二区| 高清无码一级片| 国产成人精品一区二区三区四区| 无码三级AV| 久操视频在线免费观看| 黄网免费在线观看| 精品无码在线| 91婷婷五月天| 欧美久久久| 火淫玖玖免费精品| 大香伊人国产| 国产精品伊人| 91超碰人人| 狠狠狠狠狠狠狠| 亚洲精品黄色| 久久免费操| 国产高潮视频在线观看| AAA片视频| 色婷婷久综合久久一本国产AV| 亚洲激情精品| 国产免费黄色av| 色色天堂成人电影| 亚洲91视频| 91人妻视频| 亚洲成人高清无码| 欧美大香蕉在线| 毛片视频免费观看| 亚洲性爱网址| 日本韩国无码| 国内自拍一区| 日韩免费一级| 无码av中文字幕| 日韩一级无码特黄AAA片| 探花视频在线观看| 91视频在线免费看| 大香久久| 亚洲AV大片| 人人操人人看人人摸| 99精品一区二区| 九色PORNY丨自拍蝌蚪| 国产传媒_色哟哟| 久久亚洲成人| 亚洲天堂2014| 亚欧视频在线观看| 日产精品久久久久| 97欧美精品人妻系列| 操美女的逼| 国产美女高潮视频| 欧美视频一区二区三区四区| 国产精品无码成人AV电影| 日本天堂在线视频| www.91在线| 国产高清自拍| 91免费视频在线| 日本一级黃色大片看免费| 99激情视频| 免费草逼视频| 男人的天堂黄色| 无码高清一区二区| 黄色成人在线| 男女av| 日韩免费在线| 欧美激情网| 日本大胆中出| 日韩A人人| 中国乱伦视频| 99久久综合九九| 波多野结衣高潮| 国产人妻人伦精品1国产丝袜| 伊人av网| 亚洲日韩在线a成| 91av在线电影| 神马午夜三级| 躁BBB躁BBB躁BBBBBB| 久久中文无码| 精品乱子伦一区二区三区在线播放 | 欧美性性生交XXXXX无码| 国产性爱网| 国产乱子伦精品久久| 人人操av| 亚洲国产成人精品女人久久| 性生活黄色视频| 在线无码免费| 强行征服邻居人妻HD高清日本 | 午夜成人在线观看| 国产理论电影| 91探花足浴店少妇在线| 亚洲无码免费看| 色婷婷网| 国产又大又粗又爽| 白峰美羽人妻AND-499| 天天日bb| 中文字幕中文字幕无码| 77777精品成人免费A片| 亚洲AV秘成人久久无码海归| 成人a片视频| 久久999| 在线AⅤ| 日韩无码一二三| 久久国产免费| 日韩性爱视频| 亚洲AV第一页| 天堂无码视频在线播放| 伊人网视频在线播放| 成人黃色A片免费看| av资源观看| 欧美性猛交XXXX乱大交HD| 国产高清视频在线播放| 日本在线精品视频| 亚洲综合免费观看高清完整版| 九九成人网站| 青娱乐亚洲| 六月婷婷深爱| 美女少妇激情BBBB| 动漫3D成人H无码国漫| 18禁无码网站| 亚洲AV人人夜夜澡人人| 国产不卡在线视频| 毛片毛片毛片毛片毛片| 国产色情在线观看| 日韩午夜成人| 99热这里有精品| 美女视频黄a视频全免费不卡| 亚洲欧美久久久久久久久久久久| jizz国产视频| 欧美日韩亚洲一区二区| 翔田千里AV| 日韩高清av| 动漫3d啪啪成人h动漫| 久久久久久91香蕉国产| 国产主播精品在线| 夜夜操夜夜撸| 国产成人无码精品一区秘二区| 亚洲AV无码精品国产| 日本特黄AA片免费视频| 国产黄A片免费网站免费| 五月天婷婷色| 2025AV中文字幕| 天堂在线观看AV| 久久久国产精品在线| 先锋影音资源AV| 国产V在线观看| 92无码| 日韩欧美一级片| 伊人色色综合| 91亚洲精华国产精华精华液| 青青草原成人视频| 狠狠躁18三区二区一区免费人| 残忍另类BBWBBWBBW| 亚洲综合自拍| 久久99精品国产.久久久久| 亚洲精品自拍视频| 日韩在线观看中文字幕| 黄片小视频在线观看| 日韩高清无码电影| 日韩三级毛片| 91蜜桃传媒| 五月婷婷视频在线观看| 久久综合久| 日韩一区二区在线视频| 巜人妻初尝按摩师BD中字| 日韩高清国产一区在线| 蜜芽av在线观看| 亚洲男同tv| 青草超碰| 久久国产性爱| 操b网站| 久久系列观看完整指南| 蜜桃免费| 想要xx在线观看| 男人天堂社区| 日韩性视频| 国产一级二级三级视频| 艹逼片| 欧美级毛片一进一出夜本色| www.18禁| 91视频网站| 亚洲精品系列| 怡春院院成人免费视频| 欧美18禁网站| 大肉大捧一进一出两腿| A区性愛社区| 国产精品香蕉国产| 亚洲区中文字幕| 国产理伦| 大香蕉黄色电影| 久久天堂一区| 综合亚洲视频| 国产免费a| 久久久在线| 久操精品视频| 毛片日韩| 国产又大又粗| 欧美一区二区三区视频| 337P大胆粉嫩噜噜噜| 荫蒂添到高潮免费视频| 91久久爱| 国产黄片在线免费观看| 成人网一区二区| 综合合一品道| 2025精品视频| 瑟瑟视频在线观看| 91无码视频在线观看| xxx一区二区| 美女免费网站| 日韩视频一区二区| 亚洲无码操逼视频| 少妇搡BBBB搡BBB搡毛片少妇| 午夜福利三级| 国产成人秘免费观看一区二区三区 | 国产天天操| aaa国产精品| 操比视频在线观看| 亚洲视频天堂| 北条麻妃久久网站| 影音先锋91久久网| 久久久久久毛片| 日本免费一区二区三区| 香蕉av在线| 亚洲视频,中文字幕| 高H视频在线观看| 最近中文字幕高清2019中文字幕| 日韩乱伦网站| 人人草大香蕉| 电影91久久久| 精品蜜桃秘一区二区三区观看| 自拍超碰在线| 日韩国产中文字幕| 欧美经典自拍狼友| 欧美高清一区二区| 在线黄色av| 精品福利在线观看| AV中文字幕电影| 三级片无码麻豆视频| 黄色动态视频| 免费的一级A片| 免费黄片在线| 东京热一区二区三区| 国产十欧洲十美国+亚洲一二三区在线午夜 | 一级黄色片免费看| 五月天婷婷在线观看视频| 亚洲中文字幕免费在线观看| 亚洲h| 丁香婷婷五月综合影院| 99草在线视频| 人人妻人人色| 国产又爽又黄视频| 国产在线色| 四虎一区二区| 天天撸天天干天天日| 另类无码| 去干网欧美| 日本黄A级A片国产免费| 91porn在线观看| 操屄影院| 欧美精品18videosex性欧美 | 中文字幕日本人妻| 亚洲,制服,综合,中文| 不卡一二三区| 真人BBwBBWBBw另类视频| 中文av在线播放| 成人免看一级a一片| 韩日在线视频| 肏屄在线视频| jizz免费视频| 蜜臀久久99精品久久久久酒店更新时间| 色婷五月天| 欧美激情xxx| 免费做a爰片77777| 爱操AV| 免费观看黄片网站| 精品资源成人| 欧美级毛片高潮| 极品少妇久久久| 99激情视频| 人妻无码精品久久人妻成人| 无码欧美成人| 51成人网站| 欧美性受XXXX黑人XYX性爽一| 91农村站街老熟女露脸| 亚洲小电影| 三级成人免费| 人妻FrXXeeXXee护士| 韩国午夜福利视频| 精品人伦一区二区三区| 日韩无码国产精品| 中文字幕婷婷五月天|