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

拜托,別在 Agent 中依賴 Fastjson 了

開源
本來我查了下 maven-shade-plugin 似乎是可以在 agent 打包時把\META-INF\services\這個目錄排除掉的,這樣的話上面的問題也能解決掉,但是連續兩次踩了這個坑還是讓我靜下來好好思考了一下。

一、背景

最近因為增加了一個在 agent 中上報異常的功能,agent 為了在 http 請求時方便把對象轉換為 json 格式,增加了一個 fastjson 的依賴,結果搞出來各種問題。

環境:

  • JDK 1.8
  • SpringBoot 2.0.0.RELEASE
  • skywalking agent 8.14.0

二、初現問題

2.1 初步定位

有同事反饋應用在本地能啟動,但是到了測試環境(帶 agent 啟動)就起不來,報錯如下:

圖片圖片

首先還是要確認下是不是應用的依賴沖突問題,GenericHttpMessageConverter這個類是在 spring-web 這個包下面的, 因為本地打包環境和測試環境有可能不一致,需要確認最終部署到測試環境的包里是否包含了 spring-web 包。經確認包里有 spring-web,排除這個可能。

然后懷疑是 agent 和應用的依賴沖突,臨時讓這個應用的 agent 下線后重新部署,發現能正常啟動,基本確認是 agent 帶來的問題。

2.2 進一步排查

為了方便定位問題,我把發現問題時應用部署的包下載到本地,并在本地掛載 agent 啟動,問題重現,報錯和測試環境一致。至此我就可以在本地 debug 了。

順便說一下,我一開始用 idea 啟動應用(掛載 agent)是沒問題的,至于為什么沒問題下面會說到。

本地我在java.net.URLClassLoader#findClass方法的入口處打了一個條件斷點(類名為GenericHttpMessageConverter的才會進來),啟動應用后一會兒進入斷點。

idea 這個工具就是好用,從 debug 界面一下子就能看出來,這個 findClass 是調用了 3 次,并且能看到每一次 findClass 是加載的哪個類:

圖片圖片

從上面的圖的最后一行也能看出來,這個類加載最開始的觸發是在內部的一個二方庫的類WebAutoConfig中觸發的。

這 3 次 findClass 的順序可以看出, 類的加載順序為:

BootMessageConverter (二方包)

-> FastJsonHttpMessageConverter (fastjson)

-> GenericHttpMessageConverter (spring-web)

再來看看WebAutoConfig觸發類加載的那段代碼:

@Configuration
public class WebAutoConfig implements WebMvcConfigurer {
  
  @Bean
    @ConditionalOnMissingBean
    public HttpMessageConverters httpMessageConverter() {
        BootMessageConverter converter = new BootMessageConverter(); //這一行觸發了類加載
    ...
    }
}

public class BootMessageConverter extends FastJsonHttpMessageConverter {
 ...
}

public class FastJsonHttpMessageConverter extends AbstractHttpMessageConverter<Object>
        implements GenericHttpMessageConverter<Object> {
 ...        
}

從上面的代碼能看出最開始是因為BootMessageConverter的實例化進行了類加載, 而BootMessageConverter因為繼承了FastJsonHttpMessageConverter, 又接著觸發了FastJsonHttpMessageConverter的類加載, 然后FastJsonHttpMessageConverter因為實現了GenericHttpMessageConverter接口, 又進一步觸發了GenericHttpMessageConverter的類加載, 這樣來看源碼和上面 debug 得出的結論是一致的。

分析到這一步,如果你對類加載機制以及 agent 的運行方式非常熟悉的話,基本已經能得出“為什么會報GenericHttpMessageConverter類找不到的錯誤”結論了。

那么接下來,我會基于類加載的機制來詳細分析一下,為什么會找不到GenericHttpMessageConverter

三、類加載機制

3.1 雙親委派機制

圖片圖片

上一層類加載器是下一層類加載器的父加載器,除了 Bootstrap ClassLoader 之外,所有的加載器都是有父加載器的。

