精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Spring Boot 記錄Controller接口請(qǐng)求日志七種方式,第六種性能極高

開(kāi)發(fā) 前端
API接口記錄請(qǐng)求相關(guān)日志是確保系統(tǒng)安全性、可維護(hù)性以及性能監(jiān)控的重要措施之一。通過(guò)記錄API請(qǐng)求的詳細(xì)信息,包括請(qǐng)求時(shí)間、來(lái)源IP地址、請(qǐng)求方法(GET、POST等)、請(qǐng)求參數(shù)、響應(yīng)狀態(tài)碼及響應(yīng)時(shí)間等,開(kāi)發(fā)者能夠有效追蹤錯(cuò)誤源頭、分析用戶(hù)行為模式、優(yōu)化系統(tǒng)性能,并保障數(shù)據(jù)安全。

環(huán)境:SpringBoot3.2.5

1. 簡(jiǎn)介

API接口記錄請(qǐng)求相關(guān)日志是確保系統(tǒng)安全性、可維護(hù)性以及性能監(jiān)控的重要措施之一。通過(guò)記錄API請(qǐng)求的詳細(xì)信息,包括請(qǐng)求時(shí)間、來(lái)源IP地址、請(qǐng)求方法(GET、POST等)、請(qǐng)求參數(shù)、響應(yīng)狀態(tài)碼及響應(yīng)時(shí)間等,開(kāi)發(fā)者能夠有效追蹤錯(cuò)誤源頭、分析用戶(hù)行為模式、優(yōu)化系統(tǒng)性能,并保障數(shù)據(jù)安全。

接下來(lái),我將介紹七種API接口請(qǐng)求日志的記錄方式:

圖片圖片

準(zhǔn)備接口

@RestController
@RequestMapping("/api")
public class ApiController {


  private final static Logger logger = LoggerFactory.getLogger(ApiController.class) ;
  
  @GetMapping("/query/{category}")
  public ResponseEntity<Object> query(@PathVariable String category, @RequestParam String keyword) {
    logger.info("查詢(xún)數(shù)據(jù), 分類(lèi): {}, 關(guān)鍵詞: {}", category, keyword) ;
    return ResponseEntity.ok("success") ;
  }
}

接下來(lái)的示例我們都將通過(guò)該接口進(jìn)行測(cè)試。

2. 實(shí)戰(zhàn)案例

2.1 Filter過(guò)濾

通過(guò)Filter方式可以攔截并記錄HTTP請(qǐng)求和響應(yīng)的組件。通過(guò)Filter技術(shù),開(kāi)發(fā)人員可以在請(qǐng)求到達(dá)目標(biāo)資源之前或響應(yīng)返回客戶(hù)端之前進(jìn)行日志記錄,從而實(shí)現(xiàn)訪(fǎng)問(wèn)控制和請(qǐng)求預(yù)處理等功能。

如果你考慮使用Filter,那么非常幸運(yùn)你不需要自己去實(shí)現(xiàn),Spring MVC給我們提供了此功能的實(shí)現(xiàn),如下類(lèi)圖:

圖片圖片

這里我們可以直接注冊(cè)CommonRequestLoggingFilter過(guò)濾器。

@Bean
FilterRegistrationBean<Filter> loggingFilter() {
  FilterRegistrationBean<Filter> reg = new FilterRegistrationBean<>() ;
  CommonsRequestLoggingFilter filter = new CommonsRequestLoggingFilter() ;
  // 是否記錄客戶(hù)端信息
  filter.setIncludeClientInfo(true) ;
  // 記錄請(qǐng)求header數(shù)據(jù)
  filter.setIncludeHeaders(true) ;
  // 記錄請(qǐng)求body內(nèi)容
  filter.setIncludePayload(true) ;
  // 是否記錄查詢(xún)字符串
  filter.setIncludeQueryString(true) ;
  reg.setFilter(filter) ;
  reg.addUrlPatterns("/api/*") ;
  return reg ;
}

這還不夠,還需要配合下面日志級(jí)別配置:

logging:
  level:
    '[org.springframework.web.filter]': debug

接下來(lái),訪(fǎng)問(wèn)/api/query/book?keyword=java接口

圖片圖片

成功記錄了請(qǐng)求的相關(guān)數(shù)據(jù)。

2.2 HandlerInterceptor記錄日志

