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

深入SpringCloud Gateway底層詳解路由配置定位原理

開發(fā) 前端
本節(jié)主要了解系統(tǒng)中的謂詞與配置的路由信息是如何進(jìn)行初始化關(guān)聯(lián)生成路由對(duì)象的。每個(gè)謂詞工廠中的Config對(duì)象又是如何被解析配置的。

環(huán)境:SpringCloud Hoxton.SR11

本節(jié)主要了解系統(tǒng)中的謂詞與配置的路由信息是如何進(jìn)行初始化關(guān)聯(lián)生成路由對(duì)象的。每個(gè)謂詞工廠中的Config對(duì)象又是如何被解析配置的。

所有的謂詞工廠中的Config中屬性值是如何被配置的。

在SpringCloud Gateway中的所有謂詞工廠如下:

圖片圖片

命名規(guī)則:XxxRoutePredicateFactory。所有的這些謂詞工廠都是如下的繼承關(guān)系

public class MethodRoutePredicateFactory extends   AbstractRoutePredicateFactory<MethodRoutePredicateFactory.Config>
// 
public class PathRoutePredicateFactory extends AbstractRoutePredicateFactory<PathRoutePredicateFactory.Config>
// ...

所有的謂詞工廠繼承的AbstractRoutePredicateFactory中的泛型都是內(nèi)部類的Config。這個(gè)是如何被配置上值的呢?

6.1 gateway自動(dòng)配置

在下面這個(gè)類中配置了所有的Predicate和Filter。

public class GatewayAutoConfiguration {
  @Bean
  @ConditionalOnEnabledPredicate
  public PathRoutePredicateFactory pathRoutePredicateFactory() {
    return new PathRoutePredicateFactory();
  }
  @Bean
  @ConditionalOnEnabledPredicate
  public QueryRoutePredicateFactory queryRoutePredicateFactory() {
    return new QueryRoutePredicateFactory();
  }
  @Bean
  public RouteLocator routeDefinitionRouteLocator(GatewayProperties properties, List<GatewayFilterFactory> gatewayFilters, List<RoutePredicateFactory> predicates, RouteDefinitionLocator routeDefinitionLocator, ConfigurationService configurationService) {
    return new RouteDefinitionRouteLocator(routeDefinitionLocator, predicates,
            gatewayFilters, properties, configurationService);
  }
  @Bean
  @Primary
  @ConditionalOnMissingBean(name = "cachedCompositeRouteLocator")
  public RouteLocator cachedCompositeRouteLocator(List<RouteLocator> routeLocators) {
    return new CachingRouteLocator(new CompositeRouteLocator(Flux.fromIterable(routeLocators)));
  }
}

這里會(huì)層層委托最終查找查找路由定位會(huì)交給RouteDefinitionRouteLocator。CachingRouteLocator起到緩存的作用,將配置的所有路由信息保存。

注意:這里的路由信息是在容器啟動(dòng)后就會(huì)被初始化的。

public class CachingRouteLocator {
  private final RouteLocator delegate;


  private final Flux<Route> routes;


  private final Map<String, List> cache = new ConcurrentHashMap<>();


  private ApplicationEventPublisher applicationEventPublisher;


  public CachingRouteLocator(RouteLocator delegate) {
    this.delegate = delegate;
    routes = CacheFlux.lookup(cache, CACHE_KEY, Route.class) .onCacheMissResume(this::fetch);
  }


  private Flux<Route> fetch() {
    return this.delegate.getRoutes().sort(AnnotationAwareOrderComparator.INSTANCE);
  }
}

實(shí)例化CachingRouteLocator就開始查找所有配置的Route信息。最終的會(huì)委托給RouteDefinitionRouteLocator

RouteDefinitionRouteLocator構(gòu)造函數(shù)中的initFactories方法用來(lái)映射路由工廠的XxxRoutePredicateFactory。

private void initFactories(List<RoutePredicateFactory> predicates) {
  predicates.forEach(factory -> {
    String key = factory.name();
    if (this.predicates.containsKey(key)) {
      this.logger.warn("A RoutePredicateFactory named " + key + " already exists, class: " + this.predicates.get(key) + ". It will be overwritten.");
    }
    this.predicates.put(key, factory);
  });
}

方法中解析每一個(gè)謂詞工廠對(duì)應(yīng)的名稱然后緩存到predicates 集合中。

factory.name()方法解析謂詞名稱。

