日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

全面解析Spring Security 內(nèi)置 Filter

瀏覽:160日期:2023-08-29 08:35:42

1. 前言

上一文我們使用 Spring Security 實(shí)現(xiàn)了各種登錄聚合的場(chǎng)面。其中我們是通過在 UsernamePasswordAuthenticationFilter 之前一個(gè)自定義的過濾器實(shí)現(xiàn)的。我怎么知道自定義過濾器要加在 UsernamePasswordAuthenticationFilter 之前。我在這個(gè)系列開篇說了Spring Security 權(quán)限控制的一個(gè)核心關(guān)鍵就是 過濾器鏈 ,這些過濾器如下圖進(jìn)行過濾傳遞,甚至比這個(gè)更復(fù)雜!這只是一個(gè)最小單元。

全面解析Spring Security 內(nèi)置 Filter

Spring Security 內(nèi)置了一些過濾器,他們各有各的本事。如果你掌握了這些過濾器,很多實(shí)際開發(fā)中的需求和問題都很容易解決。今天我們來見識(shí)一下這些內(nèi)置的過濾器。

2. 內(nèi)置過濾器初始化

在 Spring Security 初始化核心過濾器時(shí) HttpSecurity 會(huì)通過將 Spring Security 內(nèi)置的一些過濾器以 FilterComparator 提供的規(guī)則進(jìn)行比較按照比較結(jié)果進(jìn)行排序注冊(cè)。

2.1 排序規(guī)則

FilterComparator 維護(hù)了一個(gè)順序的注冊(cè)表 filterToOrder 。

FilterComparator() { Step order = new Step(INITIAL_ORDER, ORDER_STEP); put(ChannelProcessingFilter.class, order.next()); put(ConcurrentSessionFilter.class, order.next()); put(WebAsyncManagerIntegrationFilter.class, order.next()); put(SecurityContextPersistenceFilter.class, order.next()); put(HeaderWriterFilter.class, order.next()); put(CorsFilter.class, order.next()); put(CsrfFilter.class, order.next()); put(LogoutFilter.class, order.next()); filterToOrder.put( 'org.springframework.security.oauth2.client.web.OAuth2AuthorizationRequestRedirectFilter', order.next()); filterToOrder.put( 'org.springframework.security.saml2.provider.service.servlet.filter.Saml2WebSsoAuthenticationRequestFilter', order.next()); put(X509AuthenticationFilter.class, order.next()); put(AbstractPreAuthenticatedProcessingFilter.class, order.next()); filterToOrder.put('org.springframework.security.cas.web.CasAuthenticationFilter', order.next()); filterToOrder.put( 'org.springframework.security.oauth2.client.web.OAuth2LoginAuthenticationFilter', order.next()); filterToOrder.put( 'org.springframework.security.saml2.provider.service.servlet.filter.Saml2WebSsoAuthenticationFilter', order.next()); put(UsernamePasswordAuthenticationFilter.class, order.next()); put(ConcurrentSessionFilter.class, order.next()); filterToOrder.put( 'org.springframework.security.openid.OpenIDAuthenticationFilter', order.next()); put(DefaultLoginPageGeneratingFilter.class, order.next()); put(DefaultLogoutPageGeneratingFilter.class, order.next()); put(ConcurrentSessionFilter.class, order.next()); put(DigestAuthenticationFilter.class, order.next()); filterToOrder.put( 'org.springframework.security.oauth2.server.resource.web.BearerTokenAuthenticationFilter', order.next()); put(BasicAuthenticationFilter.class, order.next()); put(RequestCacheAwareFilter.class, order.next()); put(SecurityContextHolderAwareRequestFilter.class, order.next()); put(JaasApiIntegrationFilter.class, order.next()); put(RememberMeAuthenticationFilter.class, order.next()); put(AnonymousAuthenticationFilter.class, order.next()); filterToOrder.put( 'org.springframework.security.oauth2.client.web.OAuth2AuthorizationCodeGrantFilter', order.next()); put(SessionManagementFilter.class, order.next()); put(ExceptionTranslationFilter.class, order.next()); put(FilterSecurityInterceptor.class, order.next()); put(SwitchUserFilter.class, order.next()); }

