精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

在线亚洲精品| 日本成人精品| 国产精品沙发午睡系列990531| 国产精品精品一区二区三区午夜版 | 天天爽夜夜爽夜夜爽精品| 啪啪激情综合网| 欧美日韩一区小说| 久久国产午夜精品理论片最新版本| 日韩二区三区| 国产一区二区看久久| 97人洗澡人人免费公开视频碰碰碰| 国产又粗又硬视频| 丁香婷婷成人| 欧美一区二区三区四区在线观看| 91丨porny丨探花| 亚洲欧美视频一区二区| aaa亚洲精品| 成人国产精品av| 亚洲 欧美 成人| 欧美激情四色| 中文字幕亚洲欧美| 风间由美一二三区av片| 国产一区二区视频在线看 | 国产精品免费无遮挡无码永久视频| 91超碰成人| 亚洲无av在线中文字幕| 在线精品视频播放| 成人免费观看49www在线观看| 一本久久综合亚洲鲁鲁五月天 | 少妇影院在线观看| 波多野结衣在线观看一区二区| 精品黑人一区二区三区久久| 超碰人人草人人| 精品欧美一区二区三区在线观看| 亚洲无人区一区| 亚洲区成人777777精品| 在线看黄色av| 欧美激情一区二区三区不卡 | 国产精品久久观看| 国产一区二区三区三区在线观看 | 国产精品无码久久av| 久久成人一区| 欧美亚州一区二区三区| 国产一级在线观看视频| 欧美黄免费看| 久久99视频免费| 波多野结衣不卡视频| 97久久视频| 色阁综合伊人av| 第一次破处视频| 狠狠综合久久av一区二区蜜桃| 亚洲精品大尺度| 97人妻精品一区二区三区免费 | 综合视频在线观看| 免费网站成人| 亚洲三级在线看| 欧美日韩视频免费在线观看| 精品孕妇一区二区三区| 中文字幕亚洲一区二区va在线| 亚洲欧洲精品一区二区| aiai在线| 亚洲色大成网站www久久九九| 伊人久久大香线蕉综合75| 日本视频在线播放| 亚洲日本在线视频观看| 成年人视频大全| 国产蜜臀av在线播放| 亚洲h在线观看| 日本中文字幕片| 不卡亚洲精品| 日韩一区二区三区视频在线 | 久久精品免费一区二区| 国产欧洲在线| 色94色欧美sute亚洲13| 美女一区二区三区视频| 日日夜夜亚洲精品| 日韩一区二区三区电影| 黄色av电影网站| 色爱综合av| 伊人青青综合网站| 强制高潮抽搐sm调教高h| 欧美久色视频| 日本久久久久久| 亚洲天堂狠狠干| 国产**成人网毛片九色 | 91女主播在线观看| 一区二区三区免费| 播放灌醉水嫩大学生国内精品| 97久久香蕉国产线看观看| 欧美日韩亚州综合| 95视频在线观看| 欧美丝袜丝交足nylons172| 久久视频这里只有精品| 日韩免费一级片| 麻豆精品在线播放| 国产精品免费区二区三区观看| 黄色在线视频观看网站| 一区二区高清在线| 国内自拍视频一区| 1204国产成人精品视频| 亚洲小视频在线| 久久网中文字幕| 日韩av中文字幕一区二区三区| 91视频99| 91porn在线观看| 精品久久久久国产| 亚洲女人在线观看| 欧洲杯什么时候开赛| 久久久久久久激情视频| 一级黄色片在线| 久久精品日产第一区二区三区高清版 | 嫩草在线视频| 日韩欧美极品在线观看| 国产精品99精品无码视亚| 欧美军人男男激情gay| 久久乐国产精品| 国产精品怡红院| 国产女主播视频一区二区| 欧美精品一区二区三区三州| 婷婷成人av| 亚洲三级av在线| 日韩伦人妻无码| 国产一区二区三区四区五区美女| 日本一区二区三不卡| 国模私拍一区二区国模曼安| 欧美成人三级电影在线| 日韩激情小视频| 蜜臀av性久久久久蜜臀aⅴ| 久久久久久久久久久久久久久久av| 亚洲无线看天堂av| 欧美福利视频一区| 东京热无码av男人的天堂| 久久亚洲欧美| 欧美日韩大片一区二区三区 | 日韩欧美国产高清91| 一级欧美一级日韩片| 狠狠色丁香久久综合频道| 亚洲www在线观看| 久久亚洲天堂| 欧美精品18+| www.4hu95.com四虎| 日韩国产精品久久久久久亚洲| 麻豆91蜜桃| 在线免费av资源| 国产丝袜一区二区| 中文字幕精品三级久久久| aaa国产一区| 无码精品a∨在线观看中文| 美女一区2区| 欧美一级视频一区二区| 偷拍自拍在线| 色综合 综合色| 日本综合在线观看| 蜜臀av国产精品久久久久| 手机成人在线| 日韩av黄色| 欧美老少配视频| 黄色av免费观看| 亚洲成av人片一区二区三区| 国产精品麻豆入口| 麻豆成人精品| 亚洲成人av动漫| 国产精品亚洲四区在线观看| 欧美日韩福利电影| 香蕉视频国产在线| 日本精品一区二区三区高清| 久久久精品成人| 国产在线视视频有精品| 17c丨国产丨精品视频| 噜噜噜狠狠夜夜躁精品仙踪林| 欧美一区二区三区……| 波多野结衣一区二区| 欧美欧美午夜aⅴ在线观看| 欧美日韩午夜视频| 成人福利视频网站| 国产福利一区视频| 91精品一区二区三区综合在线爱| 成人在线观看av| 欧美黄色网页| 久久国产精品影视| 香蕉视频国产在线| 欧美日韩免费在线视频| 免费在线观看亚洲| 久久精品一区二区三区不卡牛牛| 亚洲欧美国产中文| 一区二区亚洲| 日韩国产一区久久| 天堂久久av| 国产精品久久久久久久美男| 在线中文字幕第一页| 国产午夜精品理论片a级探花| 在线观看免费中文字幕| 亚洲一区二区在线免费观看视频| 乐播av一区二区三区| 国产精品一二三在| 国产又黄又猛视频| 欧美一区二区三区久久精品茉莉花 | 首页亚洲中字| 91精品视频在线播放| 日本乱码一区二区三区不卡| 日韩色av导航| 免费在线看v| 日韩欧美视频一区| 这里只有精品999| 婷婷六月综合网| 日本精品人妻无码77777| 久久久精品免费免费| 91porn在线| 紧缚捆绑精品一区二区| 久久美女福利视频| 激情欧美丁香| 青青草原国产免费| 少妇精品久久久一区二区三区| yy111111少妇影院日韩夜片| 欧美天堂在线| 国产不卡av在线| 538视频在线| 九色成人免费视频| 蜜桃视频网站在线| 中文亚洲视频在线| 九色在线视频蝌蚪| 亚洲福利影片在线| 精品国产九九九| 欧美精品丝袜久久久中文字幕| 在线观看日本网站| 欧美日韩国产精品专区| 妺妺窝人体色www在线下载| 国产精品成人网| 亚洲ⅴ国产v天堂a无码二区| 久久亚洲捆绑美女| 噜噜噜在线视频| 99天天综合性| 亚洲图片综合网| 成人av电影免费在线播放| 无码人妻aⅴ一区二区三区玉蒲团| 国产一区二区成人久久免费影院 | 国产色婷婷亚洲99精品小说| 久久久久久久久免费看无码 | 欧美xxxx黑人又粗又长| 日韩最新在线视频| 成人动漫在线播放| 国产亚洲欧洲高清| 大胆av不用播放器在线播放| 亚洲欧洲av一区二区| 伦理片一区二区三区| 亚洲欧美日韩高清| 精品成人一区二区三区免费视频| 亚洲精品理论电影| 亚洲色大成网站www| 日韩精品在线观看一区| 三区在线观看| 国产亚洲欧美另类中文| www.成人.com| 中文字幕在线精品| 国产91在线视频蝌蚪| 欧美精品在线看| 变态调教一区二区三区| 97精品在线视频| 欧洲av不卡| 国产精品吴梦梦| 精品视频在线观看免费观看| 97操在线视频| 青青久久av| 日韩成人av电影在线| 91日韩在线| www.一区二区.com| 一本综合久久| 在线免费视频一区| 国产老妇另类xxxxx| 波多野结衣办公室双飞| 久久色成人在线| a一级免费视频| 亚洲狠狠爱一区二区三区| 久久久久亚洲av成人毛片韩| 欧美视频在线观看一区| 国产乱色精品成人免费视频| 精品久久久久久久人人人人传媒| 婷婷av一区二区三区| 一区二区三区天堂av| 性欧美video高清bbw| 欧美中文在线视频| 玖玖精品在线| 国产丝袜不卡| 日本精品黄色| 拔插拔插海外华人免费| 日韩和欧美一区二区三区| 亚洲一区二区偷拍| a在线欧美一区| 亚洲熟女少妇一区二区| 亚洲国产精品人人做人人爽| 亚洲精品国产精品乱码视色| 日韩精品一区二区三区老鸭窝| 青青操在线视频| 欧美成人免费小视频| 亚州一区二区三区| 成人av电影免费| 欧美日韩在线观看视频小说| 久久av高潮av| 久久成人免费网| 中文字幕狠狠干| 尤物视频一区二区| 波多野结衣不卡| 亚洲精品在线三区| 午夜视频在线观看免费视频| 中文字幕一区二区精品区| 国产精品久久久久77777| 欧洲精品99毛片免费高清观看| 欧美日韩国产免费一区二区三区| 欧美一区二区三区久久精品| 色七七在线观看| www.日韩大片| 免费一级片在线观看| 欧美性一区二区| 深夜影院在线观看| 欧美激情手机在线视频 | 国产精品av一区| 首页国产精品| 老熟妇仑乱视频一区二区| 成人激情黄色小说| 婷婷激情四射网| 欧美三级电影网| 青草久久伊人| 性色av一区二区三区免费| 欧美9999| 三级在线免费观看| 老司机免费视频一区二区| 国产熟妇久久777777| 欧美日韩午夜剧场| 亚洲男人天堂久久| 欧美成人午夜激情在线| 激情亚洲小说| 亚洲成人蜜桃| 青椒成人免费视频| a天堂中文字幕| 日韩欧美一区视频| 亚洲日本香蕉视频| 97成人精品区在线播放| 成人线上播放| 加勒比成人在线| fc2成人免费人成在线观看播放| 欧美日韩免费一区二区| 欧美二区三区91| 麻豆影院在线观看| 成人xxxx视频| 亚洲有吗中文字幕| 免费观看黄网站| 亚洲伊人色欲综合网| 亚洲AV无码一区二区三区少妇| 久久91超碰青草是什么| 欧美一区在线观看视频| 老司机激情视频| 成人av电影在线观看| 国产成人无码一区二区三区在线| 亚洲精美色品网站| 中文av在线全新| 日韩精品一区二区三区丰满| 日韩av中文在线观看| 91l九色lporny| 欧美剧情电影在线观看完整版免费励志电影 | 国产精品一级二级三级| 国产在线视频你懂的| 日韩av在线免费播放| 成人国产二区| 亚洲国产欧美一区二区三区不卡| 久久99国产精品久久99| 九九热最新地址| 亚洲国产精品久久久久秋霞蜜臀 | 三级黄色片在线观看| 日韩三级av在线播放| av影院在线免费观看| 欧美另类一区| 久久er99精品| 国产无遮挡aaa片爽爽| 亚洲男人第一网站| 久久精品 人人爱| 久久亚洲国产成人精品无码区 | 天天摸日日摸狠狠添| 欧美一区二区三区男人的天堂 | 国产精品亚发布| 国产精品sm| 91久久免费视频| 欧美丰满高潮xxxx喷水动漫| 91豆花视频在线播放| 亚洲国产欧美日韩| 国产不卡视频一区二区三区| 伊人手机在线视频| xvideos亚洲| 久久精品国产亚洲5555| 日本免费观看网站| 亚洲最大成人网4388xx| 国产精品一区在线看| 97人人模人人爽人人喊38tv| 久久在线91| 久久久久99精品成人片毛片| 亚洲天堂av电影| 亚洲三级av| 国产一二三四在线视频| 亚洲国产毛片aaaaa无费看 | 狠狠综合久久av一区二区| 国产精品爽黄69天堂a|