HandlerInterceptor用于攔截請(qǐng)求處理也是非常的實(shí)用。它允許開(kāi)發(fā)者在請(qǐng)求到達(dá)控制器之前、之后或發(fā)生異常時(shí)執(zhí)行特定邏輯,從而實(shí)現(xiàn)對(duì)請(qǐng)求處理的全面監(jiān)控和日志記錄。

定義攔截器

@Component
public class LoggingRequestInterceptor implements HandlerInterceptor {


  private static final Logger logger = LoggerFactory.getLogger(LoggingRequestInterceptor.class);


  @Override
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
    long startTime = Instant.now().toEpochMilli();
    String time = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now()) ;
    logger.info("Request URL::" + request.getRequestURL().toString() + ":: StartTime=" + time);
    request.setAttribute("startTime", startTime);
    return true;
  }
  @Override
  public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
    long startTime = (Long) request.getAttribute("startTime");
    logger.info("Request URL::" + request.getRequestURL().toString() + ":: TimeTaken="
        + (Instant.now().toEpochMilli() - startTime));
  }
}

注冊(cè)攔截器

@Component
public class InterceptorConfig implements WebMvcConfigurer {
  
  private final LoggingRequestInterceptor loggingRequestInterceptor ;
  public InterceptorConfig(LoggingRequestInterceptor loggingRequestInterceptor) {
    this.loggingRequestInterceptor = loggingRequestInterceptor;
  }
  public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(loggingRequestInterceptor).addPathPatterns("/api/**") ;
  }
}

請(qǐng)求API接口

圖片

2.3 使用AOP技術(shù)

通過(guò)AOP記錄日志是一種強(qiáng)大的技術(shù),它允許開(kāi)發(fā)者在不修改業(yè)務(wù)邏輯代碼的情況下,將日志記錄等橫切關(guān)注點(diǎn)與業(yè)務(wù)邏輯分離。AOP能夠自動(dòng)攔截方法調(diào)用,并記錄方法執(zhí)行前后的信息,為系統(tǒng)提供全面的日志支持。

自定義注解

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface Log {


  /**模塊*/
  String module() default "" ;
  /**具體操作說(shuō)明*/
  String desc() default "" ;
}

定義切面

@Component
@Aspect
public class LogAspect {


  @Pointcut("@annotation(log)")
  private void recordLog(Log log) {}
  
  @Around("recordLog(log)")
  public Object logAround(ProceedingJoinPoint pjp, Log log) throws Throwable {
    String module = log.module();
    String desc = log.desc();
    long uid = System.nanoTime() ;
    String threadName = Thread.currentThread().getName();
    System.err.printf("%s - 【%d】 模塊: %s, 操作: %s, 請(qǐng)求參數(shù): %s%n", threadName, uid, module, desc, Arrays.toString(pjp.getArgs())) ;
    Object ret = pjp.proceed() ;
    System.err.printf("%s - 【%d】 返回值: %s%n", threadName, uid, ret) ;
    return ret ;
  }
}

修改Controller接口

@Log(module = "綜合查詢(xún)", desc = "查詢(xún)商品信息")
@GetMapping("/query/{category}")
public ResponseEntity<Object> query(@PathVariable String category, @RequestParam String keyword)

請(qǐng)求API接口

圖片圖片

2.4 基于Servlet請(qǐng)求事件機(jī)制

默認(rèn)情況下,當(dāng)一個(gè)請(qǐng)求到達(dá)后,Spring MVC底層會(huì)發(fā)布一個(gè)事件ServletRequestHandledEvent,我們只需要監(jiān)聽(tīng)該事件也是可以獲取到詳細(xì)的請(qǐng)求/響應(yīng)信息。

自定義事件監(jiān)聽(tīng)器

@Component
public class RequestEventListener implements ApplicationListener<ServletRequestHandledEvent> {


  private static final Logger logger = LoggerFactory.getLogger(RequestEventListener.class) ;
  @Override
  public void onApplicationEvent(ServletRequestHandledEvent event) {
    logger.info("請(qǐng)求信息: {}", event) ;
  } 
}

請(qǐng)求API接口

圖片圖片

你可以通過(guò)ServletRequestHandledEvent事件對(duì)象獲取具體的明細(xì)信息

圖片圖片