所謂的雙親委派機制,指的就是:當一個類加載器收到了類加載的請求的時候,他不會直接去加載指定的類,而是把這個請求委托給自己的父加載器去加載。只有父加載器無法加載這個類的時候,才會由當前這個加載器來負責類的加載。

開個玩笑:這樣說來,雙親委派這種說法似乎并不準確,因為有父無母,準確來說應該是“單親委派”...

3.1.1 類中依賴的其他類是怎么加載的

----------------接下來是重點----------------

我們定義的類一般還會依賴其他類,因此在被類加載器加載時,類加載機制中除了雙親委派機制之外,還有一個重要的機制是:

假設類 A 依賴類 B,那么哪個 ClassLoader 找到了類 A,這個 ClassLoader 也會嘗試去加載類 B(當然類 B 的加載過程也遵循雙親委派)。

3.2 springboot 的類加載機制

springboot 項目打包之后的 jar 目錄結構如下:

├─BOOT-INF
│  ├─classes
│  │  ├─應用代碼
│  └─lib
│     ├─應用依賴的jar包
├─META-INF
│  ├─MANIFEST.MF
└─org
    └─springframework
        └─boot
            └─loader
                │  JarLauncher.class
                │  LaunchedURLClassLoader.class
                │  Launcher.class
                │  ...

其中/META-INF/MANIFEST.MF 是 jar 包運行的關鍵, 來看一下里面的內容:

...

Main-Class: org.springframework.boot.loader.JarLauncher

Start-Class: com.xxxxxx.DemoApplication

Spring-Boot-Classes: BOOT-INF/classes/

Spring-Boot-Lib: BOOT-INF/lib/

...

首先 jar 包運行都有一個入口類定義了 main 方法,可以看到 springboot 項目打包出來的 jar 定義的入口運行類并不是應用代碼中的XxxApplication,而是 springboot 中的一個類JarLauncher,那么應用代碼中的XxxApplication是怎么運行的呢?

當你運行 java -jar 命令的時候,JarLauncher會加載 /BOOT-INF/classes 下的類和 /BOOT-INF/lib 下的 jar 包。最后調用 MANIFEST.MF 文件的 Start-Class 屬性指定的類的 main 方法來完成應用程序的啟動。

問題是 /BOOT-INF/ 并不是標準的 classpath 路徑,系統內置的 ClassLoader 是加載不到這些目錄的類的,那么這些類是誰來加載的呢?答案就是 springboot 自定義的類加載器:LaunchedURLClassLoader

圖片圖片

也就是說應用代碼中的類以及應用依賴的 jar 都是LaunchedURLClassLoader負責加載的。

3.3 fastjson 的類到底是怎么找到的

再說回來在第 2.2 節中說到的類加載順序:

BootMessageConverter (二方包)

-> FastJsonHttpMessageConverter (fastjson)

-> GenericHttpMessageConverter (spring-web)

這里我們重點來分析一下中間那個FastJsonHttpMessageConverter到底是怎么被加載的。

已知應用依賴了 fastjson 和 spring-web,agent 也依賴了 fastjson 但不依賴 spring-web。

從 Oracle 官方的文檔看到,Java 8 的 agent 的 jar 包里的類會添加到 classpath 中,因此會用AppClassLoader來加載。

圖片圖片

而二方包的BootMessageConverter是應用依賴的 jar, 放在/BOOT-INF/lib 下, 因此是被LaunchedURLClassLoader加載的。整體類加載流程如下圖:

圖片圖片

上圖說明:

當BootMessageConverter被LaunchedURLClassLoader加載時, 發現依賴了FastJsonHttpMessageConverter, 因此LaunchedURLClassLoader會繼續嘗試去加載FastJsonHttpMessageConverter。由于類加載的雙親委派機制,LaunchedURLClassLoader會委派它的父加載器AppClassLoader來嘗試加載,當然AppClassLoader會繼續往上找父加載器,一直到Bootstrap ClassLoader。

