日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[Abp vNext 源码分析] - 19. 多租户

發布時間:2023/12/4 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Abp vNext 源码分析] - 19. 多租户 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、簡介

ABP vNext 原生支持多租戶體系,可以讓開發人員快速地基于框架開發 SaaS 系統。ABP vNext 實現多租戶的思路也非常簡單,通過一個?TenantId?來分割各個租戶的數據,并且在查詢的時候使用統一的全局過濾器(類似于軟刪除)來篩選數據。

關于多租戶體系的東西,基本定義與核心邏輯存放在?Volo.ABP.MultiTenancy?內部。針對 ASP.NET Core MVC 的集成則是由?Volo.ABP.AspNetCore.MultiTenancy?項目實現的,針對多租戶的解析都在這個項目內部。租戶數據的存儲和管理都由?Volo.ABP.TenantManagement?模塊提供,開發人員也可以直接使用該項目快速實現多租戶功能。

二、源碼分析

2.1 啟動模塊

AbpMultiTenancyModule?模塊是啟用整個多租戶功能的核心模塊,內部只進行了一個動作,就是從配置類當中讀取多租戶的基本信息,以 JSON Provider 為例,就需要在?appsettings.json?里面有?Tenants?節。

Copy"Tenants": [{"Id": "446a5211-3d72-4339-9adc-845151f8ada0","Name": "tenant1"},{"Id": "25388015-ef1c-4355-9c18-f6b6ddbaf89d","Name": "tenant2","ConnectionStrings": {"Default": "...write tenant2's db connection string here..."}}]

2.1.1 默認租戶來源

這里的數據將會作為默認租戶來源,也就是說在確認當前租戶的時候,會從這里面的數據與要登錄的租戶進行比較,如果不存在則不允許進行操作。

Copypublic interface ITenantStore {Task<TenantConfiguration> FindAsync(string name);Task<TenantConfiguration> FindAsync(Guid id);TenantConfiguration Find(string name);TenantConfiguration Find(Guid id); }

默認的存儲實現:

Copy[Dependency(TryRegister = true)] public class DefaultTenantStore : ITenantStore, ITransientDependency {// 直接從 Options 當中獲取租戶數據。private readonly AbpDefaultTenantStoreOptions _options;public DefaultTenantStore(IOptionsSnapshot<AbpDefaultTenantStoreOptions> options){_options = options.Value;}public Task<TenantConfiguration> FindAsync(string name){return Task.FromResult(Find(name));}public Task<TenantConfiguration> FindAsync(Guid id){return Task.FromResult(Find(id));}public TenantConfiguration Find(string name){return _options.Tenants?.FirstOrDefault(t => t.Name == name);}public TenantConfiguration Find(Guid id){return _options.Tenants?.FirstOrDefault(t => t.Id == id);} }

除了從配置文件當中讀取租戶信息以外,開發人員也可以自己實現?ITenantStore?接口,比如說像?TenantManagement?一樣,將租戶信息存儲到數據庫當中。

2.1.2 基于數據庫的租戶存儲

話接上文,我們說過在?Volo.ABP.TenantManagement?模塊內部有提供另一種?ITenantStore?接口的實現,這個類型叫做?TenantStore,內部邏輯也很簡單,就是從倉儲當中查找租戶數據。

Copypublic class TenantStore : ITenantStore, ITransientDependency {private readonly ITenantRepository _tenantRepository;private readonly IObjectMapper<AbpTenantManagementDomainModule> _objectMapper;private readonly ICurrentTenant _currentTenant;public TenantStore(ITenantRepository tenantRepository, IObjectMapper<AbpTenantManagementDomainModule> objectMapper,ICurrentTenant currentTenant){_tenantRepository = tenantRepository;_objectMapper = objectMapper;_currentTenant = currentTenant;}public async Task<TenantConfiguration> FindAsync(string name){// 變更當前租戶為租主。using (_currentTenant.Change(null)) //TODO: No need this if we can implement to define host side (or tenant-independent) entities!{// 通過倉儲查詢租戶是否存在。var tenant = await _tenantRepository.FindByNameAsync(name);if (tenant == null){return null;}// 將查詢到的信息轉換為核心庫定義的租戶信息。return _objectMapper.Map<Tenant, TenantConfiguration>(tenant);}}// ... 其他的代碼已經省略。 }

可以看到,最后也是返回的一個?TenantConfiguration?類型。關于這個類型,是 ABP 在多租戶核心庫定義的一個基本類型之一,主要是用于規定持久化一個租戶信息需要包含的屬性。

Copy[Serializable] public class TenantConfiguration {// 租戶的 Guid。public Guid Id { get; set; }// 租戶的名稱。public string Name { get; set; }// 租戶對應的數據庫連接字符串。public ConnectionStrings ConnectionStrings { get; set; }public TenantConfiguration(){}public TenantConfiguration(Guid id, [NotNull] string name){Check.NotNull(name, nameof(name));Id = id;Name = name;ConnectionStrings = new ConnectionStrings();} }

2.2 租戶的解析

ABP vNext 如果要判斷當前的租戶是誰,則是通過?AbpTenantResolveOptions?提供的一組?ITenantResolveContributor?進行處理的。

Copypublic class AbpTenantResolveOptions {// 會使用到的這組解析對象。[NotNull]public List<ITenantResolveContributor> TenantResolvers { get; }public AbpTenantResolveOptions(){TenantResolvers = new List<ITenantResolveContributor>{// 默認的解析對象,會通過 Token 內字段解析當前租戶。new CurrentUserTenantResolveContributor()};} }

這里的設計與權限一樣,都是由一組?解析對象(解析器)?進行處理,在上層開放的入口只有一個?ITenantResolver?,內部通過?foreach?執行這組解析對象的?Resolve()?方法。

下面就是我們?ITenantResolver?的默認實現?TenantResolver,你可以在任何時候調用它。比如說你在想要獲得當前租戶 Id 的時候。不過一般不推薦這樣做,因為 ABP 已經給我們提供了?MultiTenancyMiddleware?中間件。

也就是說,在每次請求的時候,都會將這個?Id?通過?ICurrentTenant.Change()?進行變更,那么在這個請求執行完成之前,通過?ICurrentTenant?取得的?Id?都會是解析器解析出來的 Id。

Copypublic class TenantResolver : ITenantResolver, ITransientDependency {private readonly IServiceProvider _serviceProvider;private readonly AbpTenantResolveOptions _options;public TenantResolver(IOptions<AbpTenantResolveOptions> options, IServiceProvider serviceProvider){_serviceProvider = serviceProvider;_options = options.Value;}public TenantResolveResult ResolveTenantIdOrName(){var result = new TenantResolveResult();using (var serviceScope = _serviceProvider.CreateScope()){// 創建一個解析上下文,用于存儲解析器的租戶 Id 解析結果。var context = new TenantResolveContext(serviceScope.ServiceProvider);// 遍歷執行解析器。foreach (var tenantResolver in _options.TenantResolvers){tenantResolver.Resolve(context);result.AppliedResolvers.Add(tenantResolver.Name);// 如果有某個解析器為上下文設置了值,則跳出。if (context.HasResolvedTenantOrHost()){result.TenantIdOrName = context.TenantIdOrName;break;}}}return result;} }

2.2.1 默認的解析對象

如果不使用?Volo.Abp.AspNetCore.MultiTenancy?模塊,ABP vNext 會調用?CurrentUserTenantResolveContributor?解析當前操作的租戶。

Copypublic class CurrentUserTenantResolveContributor : TenantResolveContributorBase {public const string ContributorName = "CurrentUser";public override string Name => ContributorName;public override void Resolve(ITenantResolveContext context){// 從 Token 當中獲取當前登錄用戶的信息。var currentUser = context.ServiceProvider.GetRequiredService<ICurrentUser>();if (currentUser.IsAuthenticated != true){return;}// 設置解析上下文,確認當前的租戶 Id。context.Handled = true;context.TenantIdOrName = currentUser.TenantId?.ToString();} }

在這里可以看到,如果從 Token 當中解析到了租戶 Id,會將這個 Id 傳遞給?解析上下文。這個上下文在最開始已經遇到過了,如果 ABP vNext 在解析的時候發現租戶 Id 被確認了,就不會執行剩下的解析器。

2.2.2 ABP 提供的其他解析器

ABP 在?Volo.Abp.AspNetCore.MultiTenancy?模塊當中還提供了其他幾種解析器,他們的作用分別如下。

解析器類型作用優先級
QueryStringTenantResolveContributor通過 Query String 的?__tenant?參數確認租戶。2
RouteTenantResolveContributor通過路由判斷當前租戶。3
HeaderTenantResolveContributor通過 Header 里面的?__tenant?確認租戶。4
CookieTenantResolveContributor通過攜帶的 Cookie 確認租戶。5
DomainTenantResolveContributor二級域名解析器,通過二級域名確定租戶。第二

2.2.3 域名解析器

這里比較有意思的是?DomainTenantResolveContributor,開發人員可以通過?AbpTenantResolveOptions.AddDomainTenantResolver()?方法添加這個解析器。 域名解析器會通過解析二級域名來匹配對應的租戶,例如我針對租戶 A 分配了一個二級域名?http://a.system.com,那么這個?a?就會被作為租戶名稱解析出來,最后傳遞給?ITenantResolver?解析器作為結果。

注意:

在使用 Header 作為租戶信息提供者的時候,開發人員使用的是?NGINX 作為反向代理服務器?時,需要在對應的 config 文件內部配置?underscores_in_headers on;?選項。否則 ABP 所需要的?__tenantId?將會被過濾掉,或者你可以指定一個沒有下劃線的 Key。

域名解析器的詳細代碼解釋:

Copypublic class DomainTenantResolveContributor : HttpTenantResolveContributorBase {public const string ContributorName = "Domain";public override string Name => ContributorName;private static readonly string[] ProtocolPrefixes = { "http://", "https://" };private readonly string _domainFormat;// 使用指定的格式來確定租戶前綴,例如 “{0}.abp.io”。public DomainTenantResolveContributor(string domainFormat){_domainFormat = domainFormat.RemovePreFix(ProtocolPrefixes);}protected override string GetTenantIdOrNameFromHttpContextOrNull(ITenantResolveContext context, HttpContext httpContext){// 如果 Host 值為空,則不進行任何操作。if (httpContext.Request?.Host == null){return null;}// 解析具體的域名信息,并進行匹配。var hostName = httpContext.Request.Host.Host.RemovePreFix(ProtocolPrefixes);// 這里的 FormattedStringValueExtracter 類型是 ABP 自己實現的一個格式化解析器。var extractResult = FormattedStringValueExtracter.Extract(hostName, _domainFormat, ignoreCase: true);context.Handled = true;if (!extractResult.IsMatch){return null;}return extractResult.Matches[0].Value;} }

從上述代碼可以知道,域名解析器是基于?HttpTenantResolveContributorBase?基類進行處理的,這個抽象基類會取得當前請求的一個?HttpContext,將這個傳遞與解析上下文一起傳遞給子類實現,由子類實現負責具體的解析邏輯。

Copypublic abstract class HttpTenantResolveContributorBase : TenantResolveContributorBase {public override void Resolve(ITenantResolveContext context){// 獲取當前請求的上下文。var httpContext = context.GetHttpContext();if (httpContext == null){return;}try{ResolveFromHttpContext(context, httpContext);}catch (Exception e){context.ServiceProvider.GetRequiredService<ILogger<HttpTenantResolveContributorBase>>().LogWarning(e.ToString());}}protected virtual void ResolveFromHttpContext(ITenantResolveContext context, HttpContext httpContext){// 調用抽象方法,獲取具體的租戶 Id 或名稱。var tenantIdOrName = GetTenantIdOrNameFromHttpContextOrNull(context, httpContext);if (!tenantIdOrName.IsNullOrEmpty()){// 獲得到租戶標識之后,填充到解析上下文。context.TenantIdOrName = tenantIdOrName;}}protected abstract string GetTenantIdOrNameFromHttpContextOrNull([NotNull] ITenantResolveContext context, [NotNull] HttpContext httpContext); }

2.3 租戶信息的傳遞

租戶解析器通過一系列的解析對象,獲取到了租戶或租戶 Id 之后,會將這些數據給哪些對象呢?或者說,ABP 在什么地方調用了?租戶解析器,答案就是?中間件。

在?Volo.ABP.AspNetCore.MultiTenancy?模塊的內部,提供了一個?MultiTenancyMiddleware?中間件。

開發人員如果需要使用 ASP.NET Core 的多租戶相關功能,也可以引入該模塊。并且在模塊的?OnApplicationInitialization()?方法當中,使用?IApplicationBuilder.UseMultiTenancy()?進行啟用。

這里在啟用的時候,需要注意中間件的順序和位置,不要放到最末尾進行處理。

Copypublic class MultiTenancyMiddleware : IMiddleware, ITransientDependency {private readonly ITenantResolver _tenantResolver;private readonly ITenantStore _tenantStore;private readonly ICurrentTenant _currentTenant;private readonly ITenantResolveResultAccessor _tenantResolveResultAccessor;public MultiTenancyMiddleware(ITenantResolver tenantResolver, ITenantStore tenantStore, ICurrentTenant currentTenant, ITenantResolveResultAccessor tenantResolveResultAccessor){_tenantResolver = tenantResolver;_tenantStore = tenantStore;_currentTenant = currentTenant;_tenantResolveResultAccessor = tenantResolveResultAccessor;}public async Task InvokeAsync(HttpContext context, RequestDelegate next){// 通過租戶解析器,獲取當前請求的租戶信息。var resolveResult = _tenantResolver.ResolveTenantIdOrName();_tenantResolveResultAccessor.Result = resolveResult;TenantConfiguration tenant = null;// 如果當前請求是屬于租戶請求。if (resolveResult.TenantIdOrName != null){// 查詢指定的租戶 Id 或名稱是否存在,不存在則拋出異常。tenant = await FindTenantAsync(resolveResult.TenantIdOrName);if (tenant == null){//TODO: A better exception?throw new AbpException("There is no tenant with given tenant id or name: " + resolveResult.TenantIdOrName);}}// 在接下來的請求當中,將會通過 ICurrentTenant.Change() 方法變更當前租戶,直到// 請求結束。using (_currentTenant.Change(tenant?.Id, tenant?.Name)){await next(context);}}private async Task<TenantConfiguration> FindTenantAsync(string tenantIdOrName){// 如果可以格式化為 Guid ,則說明是租戶 Id。if (Guid.TryParse(tenantIdOrName, out var parsedTenantId)){return await _tenantStore.FindAsync(parsedTenantId);}else{return await _tenantStore.FindAsync(tenantIdOrName);}} }

在取得了租戶的標識(Id 或名稱)之后,將會通過?ICurrentTenant.Change()?方法變更當前租戶的信息,變更了當租戶信息以后,在程序的其他任何地方使用?ICurrentTenant.Id?取得的數據都是租戶解析器解析出來的數據。

下面就是這個當前租戶的具體實現,可以看到這里采用了一個?經典手法-嵌套。這個手法在工作單元和數據過濾器有見到過,結合?DisposeAction()?在?using?語句塊結束的時候把當前的租戶 Id 值設置為父級 Id。即在同一個語句當中,可以通過嵌套?using?語句塊來處理不同的租戶。

Copyusing(_currentTenant.Change("A")) {Logger.LogInformation(_currentTenant.Id);using(_currentTenant.Change("B")){Logger.LogInformation(_currentTenant.Id);} }

具體的實現代碼,這里的?ICurrentTenantAccessor?內部實現就是一個?AsyncLocal<BasicTenantInfo>?,用于在一個異步請求內部進行數據傳遞。

Copypublic class CurrentTenant : ICurrentTenant, ITransientDependency {public virtual bool IsAvailable => Id.HasValue;public virtual Guid? Id => _currentTenantAccessor.Current?.TenantId;public string Name => _currentTenantAccessor.Current?.Name;private readonly ICurrentTenantAccessor _currentTenantAccessor;public CurrentTenant(ICurrentTenantAccessor currentTenantAccessor){_currentTenantAccessor = currentTenantAccessor;}public IDisposable Change(Guid? id, string name = null){return SetCurrent(id, name);}private IDisposable SetCurrent(Guid? tenantId, string name = null){var parentScope = _currentTenantAccessor.Current;_currentTenantAccessor.Current = new BasicTenantInfo(tenantId, name);return new DisposeAction(() =>{_currentTenantAccessor.Current = parentScope;});} }

這里的?BasicTenantInfo?與?TenantConfiguraton?不同,前者僅用于在程序當中傳遞用戶的基本信息,而后者是用于定于持久化的標準模型。

2.4 租戶的使用

2.4.1 數據庫過濾

租戶的核心作用就是隔離不同客戶的數據,關于過濾的基本邏輯則是存放在?AbpDbContext<TDbContext>?的。從下面的代碼可以看到,在使用的時候會從注入一個?ICurrentTenant?接口,這個接口可以獲得從租戶解析器里面取得的租戶 Id 信息。并且還有一個?IsMultiTenantFilterEnabled()?方法來判定當前?是否應用租戶過濾器。

Copypublic abstract class AbpDbContext<TDbContext> : DbContext, IEfCoreDbContext, ITransientDependencywhere TDbContext : DbContext {protected virtual Guid? CurrentTenantId => CurrentTenant?.Id;protected virtual bool IsMultiTenantFilterEnabled => DataFilter?.IsEnabled<IMultiTenant>() ?? false;// ... 其他的代碼。public ICurrentTenant CurrentTenant { get; set; }// ... 其他的代碼。protected virtual Expression<Func<TEntity, bool>> CreateFilterExpression<TEntity>() where TEntity : class{// 定義一個 Lambda 表達式。Expression<Func<TEntity, bool>> expression = null;// 如果聚合根/實體實現了軟刪除接口,則構建一個軟刪除過濾器。if (typeof(ISoftDelete).IsAssignableFrom(typeof(TEntity))){expression = e => !IsSoftDeleteFilterEnabled || !EF.Property<bool>(e, "IsDeleted");}// 如果聚合根/實體實現了多租戶接口,則構建一個多租戶過濾器。if (typeof(IMultiTenant).IsAssignableFrom(typeof(TEntity))){// 篩選 TenantId 為 CurrentTenantId 的數據。Expression<Func<TEntity, bool>> multiTenantFilter = e => !IsMultiTenantFilterEnabled || EF.Property<Guid>(e, "TenantId") == CurrentTenantId;expression = expression == null ? multiTenantFilter : CombineExpressions(expression, multiTenantFilter);}return expression;}// ... 其他的代碼。 }

2.4.2 種子數據構建

在?Volo.ABP.TenantManagement?模塊當中,如果用戶創建了一個租戶,ABP 不只是在租戶表插入一條新數據而已。它還會設置種子數據的?構造上下文,并且執行所有的?種子數據構建者(IDataSeedContributor)。

Copy[Authorize(TenantManagementPermissions.Tenants.Create)] public virtual async Task<TenantDto> CreateAsync(TenantCreateDto input) {var tenant = await TenantManager.CreateAsync(input.Name);await TenantRepository.InsertAsync(tenant);using (CurrentTenant.Change(tenant.Id, tenant.Name)){//TODO: Handle database creation?//TODO: Set admin email & password..?await DataSeeder.SeedAsync(tenant.Id);}return ObjectMapper.Map<Tenant, TenantDto>(tenant); }

這些構建者當中,就包括租戶的超級管理員(admin)和角色構建,以及針對超級管理員角色進行權限賦值操作。

這里需要注意第二點,如果開發人員沒有指定超級管理員用戶和密碼,那么還是會使用默認密碼為租戶生成超級管理員,具體原因看如下代碼。

Copypublic class IdentityDataSeedContributor : IDataSeedContributor, ITransientDependency {private readonly IIdentityDataSeeder _identityDataSeeder;public IdentityDataSeedContributor(IIdentityDataSeeder identityDataSeeder){_identityDataSeeder = identityDataSeeder;}public Task SeedAsync(DataSeedContext context){return _identityDataSeeder.SeedAsync(context["AdminEmail"] as string ?? "admin@abp.io",context["AdminPassword"] as string ?? "1q2w3E*",context.TenantId);} }

所以開發人員要實現為不同租戶?生成隨機密碼,那么就不能夠使用?TenantManagement?提供的創建方法,而是需要自己編寫一個應用服務進行處理。

2.4.3 權限的控制

如果開發人員使用了 ABP 提供的?Volo.Abp.PermissionManagement?模塊,就會看到在它的種子數據構造者當中會對權限進行判定。因為有一些?超級權限?是租主才能夠授予的,例如租戶的增加、刪除、修改等,這些超級權限在定義的時候就需要說明是否是數據租主獨有的。

關于這點,可以參考租戶管理模塊在權限定義時,傳遞的?MultiTenancySides.Host?參數。

Copypublic class AbpTenantManagementPermissionDefinitionProvider : PermissionDefinitionProvider {public override void Define(IPermissionDefinitionContext context){var tenantManagementGroup = context.AddGroup(TenantManagementPermissions.GroupName, L("Permission:TenantManagement"));var tenantsPermission = tenantManagementGroup.AddPermission(TenantManagementPermissions.Tenants.Default, L("Permission:TenantManagement"), multiTenancySide: MultiTenancySides.Host);tenantsPermission.AddChild(TenantManagementPermissions.Tenants.Create, L("Permission:Create"), multiTenancySide: MultiTenancySides.Host);tenantsPermission.AddChild(TenantManagementPermissions.Tenants.Update, L("Permission:Edit"), multiTenancySide: MultiTenancySides.Host);tenantsPermission.AddChild(TenantManagementPermissions.Tenants.Delete, L("Permission:Delete"), multiTenancySide: MultiTenancySides.Host);tenantsPermission.AddChild(TenantManagementPermissions.Tenants.ManageFeatures, L("Permission:ManageFeatures"), multiTenancySide: MultiTenancySides.Host);tenantsPermission.AddChild(TenantManagementPermissions.Tenants.ManageConnectionStrings, L("Permission:ManageConnectionStrings"), multiTenancySide: MultiTenancySides.Host);}private static LocalizableString L(string name){return LocalizableString.Create<AbpTenantManagementResource>(name);} }

下面是權限種子數據構造者的代碼:

Copypublic class PermissionDataSeedContributor : IDataSeedContributor, ITransientDependency {protected ICurrentTenant CurrentTenant { get; }protected IPermissionDefinitionManager PermissionDefinitionManager { get; }protected IPermissionDataSeeder PermissionDataSeeder { get; }public PermissionDataSeedContributor(IPermissionDefinitionManager permissionDefinitionManager,IPermissionDataSeeder permissionDataSeeder,ICurrentTenant currentTenant){PermissionDefinitionManager = permissionDefinitionManager;PermissionDataSeeder = permissionDataSeeder;CurrentTenant = currentTenant;}public virtual Task SeedAsync(DataSeedContext context){// 通過 GetMultiTenancySide() 方法判斷當前執行// 種子構造者的租戶情況,是租主還是租戶。var multiTenancySide = CurrentTenant.GetMultiTenancySide();// 根據條件篩選權限。var permissionNames = PermissionDefinitionManager.GetPermissions().Where(p => p.MultiTenancySide.HasFlag(multiTenancySide)).Select(p => p.Name).ToArray();// 將權限授予具體租戶的角色。return PermissionDataSeeder.SeedAsync(RolePermissionValueProvider.ProviderName,"admin",permissionNames,context.TenantId);} }

而 ABP 在判斷當前是租主還是租戶的方法也很簡單,如果當前租戶 Id 為 NULL 則說明是租主,如果不為空則說明是具體租戶。

Copypublic static MultiTenancySides GetMultiTenancySide(this ICurrentTenant currentTenant) {return currentTenant.Id.HasValue? MultiTenancySides.Tenant: MultiTenancySides.Host; }

2.4.4 租戶的獨立設置

關于這塊的內容,可以參考之前的?這篇文章?,ABP 也為我們提供了各個租戶獨立的自定義參數在,這塊功能是由?TenantSettingManagementProvider?實現的,只需要在設置參數值的時候提供租戶的?ProviderName?即可。

例如:

CopysettingManager.SetAsync("WeChatIsOpen", "true", TenantSettingValueProvider.ProviderName, tenantId.ToString(), false);

總結

以上是生活随笔為你收集整理的[Abp vNext 源码分析] - 19. 多租户的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

看av免费 | 国产美女精品视频免费观看 | 天天干天天天 | 亚洲综合在线视频 | 99在线精品视频观看 | 久久婷婷精品视频 | 日本公妇色中文字幕 | 黄色网址国产 | 欧美在线久久 | 日本韩国精品一区二区在线观看 | 久久伊人精品天天 | 免费a视频在线观看 | 黄色免费电影网站 | 2021国产在线| 午夜资源站 | 精品久久久久久久久久久久久久久久久久 | 日韩二区在线播放 | 欧美亚洲国产精品久久高清浪潮 | 免费亚洲电影 | 免费色网| 久久久香蕉视频 | 99国产精品视频免费观看一公开 | 黄色av成人在线观看 | 日韩有码在线观看视频 | 日韩三级.com | 欧美色黄| 久久久精品 一区二区三区 国产99视频在线观看 | 久久一精品| 国产专区视频在线观看 | 亚洲黄色在线播放 | 亚洲电影免费 | 久草在线免费看视频 | 国模精品在线 | 一级黄色片在线观看 | 国产色拍拍拍拍在线精品 | 在线观看日韩精品 | 欧美性精品 | 在线免费观看国产视频 | 欧美日本啪啪无遮挡网站 | 亚洲人成在线观看 | japanesefreesex中国少妇 | 久久综合九色综合久久久精品综合 | 久久成人精品电影 | 一本—道久久a久久精品蜜桃 | 国产精品成人一区 | 九九交易行官网 | 天天综合网在线观看 | 欧美精彩视频在线观看 | 亚洲爱视频 | 亚洲综合色站 | 亚洲欧美日韩精品久久奇米一区 | 日本精品在线看 | 91视频高清 | 一区二区中文字幕在线观看 | 久久夜色精品亚洲噜噜国4 午夜视频在线观看欧美 | 国产高清在线一区 | 日韩高清不卡在线 | 国产小视频在线免费观看 | 91精品人成在线观看 | 亚州国产精品视频 | 天天操天天射天天舔 | 免费观看视频黄 | 国产第一页福利影院 | 国产视频一区在线免费观看 | 亚洲黄色三级 | 永久免费观看视频 | 99精彩视频在线观看免费 | 最近免费中文视频 | 欧美色图亚洲图片 | 久久网站最新地址 | 日本韩国中文字幕 | 99国产成+人+综合+亚洲 欧美 | 国产精品一区二区无线 | 日韩精品2区| wwwww.国产 | 香蕉视频在线播放 | 精品视频免费久久久看 | 亚洲少妇自拍 | 亚洲国产手机在线 | 久久久国产视频 | 精品国产免费看 | 黄色小说免费观看 | 欧美激情h | 亚洲国产精品成人va在线观看 | 天天躁天天狠天天透 | 久久国产一区 | a视频免费| 国产一区视频导航 | 中文字幕有码在线播放 | 国产精品粉嫩 | 超碰日韩在线 | 日韩精品一区二区不卡 | 日日干美女 | 国产va在线 | 国产精品美女免费视频 | 超碰成人网 | 婷婷激情在线 | 在线看一区二区 | 精品国产一区二区三区久久久蜜月 | 97精品欧美91久久久久久 | 亚洲视频久久久 | 中文字幕乱码视频 | 香蕉影视 | 超碰97免费在线 | 免费成人在线观看 | 国产黄色片一级 | 成人小视频在线播放 | 亚洲播放一区 | 999视频在线播放 | 国产精品久久久久永久免费 | 国产午夜亚洲精品 | 久久久久高清毛片一级 | 涩涩网站在线观看 | 成人在线超碰 | 国产高清久久 | 在线观看91精品国产网站 | 欧美性大胆 | 丰满少妇在线观看网站 | 久久人人爽视频 | 人人爽人人做 | 91资源在线播放 | 91av短视频| 黄色一级在线视频 | 手机成人在线电影 | 久久久久五月天 | 91麻豆免费版 | 久久久久久久电影 | 国产一区二区三区黄 | 色婷婷av国产精品 | 激情综合久久 | 色五丁香| 国产精品视频永久免费播放 | 黄色a一级视频 | 日韩精品一区二区三区不卡 | 国产成人av电影在线 | 中文字幕2021 | 成片免费观看视频 | 久久久久亚洲精品男人的天堂 | 五月开心六月婷婷 | 天天综合区| 成人一级电影在线观看 | 日日夜夜婷婷 | 成人九九视频 | 日韩综合视频在线观看 | 国产在线观看一区 | 久久99精品国产麻豆婷婷 | 日日夜夜精品网站 | 亚洲视频电影在线 | 国产精品久久久久av免费 | 99在线精品观看 | 久久9999久久| 欧美日韩国产欧美 | 国产精品不卡在线观看 | 在线观看一区 | 热久久免费视频 | 在线观看免费观看在线91 | 在线黄频 | 成人亚洲精品国产www | 欧美在线视频第一页 | 国产精品黄色 | 国产亚洲精品v | 日韩欧美成人网 | 亚洲精品乱码久久久久 | 久久性生活片 | 欧美一级片在线免费观看 | 免费在线黄色av | 激情欧美丁香 | 日韩欧美高清免费 | 亚洲精品一区二区精华 | 亚洲理论电影网 | 亚洲一区二区视频 | 亚洲在线激情 | 欧美人交a欧美精品 | 人人操日日干 | 久草在线视频中文 | 精品久久久久久久久久岛国gif | 久久大片网站 | 亚洲国产免费看 | 天堂在线免费视频 | www视频免费在线观看 | 婷婷久久久 | 国产精品1区2区在线观看 | 欧美日本三级 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 国产高清视频免费在线观看 | 国产精品九九九九九九 | 亚洲美女精品区人人人人 | 一区二区高清在线 | 黄色1级毛片 | 91桃色在线播放 | 伊人色综合网 | 日韩av不卡在线观看 | 久久久久久黄 | 久久综合毛片 | 日本高清中文字幕有码在线 | 黄色影院在线播放 | 美女久久视频 | 一区二区三区国产精品 | 日韩欧美在线不卡 | 色婷丁香 | 亚洲午夜精品久久久久久久久 | 999精品| 丁香六月五月婷婷 | 麻花传媒mv免费观看 | 日韩黄色软件 | 日韩av网站在线播放 | 国产精品第一 | 久久在现 | 久久看免费视频 | av五月婷婷 | 久久久久黄 | 久久久久久久久久久精 | 国产理伦在线 | 九九热视频在线播放 | 在线免费看黄网站 | 99久久日韩精品视频免费在线观看 | 日韩字幕 | 婷婷六月天在线 | 91在线看| 久二影院| 嫩小bbbb摸bbb摸bbb | 国产1级毛片 | 曰韩精品 | 亚洲国内精品在线 | 在线免费精品视频 | 日韩中文幕 | 500部大龄熟乱视频 欧美日本三级 | 美女在线观看网站 | 久久伊人精品一区二区三区 | 欧美91精品久久久久国产性生爱 | 国产亚洲精品日韩在线tv黄 | 麻豆国产电影 | 欧美另类v | 久久精品5| 欧美另类xxxx | 成人三级黄色 | 国产在线精品播放 | 国产伦理久久 | 欧美日韩免费在线视频 | 国产69精品久久99的直播节目 | 天天艹天天干天天 | 色婷婷视频在线 | 在线国产不卡 | 亚洲一级片av | 欧美日韩国产在线一区 | 国产高清视频在线 | 欧美日韩精品网站 | 网站免费黄| 久草视频免费在线观看 | 久久人视频 | 色久av | 亚洲一区二区三区四区在线视频 | 深夜福利视频在线观看 | 91大神免费在线观看 | 国产一区二区影院 | 国产无遮挡猛进猛出免费软件 | 国产精品久久久久久久久大全 | 久久久国内精品 | 黄网站大全 | 亚洲欧美成人网 | 一级黄色片在线免费看 | 国产中年夫妇高潮精品视频 | 国产精品2区| 欧美午夜性 | 高清久久久久久 | 久久视频在线免费观看 | 国产亚洲小视频 | 91视频在线国产 | 国产成人综合精品 | 亚洲天天看 | 亚洲国产精品成人女人久久 | 999视频在线观看 | 亚洲片在线观看 | 欧美亚洲三级 | 狠狠狠综合 | 国产视频精品免费 | 国产精品成人av久久 | 最新色站 | 免费在线一区二区 | 99视频在线免费观看 | 国产又黄又硬又爽 | 97**国产露脸精品国产 | 精品一区二三区 | 亚洲高清视频一区二区三区 | 日批视频在线播放 | 久操操 | 在线观看成人网 | 日日夜夜狠狠操 | 精品久久久久久亚洲 | 999久久久久久久久久久 | 操操操日日日干干干 | 在线视频欧美日韩 | 中文字幕人成不卡一区 | 蜜臀av一区二区 | 国产精品乱码久久久久 | 日韩videos高潮hd | 怡红院av久久久久久久 | 免费成人在线视频网站 | 国产69精品久久久久久 | 日韩精品91偷拍在线观看 | 国产一区二区三区免费观看视频 | 国产不卡视频在线 | 97精品视频在线播放 | 亚洲精品国产欧美在线观看 | 99国产高清 | 一区二区三区 中文字幕 | 黄色大片日本 | 久久免费播放视频 | 色网站黄 | 久久免费试看 | 日韩午夜电影院 | 中文字幕在线观看网站 | 成人免费视频视频在线观看 免费 | 成人午夜剧场在线观看 | 精品视频国产一区 | 国产在线不卡视频 | 国产精品大片免费观看 | 中文字幕网址 | 成人试看120秒 | 国产成人精品亚洲日本在线观看 | 国产精品videoxxxx | 日韩高清免费电影 | 国产一二三在线视频 | 国产一级大片免费看 | 中文字幕电影高清在线观看 | 国产精选在线观看 | 一区在线播放 | 免费看片日韩 | 色综合色综合久久综合频道88 | 欧美日韩在线播放一区 | 久久精品理论 | 日韩成片 | 日韩免费观看高清 | 久久精品国产99国产 | 五月激情丁香婷婷 | 2019中文字幕网站 | 最新av电影网址 | 婷婷视频 | 日韩视频a| 久久久久久久国产精品 | 日韩精品在线免费观看 | 天天综合五月天 | 在线激情影院一区 | 五月天综合网站 | av电影免费观看 | 青青草国产精品视频 | 天天操伊人 | 91免费看黄 | 天堂网一区二区 | 97操碰 | 最新中文字幕在线播放 | 亚洲欧美婷婷六月色综合 | 美女网站在线免费观看 | 日韩欧美亚州 | 蜜臀一区二区三区精品免费视频 | 国产精品激情偷乱一区二区∴ | 成人在线观看资源 | 在线看av网址 | 天天综合91 | 日本久久成人中文字幕电影 | 日日夜精品 | 欧美日韩久久一区 | 97超碰资源 | 一二三区av | 免费观看久久久 | 国产精品一区二区久久国产 | www.久久久.cum | 91免费高清在线观看 | 国产成人精品一区二区三区在线 | 伊人日日干 | 97视频在线免费播放 | 欧美日韩一区二区三区免费视频 | 精品美女久久久久久免费 | 久久深爱网| 高清中文字幕av | 午夜国产一区二区三区四区 | 国产1区2区| 天天射天天干天天插 | 久久九九国产视频 | 91精品网站在线观看 | 久久视频在线免费观看 | 91久久精| 超碰在线人人 | 久久久国产成人 | 日韩最新在线 | 日韩性xxxx | 99婷婷狠狠成为人免费视频 | 欧美日韩69 | 国产黄在线 | 亚洲精品午夜aaa久久久 | 亚洲天堂网视频 | 在线日韩中文 | 国产亚洲一级高清 | 色综合久久88色综合天天免费 | 在线日韩av | 亚洲午夜电影网 | 91精品一区二区三区蜜桃 | 懂色av一区二区三区蜜臀 | 欧美日韩国产一二 | 97国产大学生情侣白嫩酒店 | 午夜精品成人一区二区三区 | 国产麻豆精品久久一二三 | 伊人手机在线 | 久久无码av一区二区三区电影网 | 国产亚洲精品成人 | 国产精品二区在线 | 手机av片 | 黄色大片中国 | 九九免费观看全部免费视频 | 一级片视频免费观看 | 激情在线网址 | 欧美黑人性爽 | 天天综合网天天综合色 | 狠狠狠狠狠狠狠狠干 | 337p日本大胆噜噜噜噜 | 国内精品久久久精品电影院 | 五月开心网 | 久久天堂精品视频 | 国内精品一区二区 | 91成人观看 | 日本久久综合视频 | 激情欧美xxxx| 国产97在线观看 | 久久99视频免费 | 色综合中文字幕 | 91精彩视频在线观看 | 九九在线视频免费观看 | 欧美综合干 | 91亚洲精品久久久中文字幕 | 天堂av免费在线 | 欧美成年人在线视频 | 国产色视频网站2 | 九九久久婷婷 | 激情综合中文娱乐网 | www亚洲精品| 国产精品久久久久av | 97在线看 | www.888av| 天天做天天爱天天爽综合网 | 国产在线探花 | 天天天操天天天干 | 久草免费手机视频 | 黄色亚洲片 | 免费看一级黄色大全 | 波多野结衣精品 | 99人久久精品视频最新地址 | 黄色三级免费观看 | 国产精品福利在线观看 | 国产精美视频 | 91精品日韩 | 国产午夜三级一区二区三 | 成年人免费观看国产 | 91精品国产高清 | 日本性动态图 | 中文字幕精品视频 | 四虎在线永久免费观看 | 色婷婷五| 美女视频黄免费网站 | 久久综合五月婷婷 | 日韩在线视频免费播放 | 视频在线一区二区三区 | 国产精品久久99精品毛片三a | 最新av电影网站 | 国产aaa免费视频 | 97超碰.com| 九色激情网 | 日韩中文字幕亚洲一区二区va在线 | 国产黄色免费在线观看 | 色999视频| 亚洲精品美女在线观看播放 | 色综合久久久久综合体 | 丁香婷婷综合激情 | 99久久婷婷国产精品综合 | 久久久久黄 | 五月婷网站| 欧美大片第1页 | 综合天天网| 一区二区三区免费在线观看视频 | 97视频入口免费观看 | 色香蕉在线 | 97手机电影网 | 美女精品久久久 | 久久久久国产免费免费 | 久久精品国产免费观看 | 亚洲精品www久久久久久 | 亚洲精品视频免费 | 欧美一级片在线 | 免费看片网址 | 99综合电影在线视频 | 日本狠狠干 | 亚洲高清国产视频 | 亚洲国产精品成人精品 | 久久69精品| 中文字幕在线国产精品 | 曰本免费av | 欧美激情精品久久 | 欧美在线视频一区二区 | 91久久久国产精品 | 国产精品色婷婷 | 91色一区二区三区 | 天天操天天干天天操天天干 | 欧美成人精品在线 | 五月天婷婷视频 | 九九视频在线观看视频6 | 这里只有精彩视频 | 日日干天天干 | 91chinese在线 | 成人av午夜| 国产97视频 | 国产一区二区不卡视频 | 中文字幕在线免费观看 | 欧美国产日韩中文 | 日韩a欧美 | www.色com | 亚洲精品在线一区二区三区 | 9热精品| 99色免费视频 | 亚洲三级在线免费观看 | 婷婷av在线 | 亚洲成av人电影 | 国产一区二区三区在线免费观看 | 另类五月激情 | 成人在线免费视频观看 | 不卡的av在线| 成人性生活大片 | 丁香视频全集免费观看 | 青青草国产精品 | 精品字幕 | 色婷婷六月 | 久草网站| 成人一区二区三区在线 | 国产资源网站 | 久久久视频在线 | 丝袜美女在线 | 涩涩在线| a色视频| 日韩综合一区二区三区 | 国产精品久久在线 | 人人超碰人人 | 最近最新mv字幕免费观看 | 婷婷久久一区二区三区 | 精品国产黄色片 | 激情丁香月 | 一区二区三区日韩视频在线观看 | 人人爱天天操 | 久久高清 | 狠狠色噜噜狠狠 | 日韩av播放在线 | 天天玩夜夜操 | 久久久免费观看视频 | 中文字幕资源站 | 二区三区中文字幕 | 伊人国产在线播放 | 五月婷婷黄色 | 久草视频在线播放 | 亚洲美女精品 | 青草草在线 | 九九影视理伦片 | 狠狠干.com| 麻豆国产视频 | 国产福利91精品 | 国产呻吟在线 | 日本免费一二三区 | 国产色婷婷精品综合在线手机播放 | av丝袜天堂 | 久久国产精品久久精品国产演员表 | 日本久久成人中文字幕电影 | 在线观看网站你懂的 | 国产一级二级三级视频 | 日韩在线观看视频一区二区三区 | 国产一区二区在线精品 | 免费视频区 | 日韩素人在线观看 | 免费av观看网站 | www.国产视频| 69绿帽绿奴3pvideos| 91视频大全 | 九草在线视频 | 久久伦理 | 亚洲精品999| 免费看亚洲毛片 | 国产高清视频 | 欧美日韩一区二区三区免费视频 | 亚洲人xxx | 日本h在线播放 | 国产精品久久一区二区三区不卡 | 久久人人爽人人片av | 日本不卡一区二区三区在线观看 | 91香蕉视频720p| 欧美日韩精品久久久 | www.com在线观看 | 国产精品乱码久久久 | 人人看看人人 | www.五月婷婷 | 国产精品色 | 久久久午夜精品理论片中文字幕 | 最新日本中文字幕 | 中文字幕免费不卡视频 | 摸阴视频| 日日夜夜操操操操 | 日本激情动作片免费看 | 日日婷婷夜日日天干 | 最新三级在线 | 色视频 在线 | 国产精品va在线观看入 | 国产美女精品视频 | 久久超碰97 | 国产一区高清在线 | 中文不卡视频在线 | 成人在线免费观看视视频 | 九九视频在线播放 | 欧美性色黄大片在线观看 | 成人免费一区二区三区在线观看 | 九草在线观看 | 国产成人精品三级 | 国产精品a级 | 一区二区三区四区精品 | 久草在线最新视频 | 国产私拍在线 | 香蕉影院在线 | 激情 一区二区 | 中文字幕一区二区三区四区视频 | 草久久久久久 | 怡红院av久久久久久久 | 久久久久伊人 | 欧美精品久久久久性色 | 欧美精品久久久久久久久久 | 国产久视频 | 久久精品国产久精国产 | 亚洲日本va在线观看 | 免费看av在线 | 亚洲第一中文网 | 久操视频在线 | www在线观看国产 | 久久国色夜色精品国产 | 国产成人精品电影久久久 | 色综合天天视频在线观看 | 日本精品一区二区三区在线播放视频 | 五月天狠狠操 | 99久高清在线观看视频99精品热在线观看视频 | 最近日本韩国中文字幕 | 国产视频91在线 | 男女啪啪免费网站 | 99热都是精品 | 国产 一区二区三区 在线 | 三级在线播放视频 | 91麻豆国产福利在线观看 | 国产不卡在线 | 久产久精国产品 | 在线观看视频 | 日韩高清www | 丁香导航 | 色国产视频| 国产自产在线视频 | 色五婷婷 | 91精品国产三级a在线观看 | 国产99黄 | 久久人人看 | 国产精品欧美 | 欧美日韩国产一区二区在线观看 | 日韩专区av | 免费看污网站 | 麻豆精品视频在线观看免费 | 91成人破解版 | 色播五月激情综合网 | 日韩精品一区二区不卡 | 最近免费中文字幕大全高清10 | 亚洲国产成人精品在线 | h文在线观看免费 | 欧美日韩综合在线观看 | 一级c片 | 国产黄av| 亚洲国产三级 | 人人澡人摸人人添学生av | 探花视频免费观看 | 草久视频在线观看 | 久草免费电影 | 人人要人人澡人人爽人人dvd | 日韩亚洲国产精品 | 国产精品久久久久久久免费 | 国产九色91| 99热国产精品 | 99久久国产免费,99久久国产免费大片 | 国产一区二区免费在线观看 | 中文字幕成人在线观看 | 国产精品区一区 | 日韩精品久久久久久久电影竹菊 | 亚洲乱码在线观看 | 久久黄色美女 | 干干操操 | 午夜精品一区二区三区在线观看 | 91精品国产乱码久久 | 99久久精品一区二区成人 | 一级欧美日韩 | 国产色女人 | 亚洲人在线7777777精品 | 国产精品系列在线观看 | 亚洲精品乱码久久久久久写真 | 丁香六月伊人 | 伊人va | 播五月婷婷 | 午夜精品久久久久久久99 | 国产免费精彩视频 | 久久国产麻豆 | 久久dvd | av激情五月 | 久久免费片 | 国产h在线播放 | 欧美国产精品一区二区 | 亚洲午夜精品一区二区三区电影院 | 亚洲乱码中文字幕综合 | 久久国产精品一区二区 | 色资源网免费观看视频 | 99热在线观看 | 91视频黄色| 一区二区三区久久 | 国产资源在线视频 | 91日韩在线专区 | 精品毛片一区二区免费看 | 久久99精品久久久久蜜臀 | 色香蕉网| 91视频免费看网站 | 久久久久国产精品视频 | 在线观看aaa| 黄色av电影免费观看 | 人人超碰97| 三级av网 | 伊人伊成久久人综合网小说 | 97久久久免费福利网址 | 狠狠操操 | 天天摸天天操天天爽 | 精品视频123区在线观看 | 99精品乱码国产在线观看 | 日韩精品视频在线免费观看 | 久久艹国产 | 手机在线中文字幕 | 久草在线视频首页 | 黄色日视频 | 国产麻豆剧果冻传媒视频播放量 | 欧美日韩一区二区三区视频 | 激情欧美日韩一区二区 | 中文字幕a∨在线乱码免费看 | 99麻豆视频 | a视频在线观看 | 国产精品久久久久毛片大屁完整版 | 精品在线视频播放 | 日韩在线观看视频免费 | 亚洲无线视频 | 国产欧美综合视频 | 天天干夜夜想 | 久久精品美女视频 | 操操操天天操 | 激情视频在线高清看 | 国产在线最新 | 久久精品—区二区三区 | 天堂在线视频免费观看 | 亚洲三级毛片 | 国产又粗又硬又爽视频 | 亚洲精品va| 人人澡澡人人 | av在线免费观看黄 | 亚洲欧洲精品一区二区精品久久久 | 色多多在线观看 | 亚洲综合在线一区二区三区 | 精品国产精品一区二区夜夜嗨 | 国产成人高清 | 久草精品免费 | 国产最新视频在线 | 久久久精品免费看 | av在线免费在线观看 | 久久婷婷国产 | 亚洲国产精品成人va在线观看 | 日韩城人在线 | 色噜噜在线观看 | 91插插插免费视频 | 91成人免费观看视频 | 黄色免费观看网址 | 天天夜夜狠狠操 | 天天干天天射天天爽 | 亚洲黄色在线播放 | 日韩欧美在线一区二区 | 国产精品涩涩屋www在线观看 | 亚洲国产剧情 | 久草视频在线播放 | 亚洲成人精品在线 | 久久久综合香蕉尹人综合网 | 亚洲资源在线 | 男女靠逼app | 国产精品视频永久免费播放 | 成人午夜影院在线观看 | 亚洲黄色av网址 | 亚洲精品在线免费观看视频 | 少妇做爰k8经典 | 国产91精品高清一区二区三区 | 国产91免费在线 | 久久综合九色欧美综合狠狠 | 九九视频在线 | 99色人| 狠狠躁夜夜躁人人爽超碰97香蕉 | 国产精品久久久777 成人手机在线视频 | 最近中文国产在线视频 | 免费在线观看不卡av | 国产精品久久久区三区天天噜 | 中文字幕在线一二 | 99热在| 日韩欧美国产激情在线播放 | 国产精品video爽爽爽爽 | 日韩av美女 | 国产分类视频 | 亚洲三级在线 | 日韩成人免费在线 | 在线看片成人 | 伊人中文在线 | 国产首页| 欧美日韩一级久久久久久免费看 | 一区二区欧美在线观看 | 五月婷色 | 在线免费观看视频 | 成人在线免费视频 | 999超碰| 久久电影日韩 | 日本黄区免费视频观看 | 精品不卡视频 | 久久国产日韩 | 97在线视| 伊人色**天天综合婷婷 | 日本久久影视 | 精品福利av | 色婷av| 一区二区三区免费播放 | 99视频这里有精品 | 国产黄色免费在线观看 | 最新日韩在线观看视频 | 国产精品原创在线 | 亚洲黄色大片 | 99久久日韩精品视频免费在线观看 | 日韩影视在线 | 久久综合偷偷噜噜噜色 | 天堂视频中文在线 | 日韩av二区| 中文国产字幕在线观看 | 免费av高清 | 日韩视频专区 | 色多多视频在线 | 国产精品video | 在线观看黄色小视频 | www.久久爱.cn | av中文资源在线 | 丁香激情综合久久伊人久久 | 欧美成人播放 | 成年人在线看视频 | 综合网天天 | 中文字幕有码在线 | 免费成人短视频 | 亚洲精品国久久99热 | 最近中文字幕高清字幕免费mv | 久久精品1区 | 国产高清在线免费 | 久久久久久久久久久久久久电影 | 天天爽综合网 | 精品国产免费一区二区三区五区 | 99精品国产成人一区二区 | 日韩免费一级a毛片在线播放一级 | 日批视频在线 | 人人干97 | 久久成人麻豆午夜电影 | 日韩av手机在线观看 | 日韩午夜一级片 | 三级黄色大片在线观看 | 中文字幕在线一区二区三区 | 999久久久国产精品 高清av免费观看 | 国产剧情一区二区 | 成人免费视频网站 | 成人免费看片98欧美 | 在线观看一区 | 91成人免费观看视频 | 最近中文字幕免费av | 国产美女搞久久 | 在线观看岛国av | 亚洲精品黄网站 | 精品国产免费久久 | 六月激情婷婷 | 成人一区二区三区在线 | 色综合婷婷 | 国产中文字幕视频在线观看 | www免费视频com━ | 又黄又刺激的网站 | 国产精品久久毛片 | 色噜噜噜噜 | 国产欧美日韩一区 | 狠狠躁天天躁 | 91在线产啪 | 人人澡人摸人人添学生av | 国产人成一区二区三区影院 | 黄av在线 | 色久av | 欧美日韩一区二区三区不卡 | 亚洲欧洲精品一区 | 99视频在线观看视频 | 91在线国内视频 | 日韩视频在线观看视频 | 国产小视频国产精品 | 欧美成年网站 | 丰满少妇在线观看 | 国产精品99久久久久久大便 | www.日本色 | 婷婷看片| 六月色婷 | 韩国精品一区二区三区六区色诱 | 蜜桃av人人夜夜澡人人爽 | www.黄色小说.com | 国产精品久久99综合免费观看尤物 | 免费高清在线视频一区· | 久久1电影院 | 国产精品初高中精品久久 | 久久99精品国产99久久6尤 | 四虎永久网站 | 亚洲视频免费在线观看 | 亚洲精品国产精品久久99热 | 国产又粗又猛又黄又爽的视频 | 91最新视频在线观看 | 国产精品第一视频 | 日日夜夜天天综合 | 99re亚洲国产精品 | 91日韩在线播放 | 色天天天| 最近中文字幕在线中文高清版 | av三级av | 婷婷六月网 | 日韩资源在线播放 | 毛片一级免费一级 | 久久97视频 | 欧美成人h版电影 | 狠狠狠色丁香综合久久天下网 | 久久久黄视频 | 欧美精品v国产精品v日韩精品 | 黄色99视频 | 国产精品一区二区av影院萌芽 | 综合天堂av久久久久久久 | 日韩精品久久久久久久电影竹菊 | 91c网站色版视频 | 国产精品久久久久一区二区三区共 | 手机在线免费av | 狠狠干狠狠操 | 日韩一区在线播放 | 天天干天天干天天 | 99精品观看 | 亚洲国产精彩中文乱码av | 人交video另类hd| 国产精品成人一区二区 | 国产97碰免费视频 | 777视频在线观看 | 正在播放五月婷婷狠狠干 | 日韩欧美一区二区三区免费观看 | 99产精品成人啪免费网站 | 午夜的福利 | 偷拍精品一区二区三区 | www黄com| 99久久99久久精品国产片果冰 | 丝袜美女在线观看 | 在线播放国产一区二区三区 | 亚洲综合成人婷婷小说 | 久草香蕉在线视频 | 夜夜嗨av色一区二区不卡 | 国产精品成人品 | 91九色蝌蚪国产 | 精品一区二区亚洲 | 国产一区二区在线播放视频 | 99热国产精品 | 久久一区二区三区国产精品 | 免费国产ww| 免费三级骚 | 免费在线黄色av | 97色婷婷成人综合在线观看 | 丁香六月婷婷激情 | 日本精品视频网站 | 99视频在线观看免费 | 久久超碰在线 | 日日天天干| 在线免费观看黄色小说 | 99精品视频在线观看免费 | 免费看的黄色的网站 | 国产精品久久久av | 中文字幕一区二区三区乱码在线 | 日韩中文字幕亚洲一区二区va在线 | 久久精品播放 | 免费观看成人av | 成av在线 | 免费黄色网址大全 | 不卡精品| 久久精品一级片 | 国产成人亚洲在线观看 | 九九久久免费视频 | 国产日韩欧美在线播放 | 91一区二区三区在线观看 | 一区二区三区国产欧美 | 久久国内精品 | 国产高清不卡av |