2.5 使用第三方Logbook組件

Logbook是一個(gè)可擴(kuò)展的Java庫(kù),能夠?yàn)椴煌目蛻?hù)端和服務(wù)器端技術(shù)實(shí)現(xiàn)完整的請(qǐng)求和響應(yīng)日志記錄。它允許開(kāi)發(fā)者記錄應(yīng)用程序接收或發(fā)送的任何HTTP流量。

引入依賴(lài)

<dependency>
  <groupId>org.zalando</groupId>
  <artifactId>logbook-spring-boot-starter</artifactId>
  <version>3.10.0</version>
</dependency>

配置文件

logging:
  level:
    '[org.zalando.logbook.Logbook]': TRACE

請(qǐng)求API接口

圖片圖片

2.6 自定義HandlerMethod

如果你僅僅是針對(duì)Controller接口進(jìn)行日志記錄處理,那么強(qiáng)烈推薦此種方式。

2.7 三方API接口調(diào)用

通常我們會(huì)使用RestTemplate/RestClient進(jìn)行第三方接口的調(diào)用;如果要記錄此種情況的日志信息,那么我們需要自定義ClientHttpRequestInterceptor攔截器。

public class LoggingClientHttpRequestInterceptor implements ClientHttpRequestInterceptor {


  private final Logger log = LoggerFactory.getLogger(this.getClass());
  @Override
  public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution)
      throws IOException {
    logRequest(request, body) ;
    ClientHttpResponse response = execution.execute(request, body);
    logResponse(response);
    return response;
  }
  private void logRequest(HttpRequest request, byte[] body) throws IOException {
    if (log.isDebugEnabled()) {
      log.debug("===========================request begin================================================");
      log.debug("URI         : {}", request.getURI());
      log.debug("Method      : {}", request.getMethod());
      log.debug("Headers     : {}", request.getHeaders());
      log.debug("Request body: {}", new String(body, "UTF-8"));
      log.debug("==========================request end================================================");
    }
  }
  private void logResponse(ClientHttpResponse response) throws IOException {
    if (log.isDebugEnabled()) {
      log.debug("============================response begin==========================================");
      log.debug("Status code  : {}", response.getStatusCode());
      log.debug("Status text  : {}", response.getStatusText());
      log.debug("Headers      : {}", response.getHeaders());
      log.debug("Response body: {}", StreamUtils.copyToString(response.getBody(), Charset.defaultCharset()));
      log.debug("=======================response end=================================================");
    }
  }
}

RestTemplate配置攔截器

@Bean
RestTemplate restTemplate(RestTemplateBuilder builder) {
  RestTemplate restTemplate = builder
    .additionalInterceptors(
      new LoggingClientHttpRequestInterceptor())
  .build() ;
  return restTemplate ;
}

日志打印情況如下:

圖片圖片

如果使用的RestClient,那么可以同一個(gè)攔截器,配置如下:

@Bean
RestClient restClient() {
  return RestClient
      .builder()
      .requestInterceptor(
        new LoggingClientHttpRequestInterceptor())
      .build() ;
}
責(zé)任編輯:武曉燕 來(lái)源: Spring全家桶實(shí)戰(zhàn)案例源碼
相關(guān)推薦

2024-05-30 08:51:28

Spring數(shù)據(jù)分布式

2024-08-30 11:11:01

2017-06-26 10:35:58

前端JavaScript繼承方式

2025-01-21 08:00:00

限流微服務(wù)算法

2009-02-11 09:46:00

ASON網(wǎng)絡(luò)演進(jìn)

2024-10-12 08:18:21

Spring接口組件

2025-10-29 01:45:00

toString()SpringJackson

2023-03-08 16:54:28

MySQL數(shù)據(jù)庫(kù)

2025-06-17 07:37:53

2017-06-14 16:44:15

JavaScript原型模式對(duì)象

2019-05-16 13:00:18

異步編程JavaScript回調(diào)函數(shù)

2024-12-18 16:19:51

2018-06-10 16:31:12

2025-02-27 00:00:30

SpringJava方式

2022-12-06 10:39:43

Spring事務(wù)失效

2024-01-04 12:48:00

Spring

2025-01-08 09:35:55

Spring性能監(jiān)控

2022-03-18 14:33:22

限流算法微服務(wù)

2022-07-01 08:00:44

