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

SpringCloud Gateway 路由配置定位原理分析

網絡 通信技術
本節主要了解系統中的謂詞與配置的路由信息是如何進行初始化關聯生成路由對象的。每個謂詞工廠中的Config對象又是如何被解析配置的。

[[409660]]

 環境:springcloud Hoxton.SR11

本節主要了解系統中的謂詞與配置的路由信息是如何進行初始化關聯生成路由對象的。每個謂詞工廠中的Config對象又是如何被解析配置的。

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

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

SpringCloud Gateway 路由配置定位原理分析

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

  1. public class MethodRoutePredicateFactory extends   AbstractRoutePredicateFactory<MethodRoutePredicateFactory.Config> 
  2. //  
  3. public class PathRoutePredicateFactory extends AbstractRoutePredicateFactory<PathRoutePredicateFactory.Config> 
  4. // ... 

所有的謂詞工廠繼承的

AbstractRoutePredicateFactory中的泛型都是內部類的Config。這個是如何被配置上值的呢?

6.1 gateway自動配置

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

  1. public class GatewayAutoConfiguration { 
  2.   @Bean 
  3.   @ConditionalOnEnabledPredicate 
  4.   public PathRoutePredicateFactory pathRoutePredicateFactory() { 
  5.     return new PathRoutePredicateFactory(); 
  6.   } 
  7.   @Bean 
  8.   @ConditionalOnEnabledPredicate 
  9.   public QueryRoutePredicateFactory queryRoutePredicateFactory() { 
  10.     return new QueryRoutePredicateFactory(); 
  11.   } 
  12.   @Bean 
  13.   public RouteLocator routeDefinitionRouteLocator(GatewayProperties properties, List<GatewayFilterFactory> gatewayFilters, List<RoutePredicateFactory> predicates, RouteDefinitionLocator routeDefinitionLocator, ConfigurationService configurationService) { 
  14.     return new RouteDefinitionRouteLocator(routeDefinitionLocator, predicates, 
  15.             gatewayFilters, properties, configurationService); 
  16.   } 
  17.   @Bean 
  18.   @Primary 
  19.   @ConditionalOnMissingBean(name = "cachedCompositeRouteLocator"
  20.   public RouteLocator cachedCompositeRouteLocator(List<RouteLocator> routeLocators) { 
  21.     return new CachingRouteLocator(new CompositeRouteLocator(Flux.fromIterable(routeLocators))); 
  22.   } 

這里會層層委托最終查找查找路由定位會交給

RouteDefinitionRouteLocator。CachingRouteLocator起到緩存的作用,將配置的所有路由信息保存。

注意:這里的路由信息是在容器啟動后就會被初始化的。

  1. public class CachingRouteLocator { 
  2.   private final RouteLocator delegate; 
  3.  
  4.   private final Flux<Route> routes; 
  5.  
  6.   private final Map<String, List> cache = new ConcurrentHashMap<>(); 
  7.  
  8.   private ApplicationEventPublisher applicationEventPublisher; 
  9.  
  10.   public CachingRouteLocator(RouteLocator delegate) { 
  11.     this.delegate = delegate; 
  12.     routes = CacheFlux.lookup(cache, CACHE_KEY, Route.class) .onCacheMissResume(this::fetch); 
  13.   } 
  14.  
  15.   private Flux<Route> fetch() { 
  16.     return this.delegate.getRoutes().sort(AnnotationAwareOrderComparator.INSTANCE); 
  17.   } 

實例化CachingRouteLocator就開始查找所有配置的Route信息。最終的會委托給

RouteDefinitionRouteLocator

RouteDefinitionRouteLocator構造函數中的initFactories方法用來映射路由工廠的XxxRoutePredicateFactory。

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

方法中解析每一個謂詞工廠對應的名稱然后緩存到predicates 集合中。

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

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

CachingRouteLocator是個緩存路由定位器,是個首選的RouteLocator(@Primary),這里將

RouteDefinitionRouteLocator進行了合并。

6.2 生成路由對象Route及Config配置

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

根據上面的自動配置也知道了在服務啟動時就進行初始化所有路由信息了。

獲取路由信息

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

合并謂詞

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

進入lookup中

  1. private AsyncPredicate<ServerWebExchange> lookup(RouteDefinition route, PredicateDefinition predicate) { 
  2.   RoutePredicateFactory<Object> factory = this.predicates.get(predicate.getName()); 
  3.   if (factory == null) { 
  4.     throw new IllegalArgumentException("Unable to find RoutePredicateFactory with name " + predicate.getName()); 
  5.   } 
  6.   // 這里將配置中(yml文件)配置的name,args和謂詞工廠中的Config進行關聯設置值 
  7.   Object config = this.configurationService.with(factory) 
  8.     .name(predicate.getName()) 
  9.     .properties(predicate.getArgs()) 
  10.     .eventFunction((bound, properties) -> new PredicateArgsEvent( 
  11.         RouteDefinitionRouteLocator.this, route.getId(), properties)) 
  12.     .bind(); 
  13.   // 最終調用謂詞工廠(XxxRoutePredicateFactory的apply方法返回RoutePredicate該對象繼承Predicate) 
  14.   return factory.applyAsync(config); 

lookup方法中查找,也就是在這里將對應的謂詞Config與RouteDefinition(Predicate)中定義的相對應的屬性關聯。

進入factory.applyAsync方法

  1. @FunctionalInterface 
  2. public interface RoutePredicateFactory<C> extends ShortcutConfigurable, Configurable<C> { 
  3.   default AsyncPredicate<ServerWebExchange> applyAsync(C config) { 
  4.     return toAsyncPredicate(apply(config)); // 查看下面的6.2-1圖當前apply所有的實現就是系統內部定義的XxxRoutePredicateFactory 
  5.   } 
  6. // apply(config),如這里配置了Path謂詞,那么就會進入PathRoutePredicateFactory中的apply方法 
  7. public Predicate<ServerWebExchange> apply(Config config) { 
  8.   // other code     
  9.   return new GatewayPredicate() { 
  10.     public boolean test() { 
  11.       // todo     
  12.     } 
  13.   } 
  14. // 最后返回一個異步的謂詞 
  15. public static AsyncPredicate<ServerWebExchange> toAsyncPredicate(Predicate<? super ServerWebExchange> predicate) { 
  16.   Assert.notNull(predicate, "predicate must not be null"); 
  17.   // 這里from就是返回一個DefaultAsyncPredicate默認的異步謂詞 
  18.   return AsyncPredicate.from(predicate); 
  19. static AsyncPredicate<ServerWebExchange> from( Predicate<? super ServerWebExchange> predicate) { 
  20.   return new DefaultAsyncPredicate<>(GatewayPredicate.wrapIfNeeded(predicate)); 
SpringCloud Gateway 路由配置定位原理分析

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

  1. public class Route implements Ordered { 
  2.   private final String id; 
  3.     
  4.   private final URI uri; 
  5.     
  6.   private final int order
  7.     
  8.   private final AsyncPredicate<ServerWebExchange> predicate; 
  9.     
  10.   private final List<GatewayFilter> gatewayFilters; 
  11.     
  12.   private final Map<String, Object> metadata; 
  13. }     

這些Route對象會被保存在上面說的

CachingRouteLocator.routes中。

6.3 定位路由

根據上面的配置RouteLocator 該類用來定位路由(查找具體的使用哪個路由);當一個請求過來會查找是哪個路由。

RouteLocator中定義了一個方法

  1. public interface RouteLocator { 
  2.  
  3.   Flux<Route> getRoutes(); 
  4.  

查看這個getRoutes方法是誰調用的 

SpringCloud Gateway 路由配置定位原理分析

看到這個

RoutePredicateHandlerMapping是不是想起了Spring MVC中的HandlerMapping(我們所有的Controller都會被 RequestMappingHanlderMapping 匹配)。通過名稱也就知道了該HandlerMapping用來匹配我們的路由謂詞的誰來處理路由。

接下來回到前面說的

RequestMappingHanlderMapping 對象,當我們請求一個路由地址時會執行該類中的lookup方法查找路由

  1. protected Mono<Route> lookupRoute(ServerWebExchange exchange) { 
  2.   // 這里的this.routeLocator就是 CachingRouteLocator對象  
  3.   return this.routeLocator.getRoutes() 
  4.       .concatMap(route -> Mono.just(route).filterWhen(r -> { 
  5.         exchange.getAttributes().put(GATEWAY_PREDICATE_ROUTE_ATTR, r.getId()); 
  6.         // 過濾查找符合的路由   
  7.         return r.getPredicate().apply(exchange); 
  8.      }).doOnError(e -> logger.error( 
  9.           "Error applying predicate for route: " + route.getId(), 
  10.      e)).onErrorResume(e -> Mono.empty())) 
  11.         .next() 
  12.         .map(route -> { 
  13.           if (logger.isDebugEnabled()) { 
  14.             logger.debug("Route matched: " + route.getId()); 
  15.           } 
  16.           validateRoute(route, exchange); 
  17.           return route; 
  18.      }); 

進入r.getPredicate().apply(exchange)

  1. public interface AsyncPredicate<T> extends Function<T, Publisher<Boolean>> { 
  2.   static AsyncPredicate<ServerWebExchange> from(Predicate<? super ServerWebExchange> predicate) { 
  3.   return new DefaultAsyncPredicate<>(GatewayPredicate.wrapIfNeeded(predicate)); 
  4.   } 
  5.  
  6.   class DefaultAsyncPredicate<T> implements AsyncPredicate<T> { 
  7.  
  8.     private final Predicate<T> delegate; 
  9.  
  10.     public DefaultAsyncPredicate(Predicate<T> delegate) { 
  11.       this.delegate = delegate; 
  12.     } 
  13.  
  14.     @Override 
  15.     public Publisher<Boolean> apply(T t) { 
  16.       return Mono.just(delegate.test(t)); 
  17.     } 
  18.  
  19.     @Override 
  20.     public String toString() { 
  21.       return this.delegate.toString(); 
  22.     } 
  23.  
  24.   } 
  25.  

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

調用GatewayPredicate.test返回判斷當前請求的路由是否匹配。

整體的一個流程:

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

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

3、根據請求路由路徑查找匹配的路由

 

責任編輯:姜華 來源: 今日頭條
相關推薦

2023-07-20 10:04:37

底層路由配置

2023-08-11 08:42:49

泛型工廠繼承配置

2021-03-26 06:01:45

日志MongoDB存儲

2023-05-04 08:09:33

serviceId路徑謂詞中心注冊

2019-09-10 13:58:57

動態路由路由器網絡

2009-12-23 17:33:02

光纖路由技術

2010-07-08 15:08:12

2022-05-16 08:22:11

網關過濾器路由

2022-05-12 08:21:13

項目網關模塊

2022-06-12 07:27:39

微服務GateWay

2021-08-26 11:52:32

FeignWeb服務

2020-11-18 11:26:45

SpringCloudZuulJava

2009-12-15 13:35:18

路由協議分析儀

2009-12-09 10:07:22

配置靜態路由

2010-10-14 14:46:23

無線路由器配置

2009-11-11 14:18:00

動態路由協議

2010-01-22 17:56:31

千兆路由交換機

2023-10-16 22:07:20

Spring配置中心Bean

2009-12-17 14:07:58

配置靜態路由

2009-12-11 15:41:16

路由交換機配置
點贊
收藏

51CTO技術棧公眾號

gay欧美网站| 污污的视频网站在线观看| 色婷婷亚洲mv天堂mv在影片| 欧美精品自拍偷拍动漫精品| 成年人视频大全| 欧洲成人一区二区三区| 久久天堂精品| 久久久国产精品一区| 激情小说欧美色图| 亚洲第一会所001| 亚洲人成7777| 久久99精品久久久久久秒播放器| 波多野结衣不卡| 亚洲va在线| 亚洲乱亚洲乱妇无码| 污视频网址在线观看| 成人免费观看在线观看| 中文字幕成人av| 国产传媒一区二区| 波多野结衣毛片| 亚洲香蕉网站| 中文字幕最新精品| 波多野结衣先锋影音| 亚洲人体在线| 精品久久久视频| 影音先锋欧美在线| 日韩黄色影片| 国产成人免费视频网站| 国产精品久久久久久搜索| 久久伊人成人网| 日韩欧美在线中字| 国产丝袜精品视频| 黄色av电影网站| 欧美日韩免费电影| 91久久精品一区二区三区| 人妻激情另类乱人伦人妻| 亚洲s色大片| www久久精品| 国产传媒一区二区| 国产aⅴ爽av久久久久成人| 日本欧美加勒比视频| 91wwwcom在线观看| 一级片免费网址| 欧美日韩一区二区高清| 日韩视频在线一区| 性少妇xx生活| 日韩av首页| 欧美性猛交99久久久久99按摩| 日本一级黄视频| 麻豆91在线| 中文字幕五月欧美| 亚洲ai欧洲av| av福利精品| 久久精品欧美一区二区三区不卡| 精品亚洲欧美日韩| 午夜黄色小视频| 波多野结衣91| 国产精品一区二区三区免费观看 | 91欧美视频在线| 日韩经典一区| 在线看国产一区二区| 北条麻妃在线一区| 深夜视频一区二区| 欧美色综合影院| 国产精品人人爽人人爽| 日本肉肉一区| 欧美日韩三级一区二区| 久久国产精品国产精品| 视频91a欧美| 91精品一区二区三区在线观看| 57pao国产成永久免费视频| 国产亚洲亚洲国产一二区| 在线电影一区二区三区| 在线观看视频在线观看| 成人精品毛片| 亚洲精品一区二三区不卡| 国产精品白丝在线| 欧美日韩精品不卡| 国产精品四虎| 亚洲欧美在线视频观看| 少妇久久久久久被弄到高潮| 91福利在线免费| 富二代精品短视频| 五月婷婷丁香综合网| 99综合久久| 欧美v亚洲v综合ⅴ国产v| 中文字幕影片免费在线观看| 国产欧美日韩精品一区二区三区| 国产一区二区黑人欧美xxxx| 一区二区国产精品精华液| 欧美久久久久| 奇米4444一区二区三区| 亚洲系列第一页| 国产iv一区二区三区| 精品在线不卡| 黄色av免费在线看| 亚洲精品成人悠悠色影视| 九色自拍视频在线观看| 国产h片在线观看| 欧美亚洲一区三区| 在线播放第一页| 精品中文一区| 久久不射热爱视频精品| 国产专区第一页| 久久66热偷产精品| 鲁鲁狠狠狠7777一区二区| 在线观看黄av| 午夜av一区二区三区| 成人性做爰aaa片免费看不忠| 九九九九九九精品任你躁| 精品无人区太爽高潮在线播放| 久草手机视频在线观看| 亚洲中字在线| 成人h在线播放| 成人在线观看黄色| 亚洲成精国产精品女| 手机看片一级片| 日本一道高清一区二区三区| 久久人人爽人人爽爽久久| 免费看日批视频| 懂色一区二区三区免费观看| 亚洲一区二区在线免费观看| 嗯~啊~轻一点视频日本在线观看| 欧美日韩高清不卡| 天天插天天射天天干| 特级西西444www大胆免费看| 午夜日韩激情| 国产精品欧美风情| 污视频网站在线播放| 亚洲精品菠萝久久久久久久| 国产视频1区2区3区| 亚洲成在人线免费观看| 欧美激情综合亚洲一二区| 亚洲综合五月天婷婷丁香| 久久精子c满五个校花| 无码专区aaaaaa免费视频| 欧美成人精品午夜一区二区| 最近2019中文字幕大全第二页| 草久久免费视频| 成人国产精品免费网站| 国产精品免费看久久久无码| 国产精品亚洲一区二区在线观看| 最近2019中文字幕大全第二页| 欧美男人天堂网| 久久精品视频在线免费观看| 激情综合在线观看| 婷婷成人在线| 91国产一区在线| 欧美一区二区三区黄片| 午夜国产精品影院在线观看| 日韩av手机在线播放| 亚洲电影av| 国产91一区二区三区| 久久bbxx| 欧美一区二区视频在线观看2020| www.av免费| 精品午夜久久福利影院| 日本黄色播放器| 高清精品久久| 久久综合久久八八| 国产情侣在线播放| 一区二区三区在线高清| 一区二区在线免费观看视频| 国产精品激情| 成人激情av| 成人免费图片免费观看| 亚洲色图综合久久| 日韩成人av免费| yourporn在线观看中文站| 欧美亚洲综合另类| 永久av免费网站| 狠狠色丁香久久婷婷综合_中 | 鲁一鲁一鲁一鲁一av| 精品久久不卡| 国产免费一区二区三区在线能观看| 在线观看免费黄视频| 欧美一区二区三区在线观看视频| 91成人福利视频| 99久久久久久99| 精品免费国产一区二区| 日韩精品免费| 114国产精品久久免费观看| 国产精品国精产品一二| 日韩精品高清视频| 亚洲精品一区二区二区| 综合激情成人伊人| 欧美xxxxx少妇| 噜噜噜久久亚洲精品国产品小说| 青青成人在线| 国产一区二区久久久久| 国内偷自视频区视频综合| 免费在线性爱视频| 91精品免费观看| 国产极品在线播放| 亚洲国产高清aⅴ视频| 色哟哟在线观看视频| 国产亚洲成人一区| 日本福利视频导航| 欧美理伦片在线播放| 国产精品在线看| 女人黄色免费在线观看| 在线观看欧美www| 亚洲AV无码乱码国产精品牛牛| 狠狠色狠狠色综合日日小说 | 亚洲精品国产a| 国产福利短视频| 精品一区二区在线播放| 青青草视频在线免费播放| 成人精品久久| 国产在线资源一区| 国产一区精品福利| 欧美亚洲在线视频| 中国av在线播放| 亚洲视频在线观看免费| 亚洲欧美另类一区| 欧美日韩一区二区三区视频 | 在线一区二区视频| 精品视频在线观看免费| 国产精品人人做人人爽人人添 | 成人污版视频| 欧洲亚洲在线视频| 91禁在线看| 久久久精品免费视频| 国产区视频在线| 亚洲第一福利视频| 国产露脸91国语对白| 在线观看视频一区二区欧美日韩| 日本熟妇毛耸耸xxxxxx| 亚洲天堂成人网| 国产精品久久久久久成人| 91麻豆免费在线观看| 久久精品无码专区| 国产精品18久久久久久vr| 一级片视频免费观看| 日韩avvvv在线播放| 欧美v在线观看| 在线日本高清免费不卡| 一二三四中文字幕| 国产精品黑丝在线播放| 水蜜桃一区二区| 国产精品美女久久久久久不卡| 精品国产一区二区三区免费| 中文字幕日韩高清在线| 亚洲字幕在线观看| av在线播放一区二区| 成人精品一区二区三区电影免费 | 亚洲精品一区二区妖精| 色狠狠久久av五月综合| 久久不见久久见国语| 欧美一级二级三级| 综合亚洲色图| 麻豆久久久av免费| 天海翼亚洲一区二区三区| 国产女主播一区二区三区| 91成人噜噜噜在线播放| 国产高清一区视频| 国产一区福利| 国产精品日韩一区二区免费视频| 51亚洲精品| 国产精品jizz视频| 久久久久97| 欧美久久在线| 国产在线日韩精品| 午夜精品一区二区在线观看的| 日本一区二区三区视频| 亚洲精品自在在线观看| 先锋资源久久| 日本免费成人网| 亚洲作爱视频| 亚洲精品无码久久久久久| 日韩精品一卡二卡三卡四卡无卡| 久久人妻精品白浆国产| 青椒成人免费视频| 中文字幕亚洲影院| 成人永久免费视频| 特级西西人体wwwww| 日本一区二区三级电影在线观看| 日本裸体美女视频| 亚洲国产一二三| 国产美女激情视频| 欧美日韩一区在线| 亚洲av少妇一区二区在线观看| 亚洲国产精品久久久久| 日本中文字幕电影在线观看| 中文字幕亚洲欧美| 欧美xxxx做受欧美88bbw| 欧美一级淫片aaaaaaa视频| 黄色精品视频| av一本久道久久波多野结衣| 婷婷精品在线观看| 亚洲一区三区| 精品二区久久| 久久综合伊人77777麻豆最新章节| 韩国女主播成人在线| 娇妻高潮浓精白浆xxⅹ| 国产欧美一区二区精品婷婷 | 97av视频在线| 国产精品亲子伦av一区二区三区| 91亚洲国产精品| 亚洲高清极品| 日本一道在线观看| 日韩精品一级二级 | 日韩在线电影| 久久久久久国产精品mv| 亚洲国产精品久久久天堂| 黄色一级在线视频| 国内精品久久久久影院一蜜桃| 精品国产人妻一区二区三区| 国产精品久久久久久久久免费丝袜 | 亚洲不卡在线视频| 日韩三级中文字幕| 成人在线免费电影| 38少妇精品导航| 久久精品九色| 午夜视频久久久| 夜久久久久久| 国产精品嫩草69影院| 国产日韩精品一区二区三区在线| 久久免费公开视频| 欧美日韩国产电影| 免费国产在线视频| 久久全球大尺度高清视频| 祥仔av免费一区二区三区四区| 久久久免费看| 伊人成人在线视频| 亚洲色图欧美自拍| 国产精品情趣视频| 99精彩视频| 综合久久2019| 国产精品久久久久久一区二区 | 久久精品中文字幕一区二区三区 | 色噜噜国产精品视频一区二区| 99色在线观看| 9a蜜桃久久久久久免费| 外国成人免费视频| 黄色手机在线视频| 国产色综合久久| 人妻丰满熟妇av无码区| 亚洲精品mp4| 欧美午夜大胆人体| av色综合网| 欧美视频一区| 亚洲女人在线观看| 亚洲色图欧洲色图| 国产精品熟女久久久久久| 中文字幕日韩精品有码视频| 日韩av大片站长工具| 欧美xxxx黑人又粗又长密月| 亚洲综合不卡| 极品人妻一区二区三区| 黑人欧美xxxx| 国产美女性感在线观看懂色av| 欧美专区在线播放| 啄木系列成人av电影| 欧美综合在线观看视频| 久久久国产精华| avtt天堂在线| 日韩美女视频一区二区在线观看| 中中文字幕av在线| av日韩免费电影| 亚洲每日在线| 91av在线免费| 色老汉一区二区三区| av中文字幕一区二区三区| 国产日本欧美一区二区三区在线 | 日本一区二区三区www| 亚洲欧美激情诱惑| 69视频在线观看免费| 欧美三级中文字| 乱人伦中文视频在线| 91亚色免费| 日韩午夜精品| 法国空姐电影在线观看| 欧美三级电影在线观看| 熟女俱乐部一区二区| 激情深爱一区二区| 久久久全国免费视频| 日韩高清中文字幕| 88xx成人网| 天堂av免费看| 成人福利视频在线| www.久久久久久久| 久久精品99无色码中文字幕| 亚洲91网站| 国产精品秘入口18禁麻豆免会员| 国产农村妇女精品| 国产日韩在线观看一区| 69精品小视频| 欧美电影免费播放| 亚洲美女精品视频| 91久久线看在观草草青青| √新版天堂资源在线资源| 1卡2卡3卡精品视频| 午夜一区不卡| 日韩av手机在线免费观看| 亚洲国产精品字幕| 欧美极品在线| av动漫在线看| 丝袜国产在线| 国产在线视视频有精品|