很顯然,Bootstrap ClassLoader和ExtClassLoader都無法找到FastJsonHttpMessageConverter,但是AppClassLoader可以找到(因為 agent 包中存在 fastjson 的類)。然后,這一步是關鍵,AppClassLoader找到了FastJsonHttpMessageConverter之后發現它依賴了GenericHttpMessageConverter,因此由找到了FastJsonHttpMessageConverter的AppClassLoader繼續嘗試加載GenericHttpMessageConverter,但是GenericHttpMessageConverter只有應用依賴的 spring-web.jar 中才有,而這個 jar 在/BOOT-INF/lib 下,只能被LaunchedURLClassLoader加載。雙親委派機制只能由子加載器往父加載器委托而反過來是不行的,而GenericHttpMessageConverter沒辦法被AppClassLoader以及它的父加載器加載到,因此AppClassLoader拋出了找不到GenericHttpMessageConverter的錯誤。

這里的關鍵就在于LaunchedURLClassLoader本身是能找到 fastjson 類的(在/BOOT-INF/lib), 但是因為雙親委派機制, 在加載 fastjson 類的時候, 被AppClassLoader截胡了,以至于喪失了后面依賴的類加載主動權。

說到這里,就可以回答之前的那個問題了:為什么用 idea 啟動應用(掛載 agent)是沒問題的?因為 idea 是直接運行應用的 XxxApplication 類的 main 方法,不是通過 springboot 的JarLauncher啟動的,而在運行時所有的依賴都是通過指定 classpath 來做的,因此 idea 運行過程中,所有的類都能通過AppClassLoader加載到,也就不存在上面這種沖突問題了。

四、解決方案一:maven-shade-plugin

知道問題的根因了,那么思路就是怎么樣可以讓 fastjson 類被LaunchedURLClassLoader找到而不要被AppClassLoader找到。這里的思路是把 agent 中依賴的 fastjson 的 package 給重命名一下。

maven-shade-plugin在 maven 官方網站中提供的一個插件,官方文檔中定義其功能如下:

This plugin provides the capability to package the artifact in an uber-jar, including its dependencies and to shade - i.e. rename - the packages of some of the dependencies.

簡單來說就是將依賴的包在 package 階段一起打入 jar 包中,以及對依賴的 jar 包進行重命名從而達到隔離的作用。接下來就把這個 maven 插件引入 agent 中。

maven 配置:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>3.2.1</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <shadedArtifactAttached>false</shadedArtifactAttached>
                <createDependencyReducedPom>true</createDependencyReducedPom>
                <createSourcesJar>true</createSourcesJar>
                <shadeSourcesContent>true</shadeSourcesContent>
                <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                        <manifestEntries>
                            <Premain-Class>xxxxxx.AgentStarter</Premain-Class>
                            <Can-Redefine-Classes>true</Can-Redefine-Classes>
                            <Can-Retransform-Classes>true</Can-Retransform-Classes>
                        </manifestEntries>
                    </transformer>
                </transformers>
                <!-- 這段是package重命名的關鍵配置 -->
                <relocations>
                    <relocation>
                        <pattern>com.alibaba.fastjson</pattern>
                        <shadedPattern>shade.com.alibaba.fastjson</shadedPattern>
                    </relocation>
                </relocations>
            </configuration>
        </execution>
    </executions>
</plugin>

package 之后的效果:

圖片圖片

可以看到在 agent 包中,fastjson 類的 package 都已經加上了一個前綴shade.,這樣的話,應用中加載正常的 fastjson 類的時候,肯定不會找到 agent 里面來了,以此避免了類加載被AppClassLoader截胡的情況。

用重新 package 的 agent 包啟動之前應用, 應用正常啟動, 至此問題解決。

五、再現問題

本以為問題已經解決,沒想到幾天后另一個應用又報了類找不到的錯誤:

圖片圖片

有了上次的經驗, 這次還算順利, 排查過程跟上次的差不多。

最后發現是應用依賴的 jersey 這個三方庫,而 jersey 通過 SPI 的方式會去找所有 classpath 中\META-INF\services\目錄下的javax.ws.rs.ext.MessageBodyReader這個文件,由于 agent 依賴了 fastjson,而 fastjson 也實現了這個 SPI 的擴展,結果 jersey 就找到了 agent 包的\META-INF\services\目錄下的javax.ws.rs.ext.MessageBodyReader文件,而javax.ws.rs.ext.MessageBodyReader文件中的內容如下:

