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

「Spring」認證安全架構(gòu)指南

開發(fā) 前端
本指南并非旨在作為解決最基本問題的手冊或秘訣(這些問題還有其他來源),但它對初學(xué)者和專家都可能有用。Spring Boot 也經(jīng)常被引用,因為它為安全應(yīng)用程序提供了一些默認行為,并且了解它如何與整體架構(gòu)相適應(yīng)會很有用。

本指南是 Spring Security 的入門指南,提供對框架設(shè)計和基本構(gòu)建塊的深入了解。我們僅涵蓋應(yīng)用程序安全的基礎(chǔ)知識。但是,這樣做,我們可以清除使用 Spring Security 的開發(fā)人員遇到的一些困惑。為此,我們通過使用過濾器,更一般地,通過使用方法注解,來看看在 Web 應(yīng)用程序中應(yīng)用安全性的方式。當您需要深入了解安全應(yīng)用程序的工作原理、如何對其進行自定義或需要學(xué)習(xí)如何考慮應(yīng)用程序安全性時,請使用本指南。

本指南并非旨在作為解決最基本問題的手冊或秘訣(這些問題還有其他來源),但它對初學(xué)者和專家都可能有用。Spring Boot 也經(jīng)常被引用,因為它為安全應(yīng)用程序提供了一些默認行為,并且了解它如何與整體架構(gòu)相適應(yīng)會很有用。

所有原則同樣適用于不使用 Spring Boot 的應(yīng)用程序。

身份驗證和訪問控制

應(yīng)用程序安全性歸結(jié)為兩個或多或少獨立的問題:身份驗證(你是誰?)和授權(quán)(你可以做什么?)。有時人們會說“訪問控制”而不是“授權(quán)”,這可能會讓人感到困惑,但這樣想可能會有所幫助,因為“授權(quán)”在其他地方被重載了。Spring Security 的架構(gòu)旨在將身份驗證與授權(quán)分開,并為兩者提供策略和擴展點。

驗證

認證的主要策略接口是AuthenticationManager,它只有一個方法:

public interface AuthenticationManager {

Authentication authenticate(Authentication authentication)
throws AuthenticationException;
}

An可以在其方法AuthenticationManager中做三件事之一:authenticate()

  • 如果它可以驗證輸入代表一個有效的主體,則返回一個Authentication(通常帶有)。authenticated=true
  • AuthenticationException如果它認為輸入代表無效的委托人,則拋出一個。
  • null如果它不能決定返回。

AuthenticationException是運行時異常。它通常由應(yīng)用程序以通用方式處理,具體取決于應(yīng)用程序的樣式或用途。換句話說,通常不期望用戶代碼來捕獲和處理它。例如,Web UI 可能會呈現(xiàn)一個說明身份驗證失敗的頁面,并且后端 HTTP 服務(wù)可能會發(fā)送一個 401 響應(yīng),WWW-Authenticate根據(jù)上下文是否有標頭。

最常用的實現(xiàn)AuthenticationManager是ProviderManager,它委托給一個AuthenticationProvider實例鏈。AnAuthenticationProvider有點像 an AuthenticationManager,但它有一個額外的方法允許調(diào)用者查詢它是否支持給定的Authentication類型:

public interface AuthenticationProvider {

Authentication authenticate(Authentication authentication)
throws AuthenticationException;

boolean supports(Class<?> authentication);
}

方法中的Class<?>參數(shù)supports()是真的Class<? extends Authentication>(只詢問它是否支持傳遞給authenticate()方法的東西)。AProviderManager可以通過委托給AuthenticationProviders. 如果 aProviderManager不能識別特定的Authentication實例類型,則會跳過它。

AProviderManager有一個可選的父級,如果所有提供者都返回,它可以咨詢它null。如果父級不可用,則null Authentication結(jié)果為AuthenticationException.

