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

深入解析:Spring中Filter與Interceptor的區(qū)別及正確用法

開發(fā) 前端
Filter 用于Tomcat 等 Web 容器中的 Servlet 相關處理,而并非 Spring 原生的工具。這一發(fā)現(xiàn)有助于我們理解為什么 Spring 中的過濾器和攔截器具有相似的功能。

自從我們開始使用 Spring,我們經(jīng)常聽到過濾器(Filter)和攔截器(Interceptor)。然而,當真正需要使用它們時,可能會對它們的區(qū)別和相似點感到困惑。產(chǎn)生這種困惑的主要原因是它們的用途相似(例如,授權檢查、日志處理、數(shù)據(jù)壓縮/解壓等)。

使用過濾器可以實現(xiàn)的場景同樣可以用攔截器實現(xiàn),因此它們的邊界變得模糊不清。為了解釋它們的差異和相似之處,我們將深入探討兩者的起源和設計理念。

本文基于 SpringBoot 2.7.5 版本進行講解。

過濾器:外來引入的概念

基本概念

仔細研究源代碼,我們會發(fā)現(xiàn)過濾器的概念實際上是從 Servlet 引入的外來概念,它遵循 Servlet 規(guī)范。可以看一下 Filter 類的全限定名稱:

javax.servlet.Filter

可以看出,F(xiàn)ilter 用于Tomcat 等 Web 容器中的 Servlet 相關處理,而并非 Spring 原生的工具。這一發(fā)現(xiàn)有助于我們理解為什么 Spring 中的過濾器和攔截器具有相似的功能。

由于它們分別由不同的作者為各自的系統(tǒng)創(chuàng)建,因此出現(xiàn)了類似的思想和實現(xiàn)方法也是可以理解的。畢竟,英雄所見略同。

隨后,Spring 引入并兼容了 Tomcat 容器的處理邏輯,使得兩個相似的概念可以存在于同一應用上下文中(注意,Spring 并沒有將它們合并,而只是使其兼容),這也導致開發(fā)人員容易產(chǎn)生困惑。

為了更好地理解 Filter 的作用,讓我們引入官方的注釋進行說明:

過濾器是一個對象,它可以對對資源的請求(如 servlet 或靜態(tài)內(nèi)容)或資源的響應或兩者執(zhí)行過濾任務。

從這個定義中,我們可以提取兩條有用的信息:

  • 執(zhí)行時機:Filter 的執(zhí)行時機有兩個,在請求處理前和在響應返回前。
  • 執(zhí)行內(nèi)容:過濾器本質(zhì)上執(zhí)行的是過濾任務,而過濾條件基于對資源的請求或?qū)Y源的響應。

除了上述信息外,結合 Tomcat 中 Servlet 容器的結構設計,我們可以推導出 Filter 的執(zhí)行流程圖:

圖片圖片

在實際開發(fā)場景中,資源請求的預處理或資源響應的后處理可能并不限于單一類型的過濾任務。

因此,Tomcat 設計中使用了責任鏈模式來處理需要多種不同類型過濾器處理請求或響應的場景。

這一概念也體現(xiàn)在前面提到的流程圖中。需要注意的是,由于采用了線性數(shù)據(jù)結構(鏈結構),在實際的過濾器操作過程中存在固有的執(zhí)行順序。這意味著在實現(xiàn)自定義過濾器時,必須確保過濾器之間不存在依賴反轉。

當然,如果過濾器之間沒有依賴關系,那么執(zhí)行順序就不是問題。Tomcat 使用 org.apache.catalina.core.ApplicationFilterChain 來實現(xiàn)上述的責任鏈模式。可以通過以下代碼更好地理解這一概念:

publicfinalclassApplicationFilterChainimplementsFilterChain{

publicvoiddoFilter(ServletRequest request,ServletResponse response)
throwsIOException,ServletException{

if(Globals.IS_SECURITY_ENABLED){
finalServletRequest req = request;
finalServletResponse res = response;
try{
java.security.AccessController.doPrivileged(
(java.security.PrivilegedExceptionAction<Void>)()->{
// 實際執(zhí)行過濾操作
internalDoFilter(req,res);
returnnull;
}
);
}catch(PrivilegedActionException pe){
...
}
}else{
// 實際執(zhí)行過濾操作
internalDoFilter(request,response);
}
}


privatevoidinternalDoFilter(ServletRequest request,
ServletResponse response)
throwsIOException,ServletException{

// 如果存在下一個過濾器,則調(diào)用它
if(pos < n){
ApplicationFilterConfig filterConfig = filters[pos++];
try{
Filter filter = filterConfig.getFilter();
...
if(Globals.IS_SECURITY_ENABLED){
...
}else{
// 結合 Filter 類進行分析,實際上是執(zhí)行回調(diào)函數(shù),
// 該方法的第三個參數(shù)傳遞了當前的 applicationFilterChain 對象,結合上面的 pos 指針確定過濾鏈是否已完全執(zhí)行
                    filter.doFilter(request, response,this);
}
}catch(IOException|ServletException|RuntimeException e){
throw e;
}catch(Throwable e){
...
}
return;
}

// 執(zhí)行到鏈的末端——調(diào)用 servlet 實例
try{
...
// 實際執(zhí)行 servlet 服務,注意這僅是進入 servlet 實例,而未真正進入具體處理器
            servlet.service(request, response);
...
}catch(IOException|ServletException|RuntimeException e){
throw e;
}catch(Throwable e){
...
}finally{
...
}
}
}

從上述代碼可以看出,Tomcat 使用 pos 指針來記錄過濾器鏈中過濾器的執(zhí)行位置。只有在鏈中的所有過濾器都執(zhí)行完畢并通過后,request 和 response 對象才會提交給 servlet 實例進行相應的服務處理。

需要注意的是,此時尚未涉及具體的 handler,意味著過濾器的處理無法細化到具體處理器類的請求/響應,而只能較為模糊地處理整個 servlet 實例級別的請求/響應。

當然,從上述代碼中還可以看出一個問題,即似乎僅對資源請求進行過濾處理,而沒有對資源響應進行過濾處理。

實際上,資源響應的過濾處理隱藏在每個過濾器的 doFilter 方法中。當實現(xiàn)自定義過濾器時,需要遵循以下邏輯來處理資源響應:

@Override
publicvoiddoFilter(ServletRequest request,ServletResponse response,FilterChain chain)throwsIOException,ServletException{
// TODO 前置處理
// 調(diào)用 applicationFilterChain 對象的 doFilter 方法(這實際上是回調(diào)邏輯)。必須包含這一步,否則鏈式結構會在此處中斷。
    chain.doFilter(request, response);
// TODO 后置處理
}

結合 ApplicationFilterChain 中的 internalDoFilter 方法,可以發(fā)現(xiàn)隱含的入棧和出棧邏輯(本質(zhì)上是方法堆棧)。資源請求的前置處理實際上是一個入棧過程,當所有前置處理過濾器入棧完畢后,servlet.service(request, response) 開始執(zhí)行。

在 servlet 服務處理完成后,出棧過程開始,逐個按順序執(zhí)行后置處理邏輯,直至方法結束退出。

必須指出,這種邏輯對初學者來說不太友好。由于 Filter 只是一個接口,無法像抽象類那樣提供模板方法,初學者在沒有參考示例的情況下可能很難使用,若只是查看源碼可能會有類似疑問。

還要提醒大家,實現(xiàn)自定義過濾器時必須遵循上述模板,否則可能會導致鏈式流程被破壞或后置邏輯無法實現(xiàn)。

在 Spring 中的使用