圖片圖片

可以看到 maven-shade-plugin 把這里的類 package 也改掉了。然后 jersey 讀取到這個文件后,根據類名去加載了shade.com.alibaba.fastjson.support.jaxrs.FastJsonProvider這個類,結果肯定是找到了 agent 包里的這個類,而這個類依賴的MessageBodyReader類是在 jsr311-api.jar 里的, 這個 jar 包只在應用中依賴, agent 并不依賴這個 jar 包, 因此就拋出了找不到類的錯誤。

依賴沖突真是讓人防不勝防~

六、決定:干掉 fastjson

本來我查了下 maven-shade-plugin 似乎是可以在 agent 打包時把\META-INF\services\這個目錄排除掉的,這樣的話上面的問題也能解決掉,但是連續兩次踩了這個坑還是讓我靜下來好好思考了一下。

這兩次的依賴沖突從根本上來看,都是因為 fastjson 做的太重,第一次是因為 fastjson 依賴了 spring,第二次是因為 fastjson 實現了 jsr311-api,而在 agent 中去依賴 fastjson 并沒有那么多的需求,只是為了做一個純粹的轉換工作:Java 對象和 Json 串之間的互相轉換。所以找一個純粹的輕量級的 Json 轉換庫是我的本質需求。否則 fastjson 下次可能又遇到其他的依賴沖突問題,我還得改。

如何考量是否輕量級呢?我主要從兩方面著手:

  1. 看這個三方庫的 pom.xml 中有沒有依賴其他三方庫
  2. 看這個三方庫的\META-INF\services\目錄有沒有多余的 SPI 實現

最終我選擇了 Google 的 gson 作為 agent 依賴的 Json 轉換庫。

責任編輯:武曉燕 來源: 捉蟲大師
相關推薦

2018-09-28 05:25:53

TopK算法代碼

2020-04-22 11:19:07

貪心算法動態規劃

2018-10-28 22:37:00

計數排序排序面試

2018-11-01 13:49:23

桶排序排序面試

2021-01-22 10:09:23

簡歷求職者面試

2020-03-30 17:20:54

B+樹SQL索引

2019-03-12 14:48:29

路由器XBOXPS4

2025-02-10 08:05:03

2020-09-22 09:05:45

MySQLUTF-8utf8mb4

2025-06-18 02:01:00

Agent產品模型

2024-07-02 11:05:03

依賴倒置系統

2021-01-20 07:28:02

nullcollections對象

2023-11-02 08:43:08

protocgo兼容

2020-09-21 07:00:00

語音識別AI人工智能

2023-03-26 09:17:42

CRUD項目線程池

2019-06-27 17:18:02

Java日志編程語言

2022-03-14 10:14:43

底層系統Nacos

2021-10-09 12:53:14

惡意軟件黑客網絡攻擊

2025-07-22 11:56:26

2024-04-08 10:12:20

GPT4AgentAI
點贊
收藏

51CTO技術棧公眾號