有時,應(yīng)用程序具有受保護資源的邏輯組(例如,與路徑模式匹配的所有 Web 資源,例如/api/**),并且每個組都可以有自己的專用AuthenticationManager. 通常,它們中的每一個都是一個ProviderManager,并且它們共享一個父級。然后,父級是一種“全局”資源,充當所有提供者的后備。

「Spring」認證安全架構(gòu)指南

圖 1. 使用的AuthenticationManager層次結(jié)構(gòu)ProviderManager

自定義身份驗證管理器

Spring Security 提供了一些配置助手來快速獲取應(yīng)用程序中設(shè)置的常見身份驗證管理器功能。最常用的幫助程序是AuthenticationManagerBuilder,它非常適合設(shè)置內(nèi)存、JDBC 或 LDAP 用戶詳細信息或添加自定義UserDetailsService. 以下示例顯示了一個配置全局(父)的應(yīng)用程序AuthenticationManager:

@Configuration
public class ApplicationSecurity extends WebSecurityConfigurerAdapter {

... // web stuff here

@Autowired
public void initialize(AuthenticationManagerBuilder builder, DataSource dataSource) {
builder.jdbcAuthentication().dataSource(dataSource).withUser("dave")
.password("secret").roles("USER");
}

}

此示例與 Web 應(yīng)用程序相關(guān),但 的使用AuthenticationManagerBuilder更廣泛(有關(guān)如何實現(xiàn) Web 應(yīng)用程序安全性的更多詳細信息,請參閱Web 安全性)。請注意,它AuthenticationManagerBuilder是@Autowired在 a 中的一個方法中@Bean?——這就是它構(gòu)建全局(父)的原因AuthenticationManager。相反,請考慮以下示例:

@Configuration
public class ApplicationSecurity extends WebSecurityConfigurerAdapter {

@Autowired
DataSource dataSource;

... // web stuff here

@Override
public void configure(AuthenticationManagerBuilder builder) {
builder.jdbcAuthentication().dataSource(dataSource).withUser("dave")
.password("secret").roles("USER");
}

}

如果我們@Override在配置器中使用了 of 方法,那么AuthenticationManagerBuilder將僅用于構(gòu)建“本地” AuthenticationManager,這將是全局方法的子對象。在 Spring Boot 應(yīng)用程序中,您可以@Autowired將全局 bean 放入另一個 bean,但您不能對本地 bean 執(zhí)行此操作,除非您自己顯式公開它。

Spring Boot 提供了一個默認的全局AuthenticationManager(只有一個用戶),除非您通過提供自己的 bean 類型來搶占它AuthenticationManager。默認值本身就足夠安全,您不必擔心太多,除非您主動需要自定義全局AuthenticationManager. 如果您進行任何構(gòu)建AuthenticationManager.

授權(quán)或訪問控制

一旦認證成功,我們就可以繼續(xù)進行授權(quán),這里的核心策略是AccessDecisionManager. 框架提供了三個實現(xiàn),所有三個都委托給一個AccessDecisionVoter實例鏈,有點像ProviderManager委托給AuthenticationProviders.

AnAccessDecisionVoter考慮一個Authentication(代表一個主體)和一個安全的Object,它被裝飾了ConfigAttributes:

boolean supports(ConfigAttribute attribute);

boolean supports(Class<?> clazz);

int vote(Authentication authentication, S object,
Collection<ConfigAttribute> attributes);

在和的Object簽名中是完全通用的。它代表用戶可能想要訪問的任何內(nèi)容(Web 資源或 Java 類中的方法是最常見的兩種情況)。它們也是相當通用的,代表安全的裝飾,帶有一些決定訪問它所需的權(quán)限級別的元數(shù)據(jù)。是一個接口。它只有一個方法(非常通用并返回 a ),因此這些字符串以某種方式編碼了資源所有者的意圖,表達了關(guān)于允許誰訪問它的規(guī)則。典型的是用戶角色的名稱(如or ),它們通常具有特殊格式(如AccessDecisionManagerAccessDecisionVoterConfigAttributesObjectConfigAttributeStringConfigAttributeROLE_ADMINROLE_AUDITROLE_前綴)或表示需要評估的表達式。

大多數(shù)人使用默認值A(chǔ)ccessDecisionManager,即AffirmativeBased(如果任何選民肯定返回,則授予訪問權(quán)限)。通過添加新的或修改現(xiàn)有的工作方式,任何定制都傾向于發(fā)生在選民身上。

使用 Spring 表達式語言 (SpEL) 表達式非常常見ConfigAttributes——例如,isFullyAuthenticated() && hasRole('user'). 這由AccessDecisionVoter可以處理表達式并為它們創(chuàng)建上下文的 an 支持。要擴展可以處理的表達式范圍,SecurityExpressionRoot有時還需要自定義實現(xiàn)SecurityExpressionHandler.

網(wǎng)絡(luò)安全

Web 層中的 Spring Security(用于 UI 和 HTTP 后端)是基于 Servlet 的Filters,所以首先看一下Filters一般的作用是有幫助的。下圖顯示了單個 HTTP 請求的處理程序的典型分層。

「Spring」認證安全架構(gòu)指南

客戶端向應(yīng)用程序發(fā)送請求,容器根據(jù)請求 URI 的路徑?jīng)Q定應(yīng)用哪些過濾器和哪個 servlet。最多一個 servlet 可以處理一個請求,但是過濾器形成一個鏈,所以它們是有序的。事實上,如果過濾器想要自己處理請求,它可以否決鏈的其余部分。過濾器還可以修改下游過濾器和 servlet 中使用的請求或響應(yīng)。過濾器鏈的順序非常重要,Spring Boot 通過兩種機制來管理它:@Beans類型Filter可以有一個@Order或?qū)崿F(xiàn)Ordered,它們可以是一個FilterRegistrationBean它本身有一個訂單作為其 API 的一部分。一些現(xiàn)成的過濾器定義了自己的常量來幫助表明他們喜歡的相對于彼此的順序(例如,SessionRepositoryFilter來自 Spring Session 有一個DEFAULT_ORDERof Integer.MIN_VALUE + 50,它告訴我們它喜歡在鏈中處于早期,但是它不排除在它之前出現(xiàn)其他過濾器)。

Spring Security 在鏈中作為單個安裝Filter,其具體類型是FilterChainProxy,原因我們很快就會介紹。在 Spring Boot 應(yīng)用程序中,安全過濾器位于@Bean中ApplicationContext,默認情況下會安裝它,以便將其應(yīng)用于每個請求。它安裝在由 定義的位置SecurityProperties.DEFAULT_FILTER_ORDER,該位置又被錨定FilterRegistrationBean.REQUEST_WRAPPER_FILTER_MAX_ORDER(Spring Boot 應(yīng)用程序在包裝請求時期望過濾器具有的最大順序,修改其行為)。不僅如此:從容器的角度來看,Spring Security 是一個單一的過濾器,但在其中,還有額外的過濾器,每個過濾器都扮演著特殊的角色。下圖顯示了這種關(guān)系:

「Spring」認證安全架構(gòu)指南

圖 2. Spring Security 是單一物理的Filter,但將處理委托給內(nèi)部過濾器鏈

實際上,安全過濾器中甚至還有一層間接性:它通常以 . 的形式安裝在容器中DelegatingFilterProxy,而不必一定是 Spring @Bean。代理委托給 a FilterChainProxy,它始終是 a @Bean,通常具有固定名稱springSecurityFilterChain。它FilterChainProxy包含在內(nèi)部排列為過濾器鏈(或鏈)的所有安全邏輯。所有過濾器都具有相同的 API(它們都實現(xiàn)了FilterServlet 規(guī)范中的接口),并且它們都有機會否決鏈的其余部分。

可以有多個過濾器鏈都由 Spring Security 在同一頂層管理,F(xiàn)ilterChainProxy并且對容器都是未知的。Spring Security 過濾器包含一個過濾器鏈列表,并將請求分派到與其匹配的第一個鏈。下圖顯示了基于匹配請求路徑(/foo/**匹配之前/**)發(fā)生的調(diào)度。這很常見,但不是匹配請求的唯一方法。這個分派過程最重要的特點是只有一個鏈處理一個請求。

「Spring」認證安全架構(gòu)指南

圖 3. Spring SecurityFilterChainProxy將請求分派到匹配的第一個鏈。

沒有自定義安全配置的普通 Spring Boot 應(yīng)用程序有幾個(稱為 n)過濾器鏈,其中通常 n=6。第一個 (n-1) 個鏈只是為了忽略靜態(tài)資源模式,例如/css/**and/images/**和錯誤視圖:/error. (路徑可以由用戶使用security.ignored配置SecurityPropertiesbean 控制。)最后一個鏈匹配包羅萬象的路徑 ( /**) 并且更加活躍,包含身份驗證、授權(quán)、異常處理、會話處理、標頭寫入等邏輯上。默認情況下,該鏈中共有 11 個過濾器,但通常用戶無需關(guān)心使用哪些過濾器以及何時使用。

容器不知道 Spring Security 內(nèi)部的所有過濾器這一事實很重要,尤其是在 Spring Boot 應(yīng)用程序中,默認情況下,所有@Beans類型Filter都自動注冊到容器中。因此,如果您想將自定義過濾器添加到安全鏈中,則需要不將其設(shè)為 a@Bean或?qū)⑵浒b在FilterRegistrationBean明確禁用容器注冊的 a 中。

創(chuàng)建和自定義過濾器鏈

Spring Boot 應(yīng)用程序(具有請求匹配器的應(yīng)用程序)中的默認后備過濾器鏈/**具有預(yù)定義的SecurityProperties.BASIC_AUTH_ORDER. 您可以通過設(shè)置將其完全關(guān)閉security.basic.enabled=false,也可以將其用作后備并以較低的順序定義其他規(guī)則。要執(zhí)行后者,請?zhí)砑右粋€(或)@Bean類型并用 裝飾類,如下所示:WebSecurityConfigurerAdapterWebSecurityConfigurer@Order

@Configuration
@Order(SecurityProperties.BASIC_AUTH_ORDER - 10)
public class ApplicationConfigurerAdapter extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.antMatcher("/match1/**")
...;
}
}

這個 bean 導(dǎo)致 Spring Security 添加一個新的過濾器鏈并在回退之前對其進行排序。

與另一組相比,許多應(yīng)用程序?qū)σ唤M資源的訪問規(guī)則完全不同。例如,托管 UI 和支持 API 的應(yīng)用程序可能支持基于 cookie 的身份驗證,通過重定向到 UI 部分的登錄頁面和基于令牌的身份驗證,以及對 API 部分的未經(jīng)身份驗證請求的 401 響應(yīng)。每組資源都有自己WebSecurityConfigurerAdapter的唯一順序和自己的請求匹配器。如果匹配規(guī)則重疊,則最早排序的過濾器鏈獲勝。

請求匹配調(diào)度和授權(quán)

安全過濾器鏈(或等效的 aWebSecurityConfigurerAdapter)有一個請求匹配器,用于決定是否將其應(yīng)用于 HTTP 請求。一旦決定應(yīng)用特定的過濾器鏈,就不會應(yīng)用其他過濾器鏈。但是,在過濾器鏈中,您可以通過在配置器中設(shè)置額外的匹配器來對授權(quán)進行更細粒度的控制HttpSecurity,如下所示:

@Configuration
@Order(SecurityProperties.BASIC_AUTH_ORDER - 10)
public class ApplicationConfigurerAdapter extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.antMatcher("/match1/**")
.authorizeRequests()
.antMatchers("/match1/user").hasRole("USER")
.antMatchers("/match1/spam").hasRole("SPAM")
.anyRequest().isAuthenticated();
}
}

配置 Spring Security 時最容易犯的錯誤之一就是忘記這些匹配器適用于不同的進程。一種是整個過濾器鏈的請求匹配器,另一種只是選擇要應(yīng)用的訪問規(guī)則。

將應(yīng)用程序安全規(guī)則與執(zhí)行器規(guī)則相結(jié)合

如果您將 Spring Boot Actuator 用于管理端點,您可能希望它們是安全的,并且默認情況下它們是安全的。事實上,只要將執(zhí)行器添加到安全應(yīng)用程序,您就會獲得一個僅適用于執(zhí)行器端點的附加過濾器鏈。它是使用僅匹配執(zhí)行器端點的請求匹配器定義的,它的順序為ManagementServerProperties.BASIC_AUTH_ORDER,比默認的SecurityProperties回退過濾器少 5 個,因此在回退之前對其進行查詢。

如果您希望您的應(yīng)用程序安全規(guī)則應(yīng)用于執(zhí)行器端點,您可以添加一個比執(zhí)行器更早排序的過濾器鏈,并且該過濾器鏈具有包含所有執(zhí)行器端點的請求匹配器。如果您更喜歡執(zhí)行器端點的默認安全設(shè)置,最簡單的方法是在執(zhí)行器之后添加您自己的過濾器,但在回退之前添加(例如,ManagementServerProperties.BASIC_AUTH_ORDER + 1),如下所示:

@Configuration
@Order(ManagementServerProperties.BASIC_AUTH_ORDER + 1)
public class ApplicationConfigurerAdapter extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.antMatcher("/foo/**")
...;
}
}

Web 層中的 Spring Security 當前與 Servlet API 相關(guān)聯(lián),因此它僅在 servlet 容器中運行應(yīng)用程序時才真正適用,無論是嵌入的還是其他的。但是,它不依賴于 Spring MVC 或 Spring Web 堆棧的其余部分,因此它可以在任何 servlet 應(yīng)用程序中使用——例如,使用 JAX-RS 的應(yīng)用程序。

方法安全

除了支持保護 Web 應(yīng)用程序之外,Spring Security 還支持將訪問規(guī)則應(yīng)用于 Java 方法執(zhí)行。對于 Spring Security,這只是一種不同類型的“受保護資源”。對于用戶,這意味著使用相同格式的ConfigAttribute字符串(例如,角色或表達式)聲明訪問規(guī)則,但在代碼中的不同位置。第一步是啟用方法安全性——例如,在我們應(yīng)用程序的頂層配置中:

@SpringBootApplication
@EnableGlobalMethodSecurity(securedEnabled = true)
public class SampleSecureApplication {
}

然后我們可以直接裝飾方法資源:

@Service
public class MyService {

@Secured("ROLE_USER")
public String secure() {
return "Hello Security";
}

}

此示例是具有安全方法的服務(wù)。如果 Spring 創(chuàng)建了@Bean這種類型的 a,它會被代理,調(diào)用者必須在方法實際執(zhí)行之前通過安全攔截器。如果訪問被拒絕,調(diào)用者會得到一個AccessDeniedException而不是實際的方法結(jié)果。

您可以在方法上使用其他注釋來強制實施安全約束,特別是@PreAuthorize和@PostAuthorize,它們允許您編寫分別包含對方法參數(shù)和返回值的引用的表達式。

將 Web 安全性和方法安全性結(jié)合起來并不少見。過濾器鏈提供用戶體驗功能,例如身份驗證和重定向到登錄頁面等,方法安全性提供更細粒度的保護。

使用線程

Spring Security 基本上是線程綁定的,因為它需要使當前經(jīng)過身份驗證的主體可用于各種下游消費者。基本構(gòu)建塊是SecurityContext,它可能包含一個Authentication(當用戶登錄時,它是一個Authentication顯式的authenticated)。您始終可以SecurityContext通過靜態(tài)便捷方法訪問和SecurityContextHolder操作ThreadLocal. 以下示例顯示了這種安排:

SecurityContext context = SecurityContextHolder.getContext();
Authentication authentication = context.getAuthentication();
assert(authentication.isAuthenticated);

用戶應(yīng)用程序代碼執(zhí)行此操作并不常見,但如果您需要編寫自定義身份驗證過濾器(盡管即使這樣,Spring Security 中也有一些基類可供您使用,以便您可以避免需要使用SecurityContextHolder)。

如果您需要訪問 Web 端點中當前經(jīng)過身份驗證的用戶,可以在 a 中使用方法參數(shù)@RequestMapping,如下所示:

@RequestMapping("/foo")
public String foo(@AuthenticationPrincipal User user) {
... // do stuff with user
}

此注解將電流Authentication拉出SecurityContext并調(diào)用其上的getPrincipal()方法以產(chǎn)生方法參數(shù)。Principalin an的類型Authentication取決于AuthenticationManager用于驗證身份驗證的類型,因此這可能是一個有用的小技巧,可以獲取對用戶數(shù)據(jù)的類型安全引用。

如果使用 Spring Security,則PrincipalfromHttpServletRequest是 type Authentication,所以你也可以直接使用它:

@RequestMapping("/foo")
public String foo(Principal principal) {
Authentication authentication = (Authentication) principal;
User = (User) authentication.getPrincipal();
... // do stuff with user
}

如果您需要編寫在不使用 Spring Security 時工作的代碼,這有時會很有用(您需要在加載Authentication類時更加防御)。

異步處理安全方法

由于SecurityContext是線程綁定的,如果您想要執(zhí)行任何調(diào)用安全方法的后臺處理(例如, with @Async),您需要確保傳播上下文。這歸結(jié)為使用在后臺執(zhí)行SecurityContext的任務(wù)(Runnable、等)包裝 。CallableSpring Security 提供了一些幫助程序來簡化此操作,例如 和 的包裝Runnable器Callable。要傳播SecurityContextto@Async方法,您需要提供AsyncConfigurer并確保其Executor類型正確:

@Configuration
public class ApplicationConfiguration extends AsyncConfigurerSupport {

@Override
public Executor getAsyncExecutor() {
return new DelegatingSecurityContextExecutorService(Executors.newFixedThreadPool(5));
}

}
責(zé)任編輯:武曉燕 來源: 今日頭條
相關(guān)推薦

2022-03-04 23:55:33

安全架構(gòu)結(jié)構(gòu)

2009-07-20 15:57:42

ASP.NET安全架構(gòu)

2020-04-15 09:41:50

多云云安全安全云遷移

2022-07-29 09:00:00

SaaS安全認證

2023-06-28 07:16:11

2022-03-24 12:03:40

網(wǎng)絡(luò)安全零信任

2015-01-04 16:59:37

CISSP安全架構(gòu)系統(tǒng)保護

2013-04-24 14:53:56

2015-11-26 17:17:36

2022-06-28 15:04:32

容器Docker

2022-06-28 15:06:35

容器Spring

2022-01-05 22:43:55

云安全架構(gòu)數(shù)據(jù)

2010-03-24 11:38:10

2022-02-03 10:30:38

物聯(lián)網(wǎng)安全架構(gòu)

2013-08-14 09:18:42

2012-08-17 10:55:21

IBMdW

2024-06-28 10:34:00

2022-08-22 11:45:59

架構(gòu)技術(shù)

2021-05-31 18:25:02

云安全架構(gòu)云安全安全架構(gòu)

2022-06-01 11:14:22

云原生安全架構(gòu)設(shè)計
點贊
收藏

51CTO技術(shù)棧公眾號

91精品国产精品| 日韩av在线免费| 小泽玛利亚av在线| 欧美一级免费片| 日韩精品一级中文字幕精品视频免费观看 | 又色又爽又黄无遮挡的免费视频| 国产精品7m凸凹视频分类| 精品少妇一区二区三区视频免付费 | 亚洲免费影视| 久久亚洲精品视频| 北岛玲一区二区| 91麻豆精品一二三区在线| 亚洲一区二区三区不卡国产欧美| 日本一区视频在线| а√天堂资源在线| 青青草97国产精品免费观看无弹窗版| 久久91亚洲精品中文字幕奶水| 中国毛片在线观看| 91久久精品无嫩草影院| 欧美优质美女网站| 每日在线观看av| 欧美猛烈性xbxbxbxb| 99精品国产91久久久久久| 91精品免费视频| 无码人妻av免费一区二区三区| 欧美精品三级| 久久天天躁日日躁| 黄色片在线观看免费| 全球av集中精品导航福利| 538prom精品视频线放| 欧美成人xxxxx| www免费在线观看| 国产精品视频一二三| 久久精品午夜一区二区福利| 精品国产av鲁一鲁一区| 美女在线视频一区| 69视频在线播放| 欧美日韩中文视频| 欧美另类女人| 久久久精品久久久| 一二三四在线观看视频| 成人情趣视频| 中文字幕日韩在线视频| 精品无码在线观看| 久久不见久久见中文字幕免费| 亚洲精品一线二线三线| 国产欧美视频一区| 日韩三级av高清片| 欧美一级理论片| 伊人精品视频在线观看| 伊人亚洲精品| 欧美一卡二卡三卡| 一卡二卡三卡四卡五卡| 精品中文在线| 日韩视频免费直播| 亚洲AV成人精品| 亚洲三级av| 日韩精品一区二区三区中文不卡 | 日韩欧美在线播放视频| 欧美激情护士| 欧美性猛交xxxx免费看久久久| 国产女大学生av| 天堂av中文在线观看| 欧美性生交xxxxx久久久| 自慰无码一区二区三区| 一根才成人网| 欧美探花视频资源| 国产欧美一区二| 最新精品在线| 日韩国产在线看| 精品人妻一区二区三区蜜桃视频 | 蜜桃网站在线观看| 国产在线xxx| 欧美日韩亚洲视频| 熟妇人妻无乱码中文字幕真矢织江| 88xx成人免费观看视频库 | 91蝌蚪视频在线观看| 免费成人黄色网| 91精品国产免费久久综合| 欧美xxxx日本和非洲| 欧美日韩导航| 中文字幕亚洲综合久久| 欧美国产在线看| 羞羞答答国产精品www一本| 国产精品国产亚洲伊人久久| 国产精品久久婷婷| 不卡影院免费观看| 午夜精品一区二区三区四区 | 亚洲va天堂va国产va久| 欧美综合在线观看视频| 国产aa精品| 国产丝袜一区二区| 永久av免费网站| 日韩视频久久| 国产一区二区丝袜| 色婷婷视频在线| 中文乱码免费一区二区| 成人av在线不卡| 日韩和的一区二在线| 日韩欧美自拍偷拍| 蜜桃无码一区二区三区| 国产精品99一区二区三| 69久久夜色精品国产69乱青草| 亚洲网站免费观看| 92国产精品观看| 在线观看18视频网站| 桃花岛tv亚洲品质| 欧美成人官网二区| 污污视频网站在线免费观看| av成人毛片| 亚洲xxxxx电影| 国产一级免费在线观看| 亚洲一区二区三区爽爽爽爽爽| 青青草精品视频在线观看| 亚洲精品一区在线| 影音先锋欧美精品| 国产精品第9页| 国产九色精品成人porny| 青青草原亚洲| 国产拍在线视频| 日韩三级电影网址| www.97视频| 免费观看久久久4p| 欧美精品一区二区三区在线看午夜 | 亚洲人在线观看视频| 亚洲一区二区五区| 亚洲天堂伊人网| 日韩电影免费网站| 日本久久久久亚洲中字幕| 男人天堂手机在线观看| 亚洲免费观看高清完整| 日韩精品视频一二三| 精品免费视频| 国产91精品最新在线播放| 三级小视频在线观看| 亚洲精品你懂的| 一区二区三区国产免费| 中文字幕中文字幕精品| 欧美专区日韩视频| 欧美一级淫片aaaaaa| 亚洲国产视频直播| 国产精品久久久久久亚洲av| 欧美一区视频| 亚洲一区二区三区毛片 | 午夜精品美女自拍福到在线| 亚洲av永久纯肉无码精品动漫| 自拍偷拍国产亚洲| 亚洲一二三不卡| 一区二区三区毛片免费| 91精品视频网站| 国产原创精品视频| 日韩一级黄色片| 九九热国产精品视频| 国产一区二区美女诱惑| 免费观看中文字幕| 亚洲亚洲一区二区三区| 高清一区二区三区四区五区| 日本韩国免费观看| 日韩欧美亚洲国产一区| 午夜时刻免费入口| 久久精品久久99精品久久| 中文字幕一区综合| 国产精品亚洲一区二区在线观看| 欧美久久精品午夜青青大伊人 | 国产网站欧美日韩免费精品在线观看| 免费看日韩毛片| 久久综合九色综合欧美就去吻| 男人操女人免费软件| 国产精品密蕾丝视频下载| 国产精品久久久久久久美男| 一本一道波多野毛片中文在线| 欧美精品久久一区| 国产在线观看免费av| 91网站在线播放| 免费看国产黄色片| 一区二区三区四区日韩| 精品一区二区三区自拍图片区| 性欧美hd调教| 免费91麻豆精品国产自产在线观看| 俄罗斯嫩小性bbwbbw| 色噜噜久久综合| 卡通动漫亚洲综合| 99re热视频精品| 亚洲人辣妹窥探嘘嘘| 欧美一区成人| 蜜桃av色综合| 成人自拍视频| 91超碰中文字幕久久精品| 91se在线| 亚洲精品国产免费| 亚洲一级黄色大片| 午夜视频在线观看一区二区三区 | 亚洲精品网站在线| 色综合一区二区三区| 久久久久亚洲av片无码| 91原创在线视频| 国产大片一区二区三区| 国产一区二区三区久久| 在线观看成人免费| 亚洲福利网站| 国产精品视频500部| 欧美成人xxxx| 日韩av免费在线看| 免费影视亚洲| www.亚洲一区| 欧美理论在线观看| 精品精品国产高清一毛片一天堂| 国产精品高清无码| 精品久久香蕉国产线看观看亚洲| 三级黄色免费观看| www国产精品av| 中文字幕无人区二| 黄网站免费久久| 不卡av免费在线| 国产精品免费看| h无码动漫在线观看| 久久中文视频| 色99中文字幕| 美女毛片一区二区三区四区最新中文字幕亚洲 | 在线观看国产一区| 国产一区二区三区不卡视频网站 | 成人精品亚洲| 欧美久久久久久| 欧美一级色片| 国产精品日韩一区二区| 91精品国产自产在线丝袜啪| 96pao国产成视频永久免费| av久久网站| 国产经典一区二区| 女生影院久久| 欧美亚洲在线播放| 黄色激情在线播放| 久久久久久久久91| 草莓视频丝瓜在线观看丝瓜18| 久热99视频在线观看| 日本在线免费看| 中文字幕在线观看日韩| 成人在线视频成人| 亚洲天堂网站在线观看视频| 国产永久免费高清在线观看 | 欧美日韩免费不卡视频一区二区三区| 青草视频在线观看免费| 欧美日韩裸体免费视频| 五月婷婷中文字幕| 色素色在线综合| 日韩欧美国产另类| 欧美色电影在线| 亚洲视频在线免费播放| 欧美日韩国产经典色站一区二区三区| 中文字幕一区二区三区免费看| 在线精品视频免费播放| 姑娘第5集在线观看免费好剧| 欧美在线视频不卡| 中文天堂在线资源| 欧美疯狂做受xxxx富婆| 国产免费一区二区三区最新不卡| 91精品欧美综合在线观看最新| 国产精品午夜福利| 日韩欧美国产高清| 日韩一区二区三区不卡| 亚洲男人天堂2024| av基地在线| 欧美成人午夜剧场免费观看| 麻豆av在线播放| 911国产网站尤物在线观看| 国产精品av一区二区三区 | 天堂av免费在线观看| 制服丝袜中文字幕一区| 亚洲av无码片一区二区三区 | 天天在线视频色| 久久91精品国产91久久久| 国产资源在线观看入口av| 国产mv免费观看入口亚洲| 色综合视频一区二区三区日韩| 91中文字精品一区二区| 日韩精品免费一区二区夜夜嗨 | 欧美片第1页综合| 阿v天堂2017| 蜜臀av一区二区三区| 在线播放国产视频| 2017欧美狠狠色| 欧美性x x x| 黄色成人av网| 国产乱码久久久| 亚洲精品99久久久久中文字幕| 成人一区二区不卡免费| 欧美国产高跟鞋裸体秀xxxhd| 伊人色综合一区二区三区影院视频| 国产欧美日韩中文字幕| 男人的天堂久久| 椎名由奈jux491在线播放| 亚洲激情专区| 女人高潮一级片| 99r国产精品| 欧美在线视频第一页| 欧美日韩国产影院| 国产女人高潮时对白| 亚洲美女在线观看| 日本在线观看大片免费视频| 国产91露脸中文字幕在线| 一区二区网站| 综合视频在线观看| 玖玖视频精品| 日本黄色录像片| 亚洲伦理在线精品| 国产99免费视频| 亚洲国产精品一区二区三区| 欧美jizz18性欧美| 国产999在线观看| 欧美18xxxx| 大胆欧美熟妇xx| 麻豆精品视频在线观看| 亚洲熟妇无码av| 亚洲国产精品久久不卡毛片| 亚洲一线在线观看| 国产亚洲精品一区二区| 久草在线中文最新视频| 亚洲综合大片69999| 999久久久免费精品国产| 蜜臀视频一区二区三区| 91丨九色丨尤物| 日本高清www免费视频| 精品国产露脸精彩对白| 国产精品久久久久久福利| 国产精品色悠悠| 久9久9色综合| 91免费视频网站在线观看| 97精品国产露脸对白| 国产精品白浆一区二小说| 日韩欧美色综合| 性爱视频在线播放| 91系列在线观看| 亚洲综合激情在线| 涩多多在线观看| 亚洲色图欧洲色图| 国产精品呻吟久久| 久久久国产一区| 国产精区一区二区| 欧美一级黄色录像片| 国内精品伊人久久久久av影院| a一级免费视频| 91麻豆精品国产91久久久资源速度 | 久热在线中文字幕色999舞| 久久婷婷五月综合色丁香| 亚洲欧美精品在线观看| 久久精品国产在热久久| 夫妻性生活毛片| 欧美一卡二卡在线观看| 青春草视频在线| 精品国产乱码久久久久久郑州公司| 在线观看的日韩av| 欧美精品黑人猛交高潮| 色综合天天综合给合国产| 国产日韩精品在线看| 国产精品视频地址| 91精品精品| 国产人妻黑人一区二区三区| 精品福利在线观看| 男操女在线观看| 国产精品爽黄69| 一区二区三区毛片免费| 俄罗斯黄色录像| 日韩欧美亚洲一二三区| av福利精品| 96sao精品视频在线观看| 亚洲激情一区| 91麻豆制片厂| 日韩限制级电影在线观看| av成人影院在线| 日韩欧美精品一区二区| 黑人巨大精品欧美一区| 久久视频免费在线观看| 亚洲精品自产拍| 91精品一区| 久久国产亚洲精品无码| 中文一区二区在线观看| 亚洲国产精品suv| 日本一区二区三区四区视频| 色135综合网| 精品熟女一区二区三区| 欧美亚洲动漫精品| 91中文在线| 欧美三级华人主播| 国产一区二区电影| 一级黄色大片视频| 久久影视电视剧免费网站清宫辞电视| 国产精品对白| 999久久久精品视频| 精品久久久久久亚洲国产300| h网站在线免费观看| 国产精品视频一区二区三区经| 日韩国产高清在线| 精品无码黑人又粗又大又长| 国产亚洲精品久久久久动| 日本少妇精品亚洲第一区| 激情视频综合网| 亚洲一区二区三区视频在线| 亚洲免费视频一区二区三区| 精品国产_亚洲人成在线| 狠狠色综合色综合网络|