異步編程FutureTask

2020-07-31 11:12:39

安全威脅網(wǎng)絡(luò)攻擊網(wǎng)絡(luò)安全
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

手机av在线网站| 中文字幕制服丝袜在线| 久久久久99精品成人片我成大片| 日韩av不卡一区| 在线精品视频一区二区三四| 中文字幕日韩一区二区三区不卡 | 亚洲综合成人婷婷小说| 精品91久久久| 国产国产精品| 亚洲精品自在久久| 宇都宫紫苑在线播放| 中文在线中文资源| 亚洲一区免费观看| 午夜精品电影在线观看| 国产ts人妖调教重口男| 欧美综合国产| 久久久久久久久久久人体| av黄色在线免费观看| 国产福利一区二区精品秒拍| 欧美精品丝袜中出| 日韩在线第三页| 成人女同在线观看| 亚洲天堂久久久久久久| 视频在线观看成人| 亚洲欧洲成人在线| 成人午夜在线免费| 92国产精品久久久久首页 | 丁香六月激情综合| 图片婷婷一区| 亚洲成人久久久久| 一卡二卡三卡四卡五卡| 亚洲二区av| 欧美亚洲国产一区在线观看网站| 男人用嘴添女人下身免费视频| 亚洲精品白浆| 亚洲人成7777| 一本一生久久a久久精品综合蜜| 九九热视频在线观看| 9久草视频在线视频精品| 99伊人久久| 99精品人妻无码专区在线视频区| 蜜桃免费网站一区二区三区| 国产成人激情小视频| 毛片基地在线观看| 99国产精品99久久久久久粉嫩| 九九热这里只有精品免费看| 9999热视频| 羞羞答答成人影院www| 少妇高潮 亚洲精品| 阿v天堂2014| 成人中文视频| 中文字幕欧美在线| 国产精品久久国产精麻豆96堂| 成人在线电影在线观看视频| 最近2019中文字幕一页二页| 国产三级在线观看完整版| 国产a久久精品一区二区三区 | 91中文精品字幕在线视频| 一级全黄少妇性色生活片| 麻豆国产精品一区二区三区| 成人在线激情视频| 国产高清不卡视频| 高清av一区二区| 国产精品theporn88| 天天爽夜夜爽夜夜爽| 国产亚洲一区二区三区| 水蜜桃一区二区| 黄网址在线观看| 尤物在线观看一区| 久久国产精品网| 涩涩涩视频在线观看| 91高清视频在线| 欧美日韩一区二区三区69堂| 麻豆精品在线| 亚洲国产小视频在线观看| 人妻丰满熟妇aⅴ无码| 国产永久精品大片wwwapp| 日韩在线国产精品| 特级片在线观看| 国产午夜精品一区二区三区欧美 | 精品视频在线观看一区二区| 超碰在线资源| 色狠狠综合天天综合综合| 亚洲一区二区福利视频| 老牛精品亚洲成av人片| 在线国产精品视频| 91成人福利视频| 久久精品毛片| 亚洲伊人久久大香线蕉av| 无码国产精品96久久久久| 日本一区二区成人| 男女激情免费视频| 成人自拍视频网| 精品国产91久久久久久久妲己| 久久午夜福利电影| 欧美激情麻豆| 国产精品久久久久久久久| a天堂中文在线观看| 国产人成一区二区三区影院| 国产91porn| www.成人爱| 日韩免费一区二区| 人人妻人人澡人人爽| 你懂的视频一区二区| 浅井舞香一区二区| 亚洲av无码乱码国产精品| 国产无遮挡一区二区三区毛片日本| 美国av在线播放| 88xx成人免费观看视频库| 精品sm在线观看| www.xxxx日本| 日韩vs国产vs欧美| 精品久久久三级| 国产原创精品视频| 欧美色精品在线视频| 成人在线视频免费播放| 亚洲精品97| 国产精品高清网站| 青青国产在线| 午夜视频在线观看一区二区三区| xx欧美撒尿嘘撒尿xx| 亚洲免费专区| 高清欧美性猛交xxxx黑人猛交| 91福利免费视频| 国产调教视频一区| 日批视频在线免费看| 中文在线免费一区三区| 久久视频国产精品免费视频在线| 91porny九色| 久久一夜天堂av一区二区三区| 国产欧美日韩小视频| 日韩在线精品强乱中文字幕| 精品国产一区二区三区久久狼5月 精品国产一区二区三区久久久狼 精品国产一区二区三区久久久 | 牛人盗摄一区二区三区视频| 日韩免费一区二区| 一区二区在线电影| 久久伊99综合婷婷久久伊| 另类小说欧美激情| 美女黄色成人网| 影音先锋日韩资源| 亚洲电影成人| 日本一区二区三区播放| 日韩电影在线一区二区| 国产精品久久久久久中文字| 五月婷婷在线观看视频| 亚洲电影一级黄| 亚洲av人人澡人人爽人人夜夜| 欧美激情aⅴ一区二区三区| 亚洲最大av网站| 成人毛片av在线| 91精品国产综合久久久久久久 | 国产69精品久久久久9| 在线视频这里只有精品| 美女尤物国产一区| 亚洲乱码一区二区三区| 懂色aⅴ精品一区二区三区| 中文字幕久热精品视频在线| 中文字幕精品一区二区精| 国产精品系列在线| 在线观看国产一级片| 国产精品毛片一区二区在线看| 91免费看片网站| 激情图片在线观看高清国产| 亚洲精品99久久久久| 成人公开免费视频| 欧美激情中文不卡| 丰满饥渴老女人hd| 亚洲第一黄色| 日本不卡二区| 天天综合91| 国语自产在线不卡| 国产精品一二三区视频| 欧美日韩高清一区| 69精品久久久| 国产欧美一区二区精品秋霞影院 | 全球最大av网站久久| 久久久国产精品免费| 亚洲老妇色熟女老太| 日韩欧美在线视频免费观看| 69精品无码成人久久久久久| 国产米奇在线777精品观看| 少妇人妻在线视频| 日韩88av| 国产亚洲欧美一区二区三区| 91看片一区| 久久国产色av| 四虎精品在线| 777亚洲妇女| 中文字幕精品三级久久久| 国产精品女上位| 久久久高清视频| 久久精品99久久久| 国产精品无码一区二区在线| 91一区二区三区四区| 国产欧美日韩亚洲| 国产精品3区| 日韩免费av一区二区| 午夜小视频在线观看| 亚洲午夜激情免费视频| 亚洲av无码乱码国产精品久久| 色婷婷av一区二区三区之一色屋| 91精品国产高清一区二区三蜜臀| 久久麻豆一区二区| 精品无码人妻少妇久久久久久| 日本欧美大码aⅴ在线播放| 人妻无码久久一区二区三区免费| 成人综合一区| 久久精品国产美女| 一区二区日韩| 成人免费福利视频| 朝桐光一区二区| 午夜精品福利在线观看| 免费a级人成a大片在线观看| 亚洲天堂久久av| 熟妇高潮一区二区三区| 在线播放91灌醉迷j高跟美女| 国产成人精品av久久| 亚洲男人天堂av网| 日韩欧美视频免费观看| 国产丝袜美腿一区二区三区| 日本少妇毛茸茸| 国产91精品露脸国语对白| 欧美女同在线观看| 男男视频亚洲欧美| 日韩欧美精品在线观看视频| 亚洲国产高清一区二区三区| 热久久最新地址| 91av精品| 六月婷婷激情网| 99久久婷婷| 在线看无码的免费网站| 日韩在线中文| 亚洲午夜精品久久久中文影院av| 精品盗摄女厕tp美女嘘嘘| 免费h精品视频在线播放| 黑色丝袜福利片av久久| 国产成人成网站在线播放青青| 成人国产精品一区二区网站| 国产日本欧美在线观看| 亚洲精品tv| 91色琪琪电影亚洲精品久久| 香蕉久久久久久| 91精品在线播放| 国产美女精品视频免费播放软件| 成人精品久久一区二区三区| 亚洲二区av| 99久久久精品免费观看国产| 欧美国产中文高清| 国产精品久久久久久久小唯西川 | 国产综合久久久久久鬼色| 一起操在线视频| 国产一区二区福利视频| 极品人妻一区二区| 99国产精品99久久久久久| 亚洲天堂成人av| 国产网站一区二区| 国产精品1区2区3区4区| 最近日韩中文字幕| 久久久久亚洲av无码专区体验| 亚洲综合一区二区三区| 中文字幕一区二区三区手机版 | 韩国av在线免费观看| 欧美精品一区二区三区四区 | 97久久超碰国产精品电影| 亚洲第一黄色网址| 国产视频亚洲色图| 黄视频网站免费看| 性欧美疯狂xxxxbbbb| 人人草在线观看| 在线成人免费视频| 高清一区二区三区四区| 日韩精品免费在线视频观看| 粉嫩av一区二区夜夜嗨| 亚洲欧洲免费视频| 超碰在线网址| 91产国在线观看动作片喷水| 99久久婷婷国产综合精品首页| 亚洲自拍av在线| 天天躁日日躁狠狠躁欧美| 亚洲最大免费| 99热在线精品观看| 欧美三级理论片| 成人丝袜18视频在线观看| 熟女高潮一区二区三区| 日韩美女视频一区二区| 精品国产免费观看| 欧美巨大另类极品videosbest| 免费观看黄一级视频| 永久免费精品影视网站| 大黄网站在线观看| 国产欧美精品日韩精品| 理论片一区二区在线| 在线观看日韩片| 男人的天堂亚洲在线| 青娱乐国产精品视频| 91网页版在线| 免费在线观看一级片| 91黄色小视频| 日韩性xxxx| 久久久精品一区| 成人软件在线观看| 国产精品jizz视频| 99久久久久| 黄色片视频在线| xnxx国产精品| 免费在线一级片| 欧美精品久久久久久久久老牛影院| 天天干视频在线| 欧美精品在线免费观看| www.久久| 欧美日韩在线一二三| 狠狠久久婷婷| 国产性生活一级片| 国产精品免费丝袜| 成人午夜淫片100集| 精品国产免费人成电影在线观看四季| 1769在线观看| 日av在线播放中文不卡| 国产精品调教视频| 精品免费久久久久久久| 激情综合五月天| 亚洲无人区码一码二码三码的含义| 亚洲3atv精品一区二区三区| 亚洲大尺度视频| 欧美成人免费小视频| 久久99国产精品二区高清软件| 欧美日韩大片一区二区三区| 一区二区动漫| xxxwww国产| 亚洲午夜激情av| www.中文字幕| 欧美国产亚洲精品久久久8v| 精品一区二区三区四区五区| 中文字幕黄色大片| 久久草av在线| 精品在线观看一区| 欧美三级午夜理伦三级中视频| 成人高清在线| 国产精品日韩精品| 久久成人综合| 在线免费看v片| 一区二区三区国产豹纹内裤在线| 国产精品玖玖玖| 欧美成在线观看| 风间由美一区二区av101| 日韩欧美精品免费| av电影在线观看完整版一区二区| 日韩黄色一级大片| 精品无人国产偷自产在线| 亚洲欧洲自拍| 日韩av电影免费在线观看| 日韩av网站免费在线| 亚洲天堂精品一区| 91精品视频网| 欧美xxxx视频| 精品国产一区二区三区麻豆小说 | 欧美伊人久久久久久久久影院| 久草视频在线看| 国产欧美日韩丝袜精品一区| 久久精品影视| 国产女人18毛片水真多18| 欧美性猛交xxxx乱大交| jizz日韩| 国产成人成网站在线播放青青| 亚洲在线一区| 亚洲欧洲综合网| 欧美成人女星排名| 卡通欧美亚洲| 国产成人精品免费看在线播放 | 国产精选一区二区| 香蕉久久夜色精品国产| 刘亦菲国产毛片bd| 欧美成人女星排名| a一区二区三区| 一本二本三本亚洲码| a亚洲天堂av| 中国女人真人一级毛片| 欧美剧在线观看| 亚洲午夜久久| 成年人性生活视频| 色综合天天狠狠| 99在线播放| 欧美日韩一区二区三| 国产一区二区在线影院| 伊人手机在线视频| 久久精品人人做人人爽| 欧美性生活一级片| 日韩av自拍偷拍| 福利精品视频在线| av中文字幕在线| 国产无套精品一区二区| 久久国产福利国产秒拍| 五月天婷婷网站| 色妞欧美日韩在线| 天堂99x99es久久精品免费| 欧美激情第四页| 欧美性感一类影片在线播放| 18video性欧美19sex高清| 亚洲 欧洲 日韩| 久久久久国产一区二区三区四区|