亚洲人成伊人成综合图片| 无码精品在线观看| 国产精品实拍| 国产精品久久久久9999高清| 国产婷婷色综合av蜜臀av| 成人免费看片'免费看| 深夜福利在线视频| 99热精品在线| 中文字幕9999| 国产中文字幕在线免费观看| 国产www.大片在线| 亚洲经典自拍| 在线成人激情黄色| 在线中文字日产幕| 一区二区视频免费完整版观看| 日韩不卡一二三区| 亚洲人成77777在线观看网| 亚洲精品mv在线观看| 日本视频在线| 香蕉久久久久久久av网站| 亚洲第一精品福利| 亚洲中文字幕无码不卡电影| 日本中文字幕一区二区有码在线 | 亚洲精品国产精品国自| 北岛玲精品视频在线观看| 1024成人网| 亚洲一区二区三区四区视频| 中文字幕有码在线播放| av有声小说一区二区三区| 亚洲综合激情网| 国产私拍一区| 亚洲大尺度在线观看| 国产精品av一区二区| 亚洲黄色在线看| 日韩精品一区在线视频| 天堂中文在线8| 韩国成人福利片在线播放| 欧美一级成年大片在线观看| 中文乱码人妻一区二区三区视频| av免费在线视| 亚洲女同ⅹxx女同tv| 国产精品视频500部| 97精品人妻一区二区三区| 啪啪激情综合网| 制服丝袜亚洲精品中文字幕| 国产欧美日韩网站| 亚洲精品天堂| 亚洲另类色综合网站| 国外成人免费视频| 狠狠躁夜夜躁av无码中文幕| 久久国产精品久久w女人spa| 亚洲精品99久久久久中文字幕| 免费看又黄又无码的网站| 国产色a在线| 国产精品91一区二区| 91精品国产99| 国产在线观看免费视频软件| 欧美午夜精品一区二区三区电影| 欧美日韩视频在线一区二区| 亚洲免费av一区二区三区| 欧美精品日日操| 亚洲黄色av一区| 樱空桃在线播放| 国产在线观看免费| 国产日韩欧美精品一区| 日本免费一区二区三区| 91福利在线观看视频| 免费成人av在线| 国产精品最新在线观看| 国产又黄又爽视频| 国产电影精品久久禁18| 国产成人福利网站| 中文字幕人妻一区二| 91精品蜜臀一区二区三区在线| 欧美日韩视频在线第一区| 中文字幕国产传媒| 亚洲欧洲一二区| 日韩欧美亚洲一区二区| 人妻激情偷乱频一区二区三区| 久久亚洲国产精品尤物| 欧美日韩中文在线| 男人添女人下部视频免费| xxx在线免费观看| 色综合一个色综合亚洲| 精品无码国模私拍视频| 在线观看v片| 亚洲国产综合在线| 2021国产视频| 91在线免费看| 国产三级精品视频| 麻豆蜜桃91| 97在线观看免费观看高清 | 69av亚洲| 亚洲日本在线看| 成 年 人 黄 色 大 片大 全| 国产盗摄在线观看| 亚洲婷婷在线视频| 人人妻人人澡人人爽欧美一区双 | 成人免费在线观看视频网站| 只有精品亚洲| 亚洲精品99999| 三级电影在线看| 美女主播精品视频一二三四| 中文字幕欧美精品日韩中文字幕| 性欧美13一14内谢| 中文字幕亚洲综合久久五月天色无吗''| 亚洲一区二区三区四区不卡| 成人免费在线网| а√天堂资源官网在线资源| 亚洲一区二区黄色| 日本国产在线播放| 一区二区乱码| 欧美午夜宅男影院| 国产人妻黑人一区二区三区| 色小子综合网| 日本精品久久久久久久| 亚洲黄色一区二区| 亚洲黄网站黄| 欧美性视频精品| 无码人妻精品一区二区| 另类小说综合欧美亚洲| 精品伊人久久大线蕉色首页| 最近中文字幕免费mv2018在线| www.一区二区| 国产日韩欧美成人| 国产精品久久久国产盗摄| 99久久国产综合精品女不卡| 黑人巨大国产9丨视频| 三上悠亚激情av一区二区三区| 欧洲精品视频在线观看| 日韩www视频| 国产精品九九| 99热在线播放| 天天色综合av| 亚洲午夜一区二区| 日本女人黄色片| 视频一区日韩| 日韩大陆欧美高清视频区| 波多野结衣久久久久| 亚洲午夜精品久久久久久app| 久久久精品国产一区二区| 国产女人18水真多毛片18精品 | 老司机午夜免费福利视频| 992tv国产精品成人影院| 欧美一区二区三区公司| av2014天堂网| 尤物在线精品| 欧美亚洲国产精品| 亚洲一区二区三区高清视频| 国产偷国产偷亚洲高清人白洁| 少妇熟女一区二区| 外国成人毛片| 久久福利视频导航| 欧美日韩一级黄色片| 成人avav在线| 日本韩国欧美在线观看| 三级精品视频| 美女少妇精品视频| a级片在线播放| 亚洲一区二区三区精品在线| 国产aaaaa毛片| 国产精品15p| 国外成人性视频| 亚洲av无码乱码国产麻豆| 国产欧美日韩视频在线观看| 国产aaaaa毛片| 午夜欧洲一区| 国产国语刺激对白av不卡| yourporn在线观看视频| 调教+趴+乳夹+国产+精品| 李丽珍裸体午夜理伦片| 综合av在线| 国产精品久久国产三级国电话系列| 人妻丰满熟妇av无码区hd| 亚洲综合丁香婷婷六月香| 成年女人免费视频| 欧美在线看片| 国产精品一区二区三区免费观看 | 久久久噜噜噜久久中文字幕色伊伊| 成人精品aaaa网站| a视频在线免费看| 欧美性生交大片免费| 午夜理伦三级做爰电影| 麻豆精品视频在线观看免费| 久久天天狠狠| 国产精品一区二区三区视频网站| 一本久久a久久免费精品不卡| 欧美专区第二页| 欧美电影《睫毛膏》| 久久免费视频在线观看| 久久av少妇| 欧美性黄网官网| 精品人妻一区二区三区香蕉| 蜜臀va亚洲va欧美va天堂| 国产aaa免费视频| 精品理论电影在线| 日韩在线精品视频| 精品人妻无码一区二区色欲产成人| 国产精品亲子伦对白| 波多野结衣电影免费观看| 噜噜噜久久亚洲精品国产品小说| 国产午夜精品一区| 国产v日韩v欧美v| 丝袜情趣国产精品| 亚洲免费视频网| 亚洲国产精品久久不卡毛片| 亚洲成a人无码| 喷白浆一区二区| 鲁鲁狠狠狠7777一区二区| 九九久久国产| 欧美亚洲另类制服自拍| gogo在线高清视频| 中文字幕亚洲一区| 天天色综合av| 日韩免费性生活视频播放| 欧美黑人猛猛猛| 国产欧美日本一区视频| av亚洲天堂网| 三级在线观看一区二区| a级黄色小视频| 久久久9色精品国产一区二区三区| 亚洲一区二区三区视频播放| 亚洲精品国产精品国产| 欧美风情在线观看| 久cao在线| 色老头一区二区三区| 精品人妻一区二区三区含羞草| 亚洲一区二区av电影| 亚洲色偷偷综合亚洲av伊人| 国产免费观看久久| a级大片在线观看| 成+人+亚洲+综合天堂| 精品人妻一区二区三区免费| 亚洲啪啪91| 激情五月婷婷六月| 不卡一区综合视频| 欧美日韩一区二区三区在线视频| 日本a人精品| 国产精品热视频| 国产丝袜精品丝袜| 欧美日韩国产成人在线| 黄色网页在线播放| 久久精品视频亚洲| 好了av在线| 欧美插天视频在线播放| 日本福利在线观看| 欧美一区二区三区白人| 国产精品久久久久久久久久久久久久久久| 日本一区二区在线不卡| 小早川怜子久久精品中文字幕| 欧美一级淫片| 日本精品免费| 欧美大胆a级| 91视频免费在线| a一区二区三区亚洲| 亚洲一区二区三区成人在线视频精品| 伊人久久视频| 久久亚洲精品小早川怜子66| 午夜伦理在线| 欧美成人中文字幕在线| 都市激情一区| 亚洲国产精品悠悠久久琪琪| 91成人一区二区三区| 欧美一区二区国产| 国产成人自拍一区| 91精品国产综合久久精品图片| 国产又色又爽又黄的| 亚洲欧美日韩在线| 久草视频手机在线观看| 国产精品嫩草影院av蜜臀| 亚洲人做受高潮| 夜夜夜精品看看| 日韩黄色在线播放| 亚洲一区二区三区四区五区中文| 成人性生活免费看| 久久毛片高清国产| 国产精品无码一区二区三| 99精品视频一区二区| 日韩精品电影一区二区| 91亚洲精华国产精华精华液| 伊人成人免费视频| 国产一区在线不卡| 污污视频网站在线| 麻豆精品久久久| 男人操女人下面视频| 韩国女主播成人在线观看| 亚洲黄色小说在线观看| 91麻豆国产自产在线观看| 福利视频第一页| hitomi一区二区三区精品| 亚洲av综合一区二区| 91视频免费播放| 久久久久麻豆v国产精华液好用吗 在线观看国产免费视频 | 国产欧美一区二区三区在线看蜜臂| 亚洲精品va在线观看| 国产农村妇女aaaaa视频| 欧美久久一二三四区| 亚洲无码精品国产| 欧美日韩一区三区| 六月婷婷综合网| 在线日韩欧美视频| a√中文在线观看| 91国内在线视频| 日韩毛片免费视频一级特黄| 国产日韩在线一区| 自拍偷拍亚洲| 亚洲自拍偷拍区| 国产剧情在线观看一区| av一区二区三区免费观看| 国内综合精品午夜久久资源| 无码 制服 丝袜 国产 另类| 免费观看30秒视频久久| 久久久久成人精品无码中文字幕| 91免费视频观看| 免费黄色片网站| 亚洲国产精品av| 欧美成人777| 日本久久一区二区| 色噜噜在线播放| 欧美日韩高清区| 精品国产一区二区三区2021| 日韩av一区二区三区在线| 九九综合久久| 日韩精品成人一区二区在线观看| blacked蜜桃精品一区| xxxx18hd亚洲hd捆绑| 国产精品一区二区x88av| 欧亚乱熟女一区二区在线| 久久―日本道色综合久久| 影音先锋男人资源在线观看| 一区二区三区在线不卡| 国产精品国产三级国产专区52| 欧美性高跟鞋xxxxhd| 天天射,天天干| 久久久亚洲国产| 1204国产成人精品视频| 国产日韩第一页| 亚洲欧美卡通另类91av| 国产精品日日摸夜夜爽| 亚洲欧美日韩国产综合在线| 一级特黄aaaaaa大片| 中文字幕亚洲在线| jizz久久久久久| 国产精品成人观看视频免费| 欧美一区在线看| 原创真实夫妻啪啪av| 亚洲欧美日韩一区二区 | 欧美影院午夜播放| 黄色网址在线播放| 亲爱的老师9免费观看全集电视剧| 午夜av不卡| 亚洲自拍小视频| 欧美日韩播放| www.日日操| av电影天堂一区二区在线观看| 天天操天天舔天天射| 亚洲国产另类精品专区| 亚洲免费不卡视频| 久久影视免费观看| 日韩精品99| 国产女人水真多18毛片18精品 | 亚洲无码精品一区二区三区| 亚洲视频在线观看免费| 自拍偷自拍亚洲精品被多人伦好爽| 国产精品女人久久久久久| 美女av一区| 国产成人手机视频| 91色porny蝌蚪| 中文字幕免费高清网站| 中文字幕在线成人| 美女写真久久影院| 亚洲蜜桃在线| 日韩精品91亚洲二区在线观看| 老司机午夜性大片| 国产人妖乱国产精品人妖| 日韩欧美三级视频| 亚洲国产精品yw在线观看| 欧美xxx黑人xxx水蜜桃| 国产一区免费在线观看| 极品裸体白嫩激情啪啪国产精品| 乱子伦视频在线看| 91香蕉视频污| 一本一道精品欧美中文字幕| 欧美激情视频一区二区三区不卡| yellow字幕网在线| 官网99热精品| 丝袜诱惑制服诱惑色一区在线观看| 在线观看亚洲免费视频| 色天使久久综合网天天| 国产二区三区在线| 欧美日韩亚洲在线| 精品一区精品二区高清| 女同久久另类69精品国产| 精品嫩草影院久久| 大桥未久在线播放| 国产伦精品一区二区三区四区免费 | 日韩 欧美 中文| 久久精品男人天堂| 啄木系列成人av电影| 一卡二卡三卡四卡五卡|