雖然提到了 Spring,但這里實際討論的是 Spring Boot 中的使用方法。要在 Spring Boot 中實現(xiàn)自定義過濾器,只需添加注入邏輯將其放入 Spring 容器。Spring Boot 提供了兩種方式來完成此操作:

  • 在自定義過濾器上使用 @Component 注解;
  • 在自定義過濾器上使用 @WebFilter 注解,并在啟動類上使用 @ServletComponentScan 注解;

推薦使用第二種方法注入過濾器,因為 Spring 提供了 Tomcat 原生處理不具備的額外功能,即 URL 匹配功能。

結合 @WebFilter 注解中的 urlPattern 字段,Spring 能進一步細化過濾器處理的粒度,使開發(fā)者更靈活。此外,可通過 Spring 提供的 @Order 注解來自定義過濾器的注入順序。

攔截器:Spring 原生功能

基本概念

探討完過濾器后,我們將目光轉向攔截器。此時發(fā)現(xiàn),攔截器的概念源自 Spring,對應的接口類為 HandlerInterceptor(還有一個異步攔截器接口類,此處不展開,有興趣的同學可自行閱讀源碼)。

查看相應源碼后發(fā)現(xiàn),HandlerInterceptor 提供了三個與執(zhí)行時機相關的方法,而不同于 Filter 僅提供一個簡單的 doFilter 方法:

  • preHandle:在執(zhí)行相應處理程序之前執(zhí)行,進行前置處理;
  • postHandle:在請求處理完成后但在渲染 ModelAndView 對象之前執(zhí)行,進行與 ModelAndView 對象相關的后置處理;
  • afterCompletion:在渲染 ModelAndView 對象后且在返回響應前執(zhí)行,對結果進行后置處理。

與 Filter 類僅提供的 doFilter 方法相比,HandlerInterceptor 的方法定義更為精準和易用。無需閱讀源碼或參考示例,便可大致猜測如何實現(xiàn)自定義攔截器。

結合 org.springframework.web.servlet.DispatcherServlet#doDispatch 的源碼,可以繪制出以下流程圖(此處不貼出具體代碼,有興趣的同學可自行查看):

圖片圖片

可以看到,攔截器的執(zhí)行邏輯全部包含在 servlet 實例中。結合前述過濾器的執(zhí)行流程說明,不難發(fā)現(xiàn)過濾器就像夾心餅干的兩片餅干,將 servlet 和攔截器包在中間,攔截器的執(zhí)行時機在過濾器前置處理之后、后置處理之前。

此外,通過閱讀源碼還可發(fā)現(xiàn),Spring 在使用攔截器時同樣使用了責任鏈模式。在不同任務和邏輯需順序執(zhí)行的場景中,這種模式十分有用。

需要注意的是,由于 Spring 在設計攔截器時已明確定義了不同階段的方法,因此攔截器的實際執(zhí)行過程并未采用與過濾器相同的推棧和彈棧方式。

在 Spring 中的使用

要在 Spring Boot 中使用攔截器,除了實現(xiàn) HandlerInterceptor 接口外,還需要顯式地在 Spring 的 Web 配置中進行注冊,如下所示:

@Configuration
publicclassWebConfigimplementsWebMvcConfigurer{

@Override
publicvoidaddInterceptors(InterceptorRegistry registry){
        registry.addInterceptor(newDemoInterceptor()).addPathPatterns("/api/*").excludePathPatterns("/api/ok");
}
}

從上述代碼可以看到,Spring 也為自定義攔截器提供了與過濾器相同的路徑匹配功能。借助該功能,自定義攔截器可以更細致地處理請求和響應。這一點再次重疊了過濾器的功能,但這當然是 Spring 內(nèi)部提供的功能。

常見使用場景

確實,在文章開頭我們已介紹了一些兩者的功能。這里再簡單總結一下。

從以上分析可以看出,過濾器和攔截器的設計初衷是將請求的前置處理和響應的后置處理從業(yè)務代碼中分離出來,作為通用處理邏輯供開發(fā)者擴展實現(xiàn)。這一設計思想類似于 AOP。

在實際開發(fā)中,自定義過濾器或攔截器常用于實現(xiàn)以下操作:

  • 用戶登錄驗證;
  • 權限檢查;
  • 日志攔截;
  • 數(shù)據(jù)壓縮/解壓;
  • 加解密處理;

這里不展示各場景的編碼實現(xiàn),有興趣的同學可以自行搜索學習。

一點建議:雖然上述場景看似繁多,但其實本質(zhì)都是在處理請求參數(shù)或響應結果。理解這一點后,設計和實現(xiàn)這些場景就會相對容易。

總結

通過以上分析可見,過濾器和攔截器在Spring Boot中的核心區(qū)別在于執(zhí)行時機、應用場景及使用便捷性。過濾器圍繞請求的全流程運行,適合系統(tǒng)級通用邏輯處理(如數(shù)據(jù)壓縮、編碼設置),而攔截器位于控制器層面,更適合業(yè)務邏輯擴展(如權限校驗、日志記錄)。

設計上,過濾器通過“推入-彈出”機制延續(xù)過濾鏈,邏輯較為復雜;而攔截器提供明確的接口方法,執(zhí)行流程更為直觀。此外,二者均采用職責鏈模式,體現(xiàn)AOP思想,幫助實現(xiàn)請求的分層處理。

因此,開發(fā)中根據(jù)需求選擇工具即可:系統(tǒng)級處理優(yōu)先過濾器,業(yè)務級處理優(yōu)先攔截器。

責任編輯:武曉燕 來源: 路條編程
相關推薦

2010-08-23 10:57:14

CSSclassid

2024-05-16 12:24:53

2010-08-30 10:52:39

CSSclassid

2021-09-15 16:20:02

Spring BootFilterJava

2010-08-30 10:37:54

DIVSPAN

2024-03-07 13:30:44

Java對象true

2022-01-13 10:04:21

攔截器Interceptor過濾器

2025-07-02 07:05:00

多線程Java開發(fā)

2024-06-17 10:45:07

C++編程操作符

2024-04-30 08:38:31

C++

2024-03-11 15:32:50

C++開發(fā)

2024-12-27 08:09:04

2025-09-17 07:19:50

2024-10-10 14:43:54

LambdaSpring編程

2024-01-24 08:31:13

extends?接口規(guī)范

2010-09-25 15:30:10

虛擬化

2023-11-26 18:02:00

ReactDOM

2025-01-07 13:48:57

2010-07-12 12:32:35

UML用例圖

2024-04-09 08:57:25

SizeofC++字符串
點贊
收藏

51CTO技術棧公眾號

