精品欧美一区二区三区在线观看 _久久久久国色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)

欧美韩国日本精品一区二区三区| 亚洲视频精品在线| 国产女主播自拍| 青青草av免费在线观看| 老司机精品视频网站| 自拍视频国产精品| 久久发布国产伦子伦精品| 国产在线88av| 国产精品日韩成人| 国产欧美一区二区三区另类精品| 欧美精品韩国精品| 久久精品国产68国产精品亚洲| 制服.丝袜.亚洲.中文.综合| 亚洲人精品午夜射精日韩| 狠狠狠综合7777久夜色撩人| 狠狠色丁香久久婷婷综合丁香| 久久久久久久久久久久av| 欧洲美一区二区三区亚洲| 久久久久久久久久久久电影| 欧美天堂在线观看| 老司机午夜免费福利视频| 狠狠色伊人亚洲综合网站l| 国产精品一区二区视频| 国产精品成人国产乱一区| 欧美精品久久久久性色| 欧美日韩中文字幕一区二区三区 | 99re这里只有精品在线| 亚洲中无吗在线| 国产亚洲精品日韩| 2一3sex性hd| 一区二区日韩| 欧美高清视频在线高清观看mv色露露十八| 成人午夜免费在线视频| 啊v视频在线| 99久久99久久综合| av一区二区三区四区电影| 中文字幕日韩三级| 久久久久久黄| 96精品视频在线| 国产一级av毛片| 一区二区三区四区电影| 最近中文字幕mv在线一区二区三区四区 | 日韩精品一区二区三区中文精品| 国产精品一区二区羞羞答答| 超碰国产一区| 欧美性极品xxxx娇小| 日韩精品视频在线观看视频| av免费在线免费观看| 亚洲欧洲日产国产综合网| 日韩av不卡在线播放| 欧美日韩在线中文字幕| 91免费在线视频观看| 国产精品日韩欧美一区二区三区 | 亚洲性av在线| 免费看污片的网站| 欧美日韩在线观看视频小说| 一区国产精品视频| 国产精品国产三级国产专业不| 欧美天堂影院| 亚洲毛片在线免费观看| 国产男女猛烈无遮挡a片漫画 | 中文字幕精品一区日韩| 日本在线观看视频| 综合久久久久久| 黄色www在线观看| 97影院秋霞午夜在线观看| 一区二区理论电影在线观看| 国产真实老熟女无套内射| a级片免费在线观看| 午夜欧美视频在线观看| 国产在线青青草| 美女100%一区| 欧美日韩精品三区| 在线免费观看av网| 国产一区二区三区亚洲| 精品一区精品二区| av男人的天堂av| 外国成人免费视频| 欧美激情一级欧美精品| 国产成人无码一区二区三区在线| 免费欧美在线| 国产精品美女999| 精品国产免费无码久久久| 成人动漫在线一区| 日韩福利影院| 91在线中文| 欧美性xxxx极品高清hd直播| 浓精h攵女乱爱av| 欧一区二区三区| 精品视频在线播放色网色视频| 久久午夜福利电影| 在线免费观看日本欧美爱情大片| 国内精品免费午夜毛片| 欧美brazzers| 国产精品中文字幕日韩精品| 好吊色欧美一区二区三区四区| 国产在线三区| 亚洲综合清纯丝袜自拍| 男人操女人免费| 国模大尺度视频一区二区| 日韩大陆毛片av| 永久免费看片直接| 亚洲国产日韩在线| 国产原创欧美精品| 同心难改在线观看| 亚洲人吸女人奶水| 欧美激情成人网| 我要色综合中文字幕| 精品成人无码久久久久久| 欧美78videosex性欧美| 香蕉久久一区二区不卡无毒影院| 欧美激情精品久久久久久小说| 国产精品18| 日韩精品视频在线观看网址| 日韩精品一区二区三区在线视频| 亚洲午夜av| 国产精品成人一区二区三区吃奶| www男人的天堂| 欧美韩日一区二区三区四区| 久久精品无码中文字幕| 国产成人亚洲一区二区三区 | 国产孕妇孕交大片孕| 91色综合久久久久婷婷| 国产内射老熟女aaaa| 日本成人福利| 亚洲国产精品yw在线观看| 97在线观看视频免费| 视频一区视频二区中文| 国产一区自拍视频| 亚洲卡一卡二| 欧美另类变人与禽xxxxx| 扒开jk护士狂揉免费| 亚洲手机视频| 亚洲一区二区三区视频播放| 3p视频在线观看| 欧美性xxxxxx| aaaaaav| 精品91久久久久| 亚洲v日韩v综合v精品v| 在线观看精品一区二区三区| 日本精品一区二区三区高清 | 国产欧美日韩在线| 青青青在线播放| 首页亚洲中字| 4438全国成人免费| 神马久久高清| 精品美女永久免费视频| 日韩少妇一区二区| 亚洲国产免费看| 精品毛片久久久久久| 国产在线观看www| 日韩成人中文字幕在线观看| 中文字幕在线观看视频网站| 成人午夜短视频| 日韩视频在线视频| 久久狠狠久久| 欧美自拍大量在线观看| 日本福利片在线| 色999日韩国产欧美一区二区| 美女久久久久久久久久| 久久一区欧美| 亚洲国产一区二区在线| 综合久久av| 欧美日韩国产成人高清视频| 亚洲精品无码专区| 欧美日韩另类字幕中文| 受虐m奴xxx在线观看| 免费久久精品视频| avove在线观看| 波多野结衣欧美| 欧美一区二区三区……| 第三区美女视频在线| 欧美日韩精品欧美日韩精品一 | 成年人的黄色片| 午夜亚洲福利在线老司机| 日本欧美精品久久久| 四虎精品在线观看| 欧美劲爆第一页| 日中文字幕在线| 精品视频全国免费看| 国产精品久久久精品四季影院| 成人激情午夜影院| 成年人在线看片| 中文字幕亚洲精品乱码| 精品在线不卡| 国产精品诱惑| 欧美激情aaaa| 蜜桃视频在线播放| 日韩一区二区免费在线观看| 日韩特级黄色片| 综合久久给合久久狠狠狠97色| 美国黄色一级视频| 日本不卡视频在线| 成人免费观看在线| 欧美色蜜桃97| 国产a一区二区| 在线成人视屏| 久久久综合免费视频| 福利视频在线看| 欧美va亚洲va在线观看蝴蝶网| 精品人妻一区二区三区潮喷在线| 伊人夜夜躁av伊人久久| 右手影院亚洲欧美| 国产精品 日产精品 欧美精品| 男女av免费观看| 亚洲精品国产首次亮相| 欧美日韩中文国产一区发布| 日韩区一区二| 国产精品久久久| 超碰在线视屏| 久久久国产精品一区| 你懂的视频在线免费| 3d动漫精品啪啪| 91黑人精品一区二区三区| 亚洲电影一区二区三区| 在线免费看av网站| 久久精品亚洲乱码伦伦中文| 精品人妻人人做人人爽夜夜爽| 日本最新不卡在线| 黄色免费观看视频网站| 欧美午夜不卡| www.亚洲一区二区| 久久国产成人午夜av影院宅| 久久久久久亚洲精品不卡4k岛国 | 免费人成在线不卡| 日韩欧美精品在线观看视频| 欧美午夜国产| 国产一级片91| 在线中文字幕亚洲| 中文字幕一区综合| 日韩欧美字幕| 亚洲电影网站| 欧美色图国产精品| 欧美精品一区二区三区在线四季| 精品亚洲免a| 国产伦视频一区二区三区| 日本超碰一区二区| 91在线在线观看| 欧美.com| 51精品国产人成在线观看 | 91精品国产综合久久久久久 | 一区二区三区我不卡| 怕怕欧美视频免费大全| 欧美大香线蕉线伊人久久| 欧美重口另类| 久久精品ww人人做人人爽| 国产一级成人av| 久久99久久99精品蜜柚传媒| 极品束缚调教一区二区网站| 国产精品一区二区你懂得| 亚洲国产中文在线| www.久久久| 久久综合五月婷婷| 欧美凹凸一区二区三区视频| 中文字幕亚洲影视| 日韩精品一区二区三区四区五区| 欧美三级三级| 中文字幕人成一区| 欧美激情综合| 无码精品a∨在线观看中文| 久久三级视频| 中文字幕av不卡在线| 国模少妇一区二区三区| 人妻 日韩 欧美 综合 制服| 9l国产精品久久久久麻豆| 一区二区三区四区免费| 中文字幕日韩精品一区| 久草资源在线视频| 日韩欧美在线第一页| 在线观看视频中文字幕| 日韩一区二区免费电影| 亚洲区小说区图片区| 国产一区二区免费| 成人黄视频在线观看| 午夜精品久久久久久久久久久久 | brazzers精品成人一区| 国产精品高潮呻吟| 九九九国产视频| 欧美性大战久久久| 亚洲av少妇一区二区在线观看 | 亚洲欧美成人| 国产aⅴ爽av久久久久| 成人av网站免费| 亚洲av无码国产精品久久| 成人精品gif动图一区| 国产精品自在自线| 99久久国产免费看| 成人免费毛片糖心| 亚洲综合色网站| 中文字幕亚洲乱码熟女1区2区| 欧美裸体一区二区三区| 亚洲a视频在线观看| 亚洲精品国产成人| 免费a在线看| 久久久久中文字幕| 涩涩视频在线| 91久久在线视频| 久久资源综合| 国产精品无码乱伦| 久久久天天操| 黄色在线免费播放| 中文字幕av一区 二区| 久久久久久天堂| 欧美欧美欧美欧美首页| 日本高清视频www| 自拍偷拍亚洲精品| 欧美最新精品| 成人动漫视频在线观看免费| 欧美va久久久噜噜噜久久| 欧美午夜性视频| 六月婷婷色综合| 扒开jk护士狂揉免费| 夜夜嗨av一区二区三区四季av| av大全在线观看| 日韩视频永久免费| www.亚洲免费| 国产成+人+综合+亚洲欧洲 | 69174成人网| 欧美偷拍综合| 91猫先生在线| 国产成人精品影视| 人人干在线观看| 91精品1区2区| 飘雪影院手机免费高清版在线观看| 日韩中文字幕亚洲| a日韩av网址| 久久99久久99精品蜜柚传媒| 午夜精品婷婷| 少妇愉情理伦片bd| 国产精品久久久久久妇女6080| 国产又黄又爽又色| 日韩精品亚洲精品| 成人影院在线播放| 99re在线视频观看| 99久久亚洲精品蜜臀| 成人黄色片视频| 国产亚洲欧洲997久久综合| 国产午夜福利一区二区| 色噜噜夜夜夜综合网| 欧美性孕妇孕交| 51色欧美片视频在线观看| 六月丁香久久丫| 91黄色在线看| 成人小视频免费在线观看| 欧美成欧美va| 日韩欧美综合在线| 国产偷倩在线播放| 国产成人一区二区三区免费看| 欧美3p在线观看| 亚洲三级在线视频| 亚洲欧洲制服丝袜| 亚洲产国偷v产偷v自拍涩爱| 久久亚洲影音av资源网| 四虎4545www国产精品| 丝袜足脚交91精品| 日本午夜一区二区| 日韩一卡二卡在线观看| 欧美日韩你懂得| 色综合久久影院| 成人在线免费网站| 亚洲天堂黄色| 一本加勒比北条麻妃| 一本一道综合狠狠老| 天天操天天干天天操| 91超碰中文字幕久久精品| 日韩大胆成人| 国产精品亚洲αv天堂无码| 欧美激情在线看| 92久久精品一区二区| 久久人人看视频| 国产毛片精品| 国产av人人夜夜澡人人爽麻豆| 91亚洲资源网| 黄色污污视频软件| 另类天堂视频在线观看| 久久爱www.| 亚洲美免无码中文字幕在线| 久久一夜天堂av一区二区三区 | 91精品欧美综合在线观看最新| 中文字幕有码在线观看| 久久综合久久综合这里只有精品| 亚洲欧美清纯在线制服| 日本二区三区视频| 欧美一级黄色大片| aa视频在线观看| 在线观看成人av| 国产超碰在线一区| 人人妻人人爽人人澡人人精品| 日韩网站免费观看| 欧美激情极品| 一级黄色录像在线观看| 五月激情丁香一区二区三区| 国内在线免费高清视频| 亚洲综合社区网| 爽好久久久欧美精品| 一级片一级片一级片| 亚洲人成免费电影| 日本伊人久久| 亚洲 激情 在线| 亚洲午夜激情av|