default String name() {
  return NameUtils.normalizeRoutePredicateName(getClass());
}

CachingRouteLocator是個(gè)緩存路由定位器,是個(gè)首選的RouteLocator(@Primary),這里將RouteDefinitionRouteLocator進(jìn)行了合并。

6.2 生成路由對(duì)象Route及Config配置

getRoutes---》convertToRoute---》combinePredicates---》lookup。

根據(jù)上面的自動(dòng)配置也知道了在服務(wù)啟動(dòng)時(shí)就進(jìn)行初始化所有路由信息了。

獲取路由信息

public Flux<Route> getRoutes() {
  Flux<Route> routes = this.routeDefinitionLocator.getRouteDefinitions() .map(this::convertToRoute);
  routes = routes.onErrorContinue((error, obj) -> {
    return routes.map(route -> {
            return route;
  });
}

合并謂詞

private AsyncPredicate<ServerWebExchange> combinePredicates(
            RouteDefinition routeDefinition) {
  // other code
  for (PredicateDefinition andPredicate : predicates.subList(1, predicates.size())) {
    AsyncPredicate<ServerWebExchange> found = lookup(routeDefinition, andPredicate);
    predicate = predicate.and(found);
  }
  return predicate;
}

進(jìn)入lookup中

private AsyncPredicate<ServerWebExchange> lookup(RouteDefinition route, PredicateDefinition predicate) {
  RoutePredicateFactory<Object> factory = this.predicates.get(predicate.getName());
  if (factory == null) {
    throw new IllegalArgumentException("Unable to find RoutePredicateFactory with name " + predicate.getName());
  }
  // 這里將配置中(yml文件)配置的name,args和謂詞工廠中的Config進(jìn)行關(guān)聯(lián)設(shè)置值
  Object config = this.configurationService.with(factory)
    .name(predicate.getName())
    .properties(predicate.getArgs())
    .eventFunction((bound, properties) -> new PredicateArgsEvent(
        RouteDefinitionRouteLocator.this, route.getId(), properties))
    .bind();
  // 最終調(diào)用謂詞工廠(XxxRoutePredicateFactory的apply方法返回RoutePredicate該對(duì)象繼承Predicate)
  return factory.applyAsync(config);
}

lookup方法中查找,也就是在這里將對(duì)應(yīng)的謂詞Config與RouteDefinition(Predicate)中定義的相對(duì)應(yīng)的屬性關(guān)聯(lián)。

進(jìn)入factory.applyAsync方法

@FunctionalInterface
public interface RoutePredicateFactory<C> extends ShortcutConfigurable, Configurable<C> {
  default AsyncPredicate<ServerWebExchange> applyAsync(C config) {
    return toAsyncPredicate(apply(config)); // 查看下面的6.2-1圖當(dāng)前apply所有的實(shí)現(xiàn)就是系統(tǒng)內(nèi)部定義的XxxRoutePredicateFactory
  }
}
// apply(config),如這里配置了Path謂詞,那么就會(huì)進(jìn)入PathRoutePredicateFactory中的apply方法
public Predicate<ServerWebExchange> apply(Config config) {
  // other code    
  return new GatewayPredicate() {
    public boolean test() {
      // todo    
    }
  }
}
// 最后返回一個(gè)異步的謂詞
public static AsyncPredicate<ServerWebExchange> toAsyncPredicate(Predicate<? super ServerWebExchange> predicate) {
  Assert.notNull(predicate, "predicate must not be null");
  // 這里from就是返回一個(gè)DefaultAsyncPredicate默認(rèn)的異步謂詞
  return AsyncPredicate.from(predicate);
}
static AsyncPredicate<ServerWebExchange> from( Predicate<? super ServerWebExchange> predicate) {
  return new DefaultAsyncPredicate<>(GatewayPredicate.wrapIfNeeded(predicate));
}

圖6.2-1

圖片圖片

最后在combinePredicates方法中將當(dāng)前路由中配置的所有謂詞進(jìn)行了and操作返回。最終回到convertToRoute方法中將當(dāng)前路由中配置的謂詞,過(guò)濾器進(jìn)行了整合包裝返回Route(一個(gè)路由對(duì)象)

public class Route implements Ordered {
  private final String id;
   
  private final URI uri;
   
  private final int order;
   
  private final AsyncPredicate<ServerWebExchange> predicate;
   
  private final List<GatewayFilter> gatewayFilters;
   
  private final Map<String, Object> metadata;
}

這些Route對(duì)象會(huì)被保存在上面說(shuō)的CachingRouteLocator.routes中。

6.3 定位路由

根據(jù)上面的配置RouteLocator 該類用來(lái)定位路由(查找具體的使用哪個(gè)路由);當(dāng)一個(gè)請(qǐng)求過(guò)來(lái)會(huì)查找是哪個(gè)路由。

RouteLocator中定義了一個(gè)方法

public interface RouteLocator {


  Flux<Route> getRoutes();


}

查看這個(gè)getRoutes方法是誰(shuí)調(diào)用的

圖片圖片

看到這個(gè)RoutePredicateHandlerMapping是不是想起了Spring MVC中的HandlerMapping(我們所有的Controller都會(huì)被 RequestMappingHanlderMapping 匹配)。通過(guò)名稱也就知道了該HandlerMapping用來(lái)匹配我們的路由謂詞的誰(shuí)來(lái)處理路由。

接下來(lái)回到前面說(shuō)的RequestMappingHanlderMapping 對(duì)象,當(dāng)我們請(qǐng)求一個(gè)路由地址時(shí)會(huì)執(zhí)行該類中的lookup方法查找路由

protected Mono<Route> lookupRoute(ServerWebExchange exchange) {
  // 這里的this.routeLocator就是 CachingRouteLocator對(duì)象 
  return this.routeLocator.getRoutes()
      .concatMap(route -> Mono.just(route).filterWhen(r -> {
        exchange.getAttributes().put(GATEWAY_PREDICATE_ROUTE_ATTR, r.getId());
        // 過(guò)濾查找符合的路由  
        return r.getPredicate().apply(exchange);
     }).doOnError(e -> logger.error(
          "Error applying predicate for route: " + route.getId(),
     e)).onErrorResume(e -> Mono.empty()))
        .next()
        .map(route -> {
          if (logger.isDebugEnabled()) {
            logger.debug("Route matched: " + route.getId());
          }
          validateRoute(route, exchange);
          return route;
     });
}

進(jìn)入r.getPredicate().apply(exchange)

public interface AsyncPredicate<T> extends Function<T, Publisher<Boolean>> {
  static AsyncPredicate<ServerWebExchange> from(Predicate<? super ServerWebExchange> predicate) {
  return new DefaultAsyncPredicate<>(GatewayPredicate.wrapIfNeeded(predicate));
  }


  class DefaultAsyncPredicate<T> implements AsyncPredicate<T> {


    private final Predicate<T> delegate;


    public DefaultAsyncPredicate(Predicate<T> delegate) {
      this.delegate = delegate;
    }


    @Override
    public Publisher<Boolean> apply(T t) {
      return Mono.just(delegate.test(t));
    }


    @Override
    public String toString() {
      return this.delegate.toString();
    }


  }


}

這里會(huì)調(diào)用Predicate.test方法(XxxRoutePredicateFactory中的apply方法返回的GatewayPredicate)。

調(diào)用GatewayPredicate.test返回判斷當(dāng)前請(qǐng)求的路由是否匹配。

整體的一個(gè)流程:

1、系統(tǒng)先初始化所有的Predicate(謂詞)和Filter(過(guò)濾器)

2、根據(jù)配置的路由信息(過(guò)濾器,謂詞)包裝返回Route對(duì)象

3、根據(jù)請(qǐng)求路由路徑查找匹配的路由

責(zé)任編輯:武曉燕 來(lái)源: 實(shí)戰(zhàn)案例錦集
相關(guān)推薦

2021-07-07 06:38:33

SpringCloud路由配置定位原理分析

2023-08-11 08:42:49

泛型工廠繼承配置

2023-07-17 08:02:44

ZuulIO反應(yīng)式

2024-01-05 09:00:00

SpringMVC軟件

2023-05-04 08:09:33

serviceId路徑謂詞中心注冊(cè)

2020-08-10 18:03:54

Cache存儲(chǔ)器CPU

2022-11-04 09:43:05

Java線程

2022-12-19 08:00:00

SpringBootWeb開發(fā)

2022-06-12 07:27:39

微服務(wù)GateWay

2020-03-17 08:36:22

數(shù)據(jù)庫(kù)存儲(chǔ)Mysql

2020-03-26 16:40:07

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

2024-01-29 08:00:00

架構(gòu)微服務(wù)開發(fā)

2023-07-11 08:00:00

2011-04-08 10:37:41

靜態(tài)路由路由器

2022-08-02 08:32:21

Spring項(xiàng)目網(wǎng)關(guān)

2009-12-11 11:08:31

靜態(tài)路由策略

2009-11-25 17:52:19

無(wú)線路由傳輸

2010-04-27 09:17:23

內(nèi)存屏障JVM

2009-11-25 09:48:19

2021-02-20 08:40:19

HiveExplain底層
點(diǎn)贊
收藏

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

国产综合成人久久大片91| 久久久久97| 亚洲色图欧美偷拍| 亚洲一区亚洲二区| 日韩三级小视频| 欧洲杯足球赛直播| 日韩欧美一级特黄在线播放| 成人一对一视频| 色三级在线观看| 国产乱码精品一品二品| 欧美在线性视频| 在线观看成人毛片| 久久99视频| 精品日本一线二线三线不卡| 国产视频一区二区三区在线播放| 国产精品扒开做爽爽爽的视频| 成人高清免费观看| 国产一区二区香蕉| 日韩黄色三级视频| 欧美黄色录像片| 亚洲免费av网址| 欧美69精品久久久久久不卡| 99re66热这里只有精品4| 亚洲男同性视频| 日产精品久久久一区二区| 国精品人妻无码一区二区三区喝尿 | 一级黄色片日本| 亚洲自拍电影| 欧美大片在线观看| 思思久久精品视频| 免费亚洲电影| 天天操天天干天天综合网| 亚洲一区二区四区| 岛国最新视频免费在线观看| 成人网在线播放| 亚洲va久久久噜噜噜久久天堂| 午夜久久久久久久久久影院| 一区二区视频欧美| 久久综合国产精品台湾中文娱乐网| 国产精品jizz| 日韩欧美ww| 精品国产人成亚洲区| 三日本三级少妇三级99| 国产精品久久久久久吹潮| 一本一道波多野结衣一区二区| 你真棒插曲来救救我在线观看| yellow91字幕网在线| 国产精品你懂的| 婷婷亚洲婷婷综合色香五月| 青青国产在线| 久久色.com| 欧洲在线视频一区| 久久精品国产亚洲a∨麻豆| 91亚洲永久精品| 精选一区二区三区四区五区| 欧美一区二区黄片| 99精品在线免费| 国内精品国语自产拍在线观看| 六月丁香综合网| 不卡在线观看av| 国产精品视频免费观看| 欧美性受xxxx狂喷水| 成人涩涩免费视频| 狠狠色综合色区| 天天躁日日躁狠狠躁喷水| 99精品视频在线观看| 精品久久久久久一区二区里番| 成人午夜免费在线观看| 成人毛片老司机大片| 国模精品一区二区三区| 精品三级久久久久久久电影聊斋| 久久免费视频一区| 亚洲国内在线| 成人日批视频| 亚洲大尺度视频在线观看| 你真棒插曲来救救我在线观看| 欧美sm一区| 欧美视频在线观看一区二区| www.99r| 少妇精品在线| 日韩av在线免费观看| 日韩精品电影一区二区| 91久久夜色精品国产按摩| 欧美成人一区在线| www成人在线| 日本成人中文字幕在线视频| 成人免费视频a| 午夜精品久久久久久久爽 | 欧美日韩在线播放一区| 国产不卡的av| 日韩av字幕| 日韩中文在线视频| 国产精品成人网站| 日韩av在线发布| 91久久综合亚洲鲁鲁五月天| 欧美视频xxx| 国产精品久久久久久户外露出| 免费看日b视频| 欧美18—19sex性hd| 日韩欧美综合在线| 亚洲国产日韩一区无码精品久久久| 成人免费电影网址| 久久久综合av| 一区二区久久精品66国产精品| 不卡视频一二三| 亚洲一区不卡在线| 欧美伦理91| 日韩小视频在线观看专区| wwwwxxxx国产| 国产精品magnet| 国产欧美在线播放| 日本黄在线观看| 一区二区三区欧美视频| 国产成人亚洲精品无码h在线| 高清一区二区中文字幕| 亚洲欧美一区二区三区久久| 久一视频在线观看| 美女精品一区二区| 蜜桃麻豆91| 日韩经典av| 在线电影欧美成精品| 美女久久久久久久久久| 黄色在线成人| 91亚洲国产成人久久精品网站| 可以在线观看的av| 天天亚洲美女在线视频| 乱码一区二区三区| **女人18毛片一区二区| 国产精品福利网| 四虎电影院在线观看| 亚洲一区二三区| a级大片免费看| 久久一级电影| 国产精品嫩草影院一区二区| 日本私人网站在线观看| 婷婷六月综合网| 毛茸茸free性熟hd| 极品日韩av| 国产精品亚洲综合| 三级外国片在线观看视频| 欧美在线不卡视频| 在线观看日本中文字幕| 久久精品日产第一区二区 | 手机看片国产1024| 亚洲国产一区二区视频| 亚洲精品成人无码毛片| 欧美久久成人| 999国内精品视频在线| 成人ww免费完整版在线观看| 欧美日韩一卡二卡| 成人高潮免费视频| 国产成人亚洲精品青草天美| 亚洲激情免费视频| 视频一区日韩精品| 久久久久久久久国产| 日韩性xxxx| 欧美日韩国产一区中文午夜| 亚洲蜜桃精久久久久久久久久久久| 在线日韩视频| 免费久久一级欧美特大黄| 欧美电影网址| 最近更新的2019中文字幕 | 亚洲国产精品久久久久久| 福利一区二区三区四区| 不卡的看片网站| 日本久久久精品视频| 国产精品欧美日韩一区| 国产精品免费网站| 老司机免费在线视频| 日韩网站在线看片你懂的| 久久一二三四区| 97久久人人超碰| 免费看a级黄色片| 91精品国产视频| 国产精品久久九九| 成人性生交大片免费观看网站| 在线日韩日本国产亚洲| 国产尤物在线观看| 亚洲主播在线播放| 免费看黄色的视频| 精品制服美女丁香| 一卡二卡三卡视频| 欧美色女视频| 99一区二区| 欧美一区 二区 三区| 久久天堂av综合合色| 午夜av免费在线观看| 欧美精品丝袜久久久中文字幕| 九九精品在线观看视频| 久久久久久久久久久黄色| 中文字幕视频三区| 国产精品亚洲综合色区韩国| 亚洲一区免费看| 精品国产乱子伦一区二区| 国产免费亚洲高清| hd国产人妖ts另类视频| 日韩在线视频中文字幕| 少妇喷水在线观看| 欧美剧情电影在线观看完整版免费励志电影 | 少妇精品久久久一区二区三区| 国产精品视频1区| 丁香花在线观看完整版电影| 国产香蕉97碰碰久久人人| 俄罗斯嫩小性bbwbbw| 精品视频全国免费看| 免费日韩一级片| 中文字幕日韩精品一区| 中文字幕5566| 国产成人av电影在线| 999在线免费视频| 亚洲国产高清一区| 欧美日韩一级在线| 精品国产99| 久久偷看各类wc女厕嘘嘘偷窃| 国产精品毛片无码| 国产精品久久av| 亚洲午夜天堂| 国内精品久久久久影院优 | 人妻精品一区一区三区蜜桃91| 欧美色图片你懂的| 国产91国语对白在线| 午夜一区二区三区在线观看| www欧美com| 综合中文字幕亚洲| 国产午夜精品久久久久久久久| 99精品一区二区| 男人的天堂影院| 成人一区二区在线观看| 国产福利精品一区二区三区| 日本伊人精品一区二区三区观看方式| 黄页网站在线观看视频| 欧美二区视频| 看全色黄大色大片| 国产精品久久久久久久免费观看| 婷婷亚洲婷婷综合色香五月| 国产精品免费99久久久| 日韩福利视频| 欧美人与牛zoz0性行为| 久久综合九色99| 窝窝社区一区二区| 精品一区久久| 伊人成综合网yiren22| 久久av免费观看| 亚洲欧洲色图| 奇米视频888战线精品播放| 欧美日本成人| 日本高清久久一区二区三区| 久久99青青| 亚洲美女网站18| 久久国产亚洲| 亚洲自拍偷拍一区二区三区| 亚洲高清影视| 精品嫩模一区二区三区| 欧美日本三区| 国产 日韩 亚洲 欧美| 亚洲麻豆一区| aa免费在线观看| 日韩1区2区日韩1区2区| 一区二区三区 日韩| 精一区二区三区| 欧美精品色视频| 成人动漫精品一区二区| 国产熟女高潮一区二区三区| 26uuu国产电影一区二区| 这里只有久久精品| 国产精品美女久久久久久| 性欧美疯狂猛交69hd| 一区二区激情视频| 日韩欧美亚洲一区二区三区| 色综合久久天天| 国产精华7777777| 69堂成人精品免费视频| 亚洲黄色a级片| 亚洲人成绝费网站色www| 中文字幕在线观看日本| 免费av一区二区| 国产中文在线播放| 国产精品视频网| 51vv免费精品视频一区二区| 久久精品日韩| 久久精品青草| 欧美视频在线免费播放| 青青草97国产精品免费观看 | 另类图片第一页| 欧美精品尤物在线| 久久精品不卡| 日韩精品 欧美| 久久成人麻豆午夜电影| 中文在线观看免费视频| 国产欧美久久久精品影院| 欧美大片xxxx| 色诱视频网站一区| 精品人妻一区二区三区含羞草| 亚洲开心激情网| h片在线免费| 国产成人综合av| 欧美区一区二区| 欧美一区二区高清在线观看| 女生裸体视频一区二区三区| 116极品美女午夜一级| 国产在线精品一区二区| 精品少妇一区二区三区免费观| 日韩理论片网站| www.国产毛片| 亚洲成色www8888| 欧美18一19xxx性| 欧美亚洲第一页| a级日韩大片| 一本色道久久综合亚洲二区三区 | 国产wwwxx| 99re这里只有精品6| 人妻人人澡人人添人人爽| 91久久精品一区二区| 免费看黄网站在线观看| 日韩视频欧美视频| 网友自拍亚洲| 精品久久久久久中文字幕动漫 | 欧美国产日本韩| 丰满少妇乱子伦精品看片| 日韩亚洲欧美综合| 91在线导航| 日韩免费精品视频| 欧亚精品一区| 欧美一级视频在线播放| 国产一区二区三区免费在线观看 | 亚洲一区二区三区视频在线播放 | 国产亚洲精品女人久久久久久| 欧美在线观看视频在线| 欧美日韩在线中文字幕| 97在线视频一区| 51亚洲精品| 国产资源在线免费观看| 国产精品一区久久久久| 女同久久另类69精品国产| 欧美亚洲国产怡红院影院| 国产一级在线| 国产精品wwww| 成人3d精品动漫精品一二三| 成年人免费在线播放| 91视频观看视频| 国产三级av片| 亚洲精品网站在线播放gif| 国产乱码午夜在线视频| 国产一区自拍视频| 99国产精品自拍| 免费成人蒂法网站| 欧美性猛交xxxx黑人| 日韩精品123| 国产成人jvid在线播放| 妖精一区二区三区精品视频| 黄色a级片免费| 国产欧美精品一区aⅴ影院 | 日韩av在线播放中文字幕| 精品人妻中文无码av在线 | 欧美第十八页| 日韩成人精品视频在线观看| 亚洲欧洲美洲综合色网| 国产精品视频一二区| 另类视频在线观看| h视频久久久| 成年人网站免费视频| 久久综合色之久久综合| 亚洲精品久久久久久久蜜桃| 中文字幕欧美在线| 亚洲精品大全| 国产成人永久免费视频| 99久久久免费精品国产一区二区| 成年人免费高清视频| 中文字幕精品一区久久久久| 国产精品亚洲一区二区在线观看| 一本色道久久88亚洲精品综合| 成人国产精品视频| 国产又粗又猛又黄视频| 日韩视频欧美视频| 欧美人成在线观看ccc36| 亚洲乱码国产一区三区| 1区2区3区欧美| 黑人乱码一区二区三区av| 欧美在线中文字幕| 亚洲国产精品日韩专区av有中文| 性猛交╳xxx乱大交| 欧美午夜视频一区二区| 四虎久久免费| 国产伦精品一区二区三区四区免费| 亚洲九九精品| 免费一级suv好看的国产网站| 日韩欧美的一区二区| 制服丝袜专区在线| 日韩人妻精品一区二区三区| 白白色 亚洲乱淫| 亚洲天堂网视频| 久久久久久欧美| 999国产精品视频| 中文字幕5566| 日韩欧美色综合| 亚洲不卡系列| 婷婷五月综合缴情在线视频| 国产精品麻豆一区二区 | 成人激情午夜影院| 中国a一片一级一片|