亚洲欧美日韩网| 亚洲欧美色图| 欧美性猛交xxxx久久久| 日本在线成人一区二区| 一区二区三区免费在线视频| 欧美日韩免费观看一区=区三区| 亚洲国产免费av| 中文字幕国内自拍| 污视频在线看网站| 久久久久久久久岛国免费| 国产欧美精品久久久| 亚洲一区二区91| 久久中文亚洲字幕| 日韩国产精品视频| 亚洲911精品成人18网站| 成人直播视频| 亚洲成a人片在线不卡一二三区 | 啄木系列成人av电影| 在线电影院国产精品| 91黄色小网站| 超级碰碰不卡在线视频| 中文字幕免费不卡在线| 国产在线一区二区三区欧美| 国产强伦人妻毛片| 日韩精品一级中文字幕精品视频免费观看 | 欧美伦理视频网站| 99久久激情视频| 天堂av最新在线| 久久婷婷一区二区三区| 国产精品一区二区三区四区五区 | 精品这里只有精品| 色老头在线观看| 综合自拍亚洲综合图不卡区| 日本一区二区三区四区高清视频| 婷婷av一区二区三区| 国产精品一二三四区| 国产精品专区一| 波多野结衣小视频| 男女精品网站| 欧美亚洲国产日韩2020| 国产精品日日夜夜| 韩日精品视频| 色综合久久悠悠| 亚洲精品卡一卡二| 99精品电影| 中文字幕久久亚洲| 手机毛片在线观看| 国产精选一区| 亚洲人成五月天| 日韩精品无码一区二区三区久久久| 国产成人av毛片| 日韩欧美国产一区二区在线播放| 天堂在线一区二区三区| 精品美女一区| 欧美日韩国产免费| 久久久久xxxx| 国产日韩在线观看视频 | 天天干免费视频| 丁香婷婷综合网| 国产一级特黄a大片99| 亚洲精品视频专区| 99久久精品一区| 精品伊人久久大线蕉色首页| 久久久久国产精品区片区无码| 久久影院理伦片| 久久久综合久久| 欧美久久久久| 久久久久久久香蕉网| 久久久国产精华液| 国产精品大片免费观看| 欧美激情精品久久久久久大尺度| 精品无码m3u8在线观看| 国产精品黄色| 欧美亚洲视频在线看网址| 国产精品老女人| 蘑菇福利视频一区播放| 国产精品com| 中文字幕资源网| 国产高清视频一区| 国产专区一区二区| 你懂的在线看| 国产精品传媒在线| 日韩不卡视频一区二区| 2020av在线| 色综合激情五月| 热久久久久久久久| 久久9999免费视频| 日韩av在线高清| x88av在线| 中文字幕日韩一区二区不卡| 亚州国产精品久久久| 精品乱码一区内射人妻无码| 国内精品伊人久久久久av一坑 | 中文字幕你懂的| 国产精品白丝jk黑袜喷水| 加勒比在线一区二区三区观看| 可以在线观看的av| 亚洲视频在线观看一区| 欧美久久久久久久久久久久久| 无人区在线高清完整免费版 一区二| 91麻豆精品国产无毒不卡在线观看| 好吊操视频这里只有精品| 夜色77av精品影院| 欧美成人三级视频网站| 亚洲天堂一区在线| 国产真实乱子伦精品视频| 国产在线精品二区| 国产黄网站在线观看| 欧美日韩一区二区免费视频| 免费成年人高清视频| 激情小说一区| 美女国内精品自产拍在线播放| 亚洲精品国产精品乱码| 国产综合色产在线精品| 日本精品一区二区三区视频| 色呦呦网站在线观看| 欧美性色xo影院| 丰满少妇一区二区三区专区| 成人羞羞视频在线看网址| 国内成人精品一区| 国产伦理一区二区| 日本一区二区视频在线| 岳毛多又紧做起爽| 日本一区二区三区播放| 色综合亚洲精品激情狠狠| 亚洲免费在线观看av| 国产精品123区| 制服诱惑一区| 国产综合av| 日韩成人小视频| 丝袜美腿小色网| 免费的成人av| 亚洲激情一区二区| 欧美日韩免费观看视频| 日韩成人在线免费观看| 日本在线小视频| 粉嫩嫩av羞羞动漫久久久 | 韩国成人av| av大片在线| 9191精品国产综合久久久久久| 91精品人妻一区二区| 亚洲精品1234| 国产免费高清一区| 99热99re6国产在线播放| 精品成人无码久久久久久| 99久久精品免费看国产| 99久久免费观看| 91精品丝袜国产高跟在线| 久久中文精品视频| 国产女人高潮毛片| 亚洲三级在线免费| 久久综合给合久久狠狠色| 五月婷婷综合激情网| 伊人久久亚洲热| 国产精品一 二 三| h片在线观看| 欧美tickling挠脚心丨vk| 免费在线观看黄色av| 国产乱码精品一区二区三区五月婷 | 成人羞羞视频在线看网址| 国产精品第三页| 国产日本在线| 欧美在线观看18| 91无套直看片红桃在线观看| 久久精品国产久精国产| 亚洲日本一区二区三区在线不卡| 四虎成人精品一区二区免费网站| 久久国产加勒比精品无码| 亚洲美女综合网| 精品日韩美女的视频高清| 亚洲av无码一区二区三区人| 蜜臀av一区二区在线观看| 青春草在线视频免费观看| 国产亚洲高清一区| 久久久久久香蕉网| 九色视频在线播放| 4438x亚洲最大成人网| 久久久久久久久久久久久久免费看 | 欧美在线一区二区| 国精产品久拍自产在线网站| 国产精品夜夜嗨| 欧美 日韩 亚洲 一区| 免费视频国产一区| 国产欧美在线看| 四虎影院观看视频在线观看| 亚洲国产精品久久久久秋霞蜜臀| 一区二区三区在线观看av| 国产欧美日本一区视频| 女王人厕视频2ⅴk| 久久精品国产清高在天天线| 一本一道久久久a久久久精品91| 久久伊人影院| 日本高清+成人网在线观看| 3d成人动漫在线| 精品999久久久| 天天综合久久综合| 夜夜嗨av一区二区三区中文字幕| 97人妻精品一区二区免费| 国产一区二区成人久久免费影院| 黄色成人在线看| 欧美黄色大片在线观看| 国产成人亚洲欧美| av成人免费| 韩剧1988免费观看全集| √新版天堂资源在线资源| 亚洲精品在线免费播放| 中文字幕资源网| 欧美视频免费在线观看| 国精品无码一区二区三区| 国产午夜精品一区二区三区嫩草| 亚洲午夜精品在线观看| 蜜臀av在线播放一区二区三区| 日韩精品在线中文字幕| 99精品全国免费观看视频软件| 农村寡妇一区二区三区| 亚洲视频一起| 91视频九色网站| 秋霞国产精品| 91精品国产乱码久久久久久蜜臀 | 98精品国产自产在线观看| 看黄网站在线| 亚洲深夜福利视频| 天天干天天爽天天操| 欧美日韩一区二区三区高清 | gogogogo高清视频在线| 国产亚洲精品久久久久动| 熟妇人妻一区二区三区四区 | 中国男女全黄大片| 久久99久久久欧美国产| 成年人在线看片| 一本久久知道综合久久| 国产专区在线视频| 伊人久久大香线| 亚洲视频导航| 欧美综合一区| 婷婷久久五月天| 蜜桃一区二区| 久久久久天天天天| 精品福利网址导航| 国产精品欧美久久| 一区二区三区四区视频免费观看| 成人精品aaaa网站| 国产原创一区| 国产又爽又黄的激情精品视频 | 亚洲a在线观看| 自拍偷拍亚洲图片| 91精品免费视频| 99视频有精品高清视频| 成人免费午夜电影| 国产精品国产三级在线观看| 国产综合久久久久| 国产精选久久| 92看片淫黄大片看国产片| 色综合视频一区二区三区44| 国产精品久久色| 欧美电影在线观看网站| 91精品久久久久久久久久入口| 国产成人精品一区二区三区免费| 国产精品久久久亚洲| 久久久国产精品网站| 国产精自产拍久久久久久| 亚洲视频自拍| 91传媒视频免费| julia中文字幕一区二区99在线| 国产精品久久7| 图片婷婷一区| 日本午夜精品一区二区三区| 欧洲毛片在线视频免费观看| 亚洲永久一区二区三区在线| 亚洲精品成人无限看| 香港三级日本三级a视频| 亚洲黄色高清| 久久美女福利视频| 免费av成人在线| 日本少妇激三级做爰在线| 国产成人午夜电影网| 污污免费在线观看| 久久一夜天堂av一区二区三区 | 亚洲不卡一区二区三区| 国产嫩bbwbbw高潮| 欧美日韩激情一区二区三区| 国产wwwxxx| 精品香蕉一区二区三区| 1769在线观看| 欧美国产亚洲精品久久久8v| 亚洲人成在线网站| 国产免费一区视频观看免费| 亚洲一区二区电影| 欧美乱偷一区二区三区在线| 日韩一区三区| 成人性免费视频| 美女脱光内衣内裤视频久久影院| 亚洲精品一二三四| 久久久综合网站| 国精品无码一区二区三区| 疯狂做受xxxx欧美肥白少妇| 国产乱码久久久| 精品中文字幕久久久久久| 秋霞a级毛片在线看| 97视频免费看| 日本黄色成人| 精品亚洲欧美日韩| 91成人看片| 国产精品免费成人| 丁香婷婷深情五月亚洲| 妖精视频在线观看免费| 欧美日韩视频免费播放| 99热这里只有精| 亚洲欧美日韩综合| 女人黄色免费在线观看| 国产欧美一区二区三区久久人妖| 日韩欧美影院| youjizz.com在线观看| 久久99深爱久久99精品| 亚洲AV无码片久久精品| 亚洲国产欧美一区二区三区丁香婷| 少妇一级淫片日本| 日韩精品视频免费| 污视频免费在线观看| 国产噜噜噜噜久久久久久久久| 久久综合另类图片小说| 超碰10000| 韩日欧美一区二区三区| 久久久久无码精品国产sm果冻| 亚洲成a人片综合在线| 999久久久久| 中文字幕精品av| 高清成人在线| 欧美激情视频一区二区三区| 亚洲精选久久| 韩国三级视频在线观看| 亚洲精品伦理在线| 在线观看中文字幕网站| 伊人久久久久久久久久久久久| 在线观看爽视频| 久久人人爽爽人人爽人人片av| 国产精品多人| 欧美xxxxx少妇| 亚洲综合激情网| 亚洲精品国偷拍自产在线观看蜜桃| 久久伊人91精品综合网站| 全球中文成人在线| 亚洲乱码一区二区三区| 日本中文字幕一区二区有限公司| 全黄一级裸体片| 色综合久久久久综合| 国产在线观看免费网站| 日韩免费观看视频| 欧美男gay| 免费大片在线观看| 国产日韩欧美在线一区| 亚洲精品中文字幕乱码三区91| 亚洲人成在线观看网站高清| 日韩欧美一区二区三区在线观看 | 亚洲最大av在线| 欧美精品一区二区三区久久久竹菊| 夜夜爽久久精品91| 亚洲精品ww久久久久久p站 | 亚洲免费伊人电影在线观看av| 日本不卡1234视频| 免费在线成人av| 日韩av一二三| 人与动物性xxxx| 日韩三级在线观看| 国产桃色电影在线播放| 精品乱子伦一区二区三区| 国产精品久久久久久久免费软件| 99久久国产精| 欧美性三三影院| 黄色av电影在线观看| 国产高清精品一区二区三区| 亚洲美女毛片| 四虎永久免费在线观看| 欧美日韩国产欧美日美国产精品| 欧美r级在线| 国产精品乱码一区二区三区| 国产精品资源| 亚洲a∨无码无在线观看| 91精品国产综合久久精品| 成人免费一区二区三区牛牛| 欧美日韩一区二区视频在线观看 | 国产一区欧美二区三区| 精品成人免费| 无码 人妻 在线 视频| 91精品蜜臀在线一区尤物| 97在线视频免费观看完整版| 日韩高清国产一区在线观看| 黄色资源网久久资源365| 日本学生初尝黑人巨免费视频| 一区二区三区动漫| 香蕉大人久久国产成人av| 116极品美女午夜一级| 亚洲婷婷综合久久一本伊一区 | 国产欧美日韩电影| 国产91对白刺激露脸在线观看| 国产精品成人一区二区三区夜夜夜| 国模无码一区二区三区| 国产精品香蕉av| 国产精品亚洲欧美| 一起操在线播放|