這些就是所有內(nèi)置的過濾器。 他們是通過下面的方法獲取自己的序號(hào):

private Integer getOrder(Class<?> clazz) { while (clazz != null) { Integer result = filterToOrder.get(clazz.getName()); if (result != null) { return result; } clazz = clazz.getSuperclass(); } return null; }

通過過濾器的類全限定名從注冊(cè)表 filterToOrder 中獲取自己的序號(hào),如果沒有直接獲取到序號(hào)通過遞歸獲取父類在注冊(cè)表中的序號(hào)作為自己的序號(hào),序號(hào)越小優(yōu)先級(jí)越高。上面的過濾器并非全部會(huì)被初始化。有的需要額外引入一些功能包,有的看 HttpSecurity 的配置情況。 在上一篇文章中。我們禁用了 CSRF 功能,就意味著 CsrfFilter 不會(huì)被注冊(cè)。

3. 內(nèi)置過濾器講解

接下來我們就對(duì)這些內(nèi)置過濾器進(jìn)行一個(gè)系統(tǒng)的認(rèn)識(shí)。我們將按照默認(rèn)順序進(jìn)行講解。

3.1 ChannelProcessingFilter

ChannelProcessingFilter 通常是用來過濾哪些請(qǐng)求必須用 https 協(xié)議, 哪些請(qǐng)求必須用 http 協(xié)議, 哪些請(qǐng)求隨便用哪個(gè)協(xié)議都行。它主要有兩個(gè)屬性:

ChannelDecisionManager 用來判斷請(qǐng)求是否符合既定的協(xié)議規(guī)則。它維護(hù)了一個(gè) ChannelProcessor 列表 這些ChannelProcessor 是具體用來執(zhí)行 ANY_CHANNEL 策略 (任何通道都可以), REQUIRES_SECURE_CHANNEL 策略 (只能通過https 通道), REQUIRES_INSECURE_CHANNEL 策略 (只能通過 http 通道)。 FilterInvocationSecurityMetadataSource 用來存儲(chǔ) url 與 對(duì)應(yīng)的ANY_CHANNEL、REQUIRES_SECURE_CHANNEL、REQUIRES_INSECURE_CHANNEL 的映射關(guān)系。

ChannelProcessingFilter 通過 HttpScurity#requiresChannel() 等相關(guān)方法引入其配置對(duì)象 ChannelSecurityConfigurer 來進(jìn)行配置。

3.2 ConcurrentSessionFilter

ConcurrentSessionFilter 主要用來判斷session是否過期以及更新最新的訪問時(shí)間。其流程為:

session 檢測(cè),如果不存在直接放行去執(zhí)行下一個(gè)過濾器。存在則進(jìn)行下一步。根據(jù)sessionid從SessionRegistry中獲取SessionInformation,從SessionInformation中獲取session是否過期;沒有過期則更新SessionInformation中的訪問日期;如果過期,則執(zhí)行doLogout()方法,這個(gè)方法會(huì)將session無效,并將 SecurityContext 中的Authentication中的權(quán)限置空,同時(shí)在SecurityContenxtHoloder中清除SecurityContext然后查看是否有跳轉(zhuǎn)的 expiredUrl,如果有就跳轉(zhuǎn),沒有就輸出提示信息。

ConcurrentSessionFilter 通過SessionManagementConfigurer 來進(jìn)行配置。

3.3 WebAsyncManagerIntegrationFilter

WebAsyncManagerIntegrationFilter用于集成SecurityContext到Spring異步執(zhí)行機(jī)制中的WebAsyncManager。用來處理異步請(qǐng)求的安全上下文。具體邏輯為:

從請(qǐng)求屬性上獲取所綁定的WebAsyncManager,如果尚未綁定,先做綁定。從asyncManager 中獲取 key 為 CALLABLE_INTERCEPTOR_KEY 的安全上下文多線程處理器 SecurityContextCallableProcessingInterceptor, 如果獲取到的為 null,新建一個(gè) SecurityContextCallableProcessingInterceptor 并綁定 CALLABLE_INTERCEPTOR_KEY 注冊(cè)到 asyncManager 中。

這里簡(jiǎn)單說一下 SecurityContextCallableProcessingInterceptor 。它實(shí)現(xiàn)了接口 CallableProcessingInterceptor,當(dāng)它被應(yīng)用于一次異步執(zhí)行時(shí),beforeConcurrentHandling() 方法會(huì)在調(diào)用者線程執(zhí)行,該方法會(huì)相應(yīng)地從當(dāng)前線程獲取SecurityContext,然后被調(diào)用者線程中執(zhí)行邏輯時(shí),會(huì)使用這個(gè) SecurityContext,從而實(shí)現(xiàn)安全上下文從調(diào)用者線程到被調(diào)用者線程的傳輸。

WebAsyncManagerIntegrationFilter 通過 WebSecurityConfigurerAdapter#getHttp()方法添加到 HttpSecurity 中成為 DefaultSecurityFilterChain 的一個(gè)鏈節(jié)。

3.4 SecurityContextPersistenceFilter

SecurityContextPersistenceFilter 主要控制 SecurityContext 的在一次請(qǐng)求中的生命周期 。 請(qǐng)求來臨時(shí),創(chuàng)建SecurityContext 安全上下文信息,請(qǐng)求結(jié)束時(shí)清空 SecurityContextHolder。

SecurityContextPersistenceFilter 通過 HttpScurity#securityContext() 及相關(guān)方法引入其配置對(duì)象 SecurityContextConfigurer 來進(jìn)行配置。

3.5 HeaderWriterFilter

HeaderWriterFilter 用來給 http 響應(yīng)添加一些 Header,比如 X-Frame-Options, X-XSS-Protection ,X-Content-Type-Options。

你可以通過 HttpScurity#headers() 來定制請(qǐng)求Header 。

3.6 CorsFilter

跨域相關(guān)的過濾器。這是Spring MVC Java配置和XML 命名空間 CORS 配置的替代方法, 僅對(duì)依賴于spring-web的應(yīng)用程序有用(不適用于spring-webmvc)或 要求在javax.servlet.Filter 級(jí)別進(jìn)行CORS檢查的安全約束鏈接。這個(gè)是目前官方的一些解讀,但是我還是不太清楚實(shí)際機(jī)制。

你可以通過 HttpSecurity#cors() 來定制。

3.7 CsrfFilter

CsrfFilter 用于防止csrf攻擊,前后端使用json交互需要注意的一個(gè)問題。

你可以通過 HttpSecurity.csrf() 來開啟或者關(guān)閉它。在你使用 jwt 等 token 技術(shù)時(shí),是不需要這個(gè)的。

3.8 LogoutFilter

LogoutFilter 很明顯這是處理注銷的過濾器。

你可以通過 HttpSecurity.logout() 來定制注銷邏輯,非常有用。

3.9 OAuth2AuthorizationRequestRedirectFilter

和上面的有所不同,這個(gè)需要依賴 spring-scurity-oauth2 相關(guān)的模塊。該過濾器是處理 OAuth2 請(qǐng)求首選重定向相關(guān)邏輯的。

3.10 Saml2WebSsoAuthenticationRequestFilter

這個(gè)需要用到 Spring Security SAML 模塊,這是一個(gè)基于 SMAL 的 SSO 單點(diǎn)登錄請(qǐng)求認(rèn)證過濾器。

關(guān)于SAML

SAML 即安全斷言標(biāo)記語(yǔ)言,英文全稱是 Security Assertion Markup Language。它是一個(gè)基于 XML 的標(biāo)準(zhǔn),用于在不同的安全域(security domain)之間交換認(rèn)證和授權(quán)數(shù)據(jù)。在 SAML 標(biāo)準(zhǔn)定義了身份提供者 (identity provider) 和服務(wù)提供者 (service provider),這兩者構(gòu)成了前面所說的不同的安全域。 SAML 是 OASIS 組織安全服務(wù)技術(shù)委員會(huì)(Security Services Technical Committee) 的產(chǎn)品。

SAML(Security Assertion Markup Language)是一個(gè) XML 框架,也就是一組協(xié)議,可以用來傳輸安全聲明。比如,兩臺(tái)遠(yuǎn)程機(jī)器之間要通訊,為了保證安全,我們可以采用加密等措施,也可以采用 SAML 來傳輸,傳輸?shù)臄?shù)據(jù)以 XML 形式,符合 SAML 規(guī)范,這樣我們就可以不要求兩臺(tái)機(jī)器采用什么樣的系統(tǒng),只要求能理解 SAML 規(guī)范即可,顯然比傳統(tǒng)的方式更好。SAML 規(guī)范是一組 Schema 定義。

可以這么說,在Web Service 領(lǐng)域,schema 就是規(guī)范,在 Java 領(lǐng)域,API 就是規(guī)范

3.11 X509AuthenticationFilter

X509 認(rèn)證過濾器。你可以通過 HttpSecurity#X509() 來啟用和配置相關(guān)功能。

3.12 AbstractPreAuthenticatedProcessingFilter

AbstractPreAuthenticatedProcessingFilter 處理處理經(jīng)過預(yù)先認(rèn)證的身份驗(yàn)證請(qǐng)求的過濾器的基類,其中認(rèn)證主體已經(jīng)由外部系統(tǒng)進(jìn)行了身份驗(yàn)證。 目的只是從傳入請(qǐng)求中提取主體上的必要信息,而不是對(duì)它們進(jìn)行身份驗(yàn)證。

你可以繼承該類進(jìn)行具體實(shí)現(xiàn)并通過 HttpSecurity#addFilter 方法來添加個(gè)性化的AbstractPreAuthenticatedProcessingFilter 。

3.13 CasAuthenticationFilter

CAS 單點(diǎn)登錄認(rèn)證過濾器 。依賴 Spring Security CAS 模塊

3.14 OAuth2LoginAuthenticationFilter

這個(gè)需要依賴 spring-scurity-oauth2 相關(guān)的模塊。OAuth2 登錄認(rèn)證過濾器。處理通過 OAuth2 進(jìn)行認(rèn)證登錄的邏輯。

3.15 Saml2WebSsoAuthenticationFilter

這個(gè)需要用到 Spring Security SAML 模塊,這是一個(gè)基于 SMAL 的 SSO 單點(diǎn)登錄認(rèn)證過濾器。 關(guān)于SAML

3.16 UsernamePasswordAuthenticationFilter

這個(gè)看過我相關(guān)文章的應(yīng)該不陌生了。處理用戶以及密碼認(rèn)證的核心過濾器。認(rèn)證請(qǐng)求提交的username和 password,被封裝成token進(jìn)行一系列的認(rèn)證,便是主要通過這個(gè)過濾器完成的,在表單認(rèn)證的方法中,這是最最關(guān)鍵的過濾器。

你可以通過 HttpSecurity#formLogin() 及相關(guān)方法引入其配置對(duì)象 FormLoginConfigurer 來進(jìn)行配置。 我們?cè)?Spring Security 實(shí)戰(zhàn)干貨: 玩轉(zhuǎn)自定義登錄 已經(jīng)對(duì)其進(jìn)行過個(gè)性化的配置和魔改。

3.17 ConcurrentSessionFilter

參見 3.2 ConcurrentSessionFilter 。 該過濾器可能會(huì)被多次執(zhí)行。

3.18 OpenIDAuthenticationFilter

基于OpenID 認(rèn)證協(xié)議的認(rèn)證過濾器。 你需要在依賴中依賴額外的相關(guān)模塊才能啟用它。

3.19 DefaultLoginPageGeneratingFilter

生成默認(rèn)的登錄頁(yè)。默認(rèn) /login 。

3.20 DefaultLogoutPageGeneratingFilter

生成默認(rèn)的退出頁(yè)。 默認(rèn) /logout 。

3.21 ConcurrentSessionFilter

參見 3.2 ConcurrentSessionFilter 。 該過濾器可能會(huì)被多次執(zhí)行。

3.23 DigestAuthenticationFilter

Digest身份驗(yàn)證是 Web 應(yīng)用程序中流行的可選的身份驗(yàn)證機(jī)制 。DigestAuthenticationFilter 能夠處理 HTTP 頭中顯示的摘要式身份驗(yàn)證憑據(jù)。你可以通過 HttpSecurity#addFilter() 來啟用和配置相關(guān)功能。

3.24 BasicAuthenticationFilter

和Digest身份驗(yàn)證一樣都是Web 應(yīng)用程序中流行的可選的身份驗(yàn)證機(jī)制 。 BasicAuthenticationFilter 負(fù)責(zé)處理 HTTP 頭中顯示的基本身份驗(yàn)證憑據(jù)。這個(gè) Spring Security 的 Spring Boot 自動(dòng)配置默認(rèn)是啟用的 。

BasicAuthenticationFilter 通過 HttpSecurity#httpBasic() 及相關(guān)方法引入其配置對(duì)象 HttpBasicConfigurer 來進(jìn)行配置。

3.25 RequestCacheAwareFilter

用于用戶認(rèn)證成功后,重新恢復(fù)因?yàn)榈卿洷淮驍嗟恼?qǐng)求。當(dāng)匿名訪問一個(gè)需要授權(quán)的資源時(shí)。會(huì)跳轉(zhuǎn)到認(rèn)證處理邏輯,此時(shí)請(qǐng)求被緩存。在認(rèn)證邏輯處理完畢后,從緩存中獲取最開始的資源請(qǐng)求進(jìn)行再次請(qǐng)求。

RequestCacheAwareFilter 通過 HttpScurity#requestCache() 及相關(guān)方法引入其配置對(duì)象 RequestCacheConfigurer 來進(jìn)行配置。

3.26 SecurityContextHolderAwareRequestFilter

用來 實(shí)現(xiàn)j2ee中 Servlet Api 一些接口方法, 比如 getRemoteUser 方法、isUserInRole 方法,在使用 Spring Security 時(shí)其實(shí)就是通過這個(gè)過濾器來實(shí)現(xiàn)的。

SecurityContextHolderAwareRequestFilter 通過 HttpSecurity.servletApi() 及相關(guān)方法引入其配置對(duì)象 ServletApiConfigurer 來進(jìn)行配置。

3.27 JaasApiIntegrationFilter

適用于JAAS (Java 認(rèn)證授權(quán)服務(wù))。 如果 SecurityContextHolder 中擁有的 Authentication 是一個(gè) JaasAuthenticationToken,那么該 JaasApiIntegrationFilter 將使用包含在 JaasAuthenticationToken 中的 Subject 繼續(xù)執(zhí)行 FilterChain。

3.28 RememberMeAuthenticationFilter

處理 記住我 功能的過濾器。

RememberMeAuthenticationFilter 通過 HttpSecurity.rememberMe() 及相關(guān)方法引入其配置對(duì)象 RememberMeConfigurer 來進(jìn)行配置。

3.29 AnonymousAuthenticationFilter

匿名認(rèn)證過濾器。對(duì)于 Spring Security 來說,所有對(duì)資源的訪問都是有 Authentication 的。對(duì)于無需登錄(UsernamePasswordAuthenticationFilter )直接可以訪問的資源,會(huì)授予其匿名用戶身份。

AnonymousAuthenticationFilter 通過 HttpSecurity.anonymous() 及相關(guān)方法引入其配置對(duì)象 AnonymousConfigurer 來進(jìn)行配置。

3.30 SessionManagementFilter

Session 管理器過濾器,內(nèi)部維護(hù)了一個(gè) SessionAuthenticationStrategy 用于管理 Session 。

SessionManagementFilter 通過 HttpScurity#sessionManagement() 及相關(guān)方法引入其配置對(duì)象 SessionManagementConfigurer 來進(jìn)行配置。

3.31 ExceptionTranslationFilter

主要來傳輸異常事件,還記得之前我們見過的 DefaultAuthenticationEventPublisher 嗎?

3.32 FilterSecurityInterceptor

這個(gè)過濾器決定了訪問特定路徑應(yīng)該具備的權(quán)限,訪問的用戶的角色,權(quán)限是什么?訪問的路徑需要什么樣的角色和權(quán)限?這些判斷和處理都是由該類進(jìn)行的。如果你要實(shí)現(xiàn)動(dòng)態(tài)權(quán)限控制就必須研究該類 。

3.33 SwitchUserFilter

SwitchUserFilter 是用來做賬戶切換的。默認(rèn)的切換賬號(hào)的url為/login/impersonate,默認(rèn)注銷切換賬號(hào)的url為/logout/impersonate,默認(rèn)的賬號(hào)參數(shù)為username 。

你可以通過此類實(shí)現(xiàn)自定義的賬戶切換。

4. 總結(jié)

所有內(nèi)置的 31個(gè)過濾器作用都講解完了,有一些默認(rèn)已經(jīng)啟用。有一些需要引入特定的包并且對(duì) HttpSecurity 進(jìn)行配置才會(huì)生效 。而且它們的順序是既定的。 只有你了解這些過濾器你才能基于業(yè)務(wù)深度定制 Spring Security 。

到此這篇關(guān)于全面解析Spring Security 內(nèi)置 Filter的文章就介紹到這了,更多相關(guān)Spring Security 內(nèi)置 Filter內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Spring
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
偷拍亚洲精品| 六月婷婷一区| 在线观看精品| 国产精品蜜月aⅴ在线| 欧美亚洲日本精品| 亚洲黑丝一区二区| 欧美日韩水蜜桃| 欧美日一区二区在线观看| 欧美极品中文字幕| 免费在线日韩av| 久久影院一区二区三区| 精品视频一区二区三区在线观看| 欧美一区成人| 国产精品亚洲综合在线观看| 美女性感视频久久| 欧美美女一区| 麻豆一区在线| 99精品在线观看| 91久久中文| 国产精品巨作av| 久久久久国产精品一区三寸| 合欧美一区二区三区| 午夜欧美精品久久久久久久| 久久国产成人| 日本成人在线不卡视频| 久久国产乱子精品免费女| 欧美激情麻豆| 久久亚洲国产精品尤物| 久久久久国产一区二区| 久久国产高清| 国产欧美激情| 日韩国产专区| 亚洲免费中文| 国产日韩视频| 欧美三区四区| 日本 国产 欧美色综合| 国产精品一国产精品k频道56| 精品一区二区三区中文字幕| 青青久久av| 日韩精品一二三区| 国产福利一区二区精品秒拍 | 日韩中文首页| 免播放器亚洲| 欧美黑人巨大videos精品| 日本少妇一区| 无码日韩精品一区二区免费| 国产成人久久精品麻豆二区| 久久国产99| 风间由美中文字幕在线看视频国产欧美| 成人精品亚洲| 午夜久久av| 97精品国产一区二区三区| 日韩影院免费视频| 国产一区二区三区天码| 亚洲自啪免费| 欧美日韩伊人| 99精品美女| 精品亚洲美女网站| 精品国产三区在线| 精品国产亚洲一区二区三区在线 | 国产精品主播| 欧美亚洲福利| 伊人国产精品| 国产精品调教| 成午夜精品一区二区三区软件| 精品美女在线视频| 日韩精品第一区| 日韩国产欧美一区二区| 日本不卡免费高清视频在线| 亚洲精品在线影院| 丝袜亚洲精品中文字幕一区| 国产亚洲一区在线| 国产精品毛片一区二区在线看| 国产婷婷精品| 国产一区二区三区免费在线| 红桃视频亚洲| 成人一二三区| 青草国产精品| 国产视频一区在线观看一区免费| 精品国产亚洲一区二区三区大结局| 国产精品腿扒开做爽爽爽挤奶网站| 国产日韩欧美在线播放不卡| 久久一区二区三区电影| 国产精品白丝一区二区三区| 国产婷婷精品| 91视频一区| 丝袜a∨在线一区二区三区不卡| 97成人超碰| 偷拍欧美精品| 极品日韩av| 日韩在线一区二区| а√天堂中文在线资源8| 日韩精品第一| 美女日韩在线中文字幕| 免费观看亚洲| 欧美日韩在线精品一区二区三区激情综合| 伊人久久亚洲热| 欧美精品高清| 91欧美国产| 久久精品一本| 国产精品久久久久av蜜臀| 亚洲欧洲日韩| 久久亚洲不卡| 99在线精品免费视频九九视| 99久久视频| 亚洲精品88| 91亚洲一区| 国产成人精品一区二区三区在线| 欧美日韩18| 日本视频在线一区| 亚洲资源网站| 蜜桃久久久久久| 玖玖玖国产精品| 99国产精品| 婷婷亚洲五月色综合| 日韩毛片视频| 黄色在线网站噜噜噜| 精品国产精品久久一区免费式| 国产精品成人国产| 国产精品亚洲片在线播放| 国产欧美日韩一级| 欧美日韩99| 国产日韩视频| 国产精品多人| 国产一区二区三区不卡av| 麻豆精品新av中文字幕| 国产精品一区二区av日韩在线| 久久精品av麻豆的观看方式| 欧美视频久久| 国产精品久久| 久久97视频| 久久91导航| 亚洲一区成人| 日韩精品国产精品| 久久99蜜桃| 免费久久精品| 免费成人在线影院| 国产精品一区二区中文字幕| 美女在线视频一区| 国产成人免费| 欧美粗暴jizz性欧美20| 先锋影音久久久| 乱一区二区av| 日韩国产欧美视频| 亚洲h色精品| 不卡一区2区| 九色porny丨国产首页在线| 国产伦理一区| 国产精品福利在线观看播放| 国产精品99一区二区| 国产精品对白| 麻豆精品在线| 日韩精品午夜视频| 国产乱码精品一区二区三区四区| 国产日韩亚洲| 国产伦精品一区二区三区在线播放| 国产视频网站一区二区三区| 粉嫩av一区二区三区四区五区 | 群体交乱之放荡娇妻一区二区| 日本午夜大片a在线观看| 日本精品另类| 丝袜美腿亚洲一区二区图片| 日韩精品欧美| 福利片在线一区二区| 亚洲视频播放| 国产精品一区二区免费福利视频| 欧美精品高清| 亚洲精品网址| 国产精品二区不卡| 久久精品一区二区国产| 日韩黄色av| 久久精品国产免费| 日韩精品一区二区三区免费观影 | 蜜臀av国产精品久久久久| 日本精品久久| 国内不卡的一区二区三区中文字幕| 日韩av在线播放网址| 国产农村妇女精品一二区| 日韩精品中文字幕一区二区| 精品久久久久中文字幕小说| 一区在线视频观看| 国产精品极品| 一本一道久久a久久精品蜜桃| 亚洲+小说+欧美+激情+另类| 国产专区精品| 一级成人国产| 成人在线免费观看网站| 天堂俺去俺来也www久久婷婷| 亚洲精品欧洲| 欧美三级第一页| caoporn视频在线| 久久国产中文字幕| 久久国产三级精品| 欧美aa国产视频| 国产精品白丝久久av网站| 亚洲激情黄色| 精品伊人久久久| 亚洲精品四区| 99久久夜色精品国产亚洲狼| 国产日本久久|