黄a在线观看-黄a在线-黄a大片-黄色片在线看-黄色毛片免费-黄色大片网站

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

Spring Security 中如何讓上級(jí)擁有下級(jí)的所有權(quán)限(案例分析)

瀏覽:2日期:2023-08-11 14:43:03

答案是能!

松哥之前寫過(guò)類似的文章,但是主要是講了用法,今天我們來(lái)看看原理!

本文基于當(dāng)前 Spring Security 5.3.4 來(lái)分析,為什么要強(qiáng)調(diào)最新版呢?因?yàn)樵谠?5.0.11 版中,角色繼承配置和現(xiàn)在不一樣。舊版的方案我們現(xiàn)在不討論了,直接來(lái)看當(dāng)前最新版是怎么處理的。

1.角色繼承案例

我們先來(lái)一個(gè)簡(jiǎn)單的權(quán)限案例。

創(chuàng)建一個(gè) Spring Boot 項(xiàng)目,添加 Spring Security 依賴,并創(chuàng)建兩個(gè)測(cè)試用戶,如下:

@Overrideprotected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.inMemoryAuthentication() .withUser('javaboy') .password('{noop}123').roles('admin') .and() .withUser('江南一點(diǎn)雨') .password('{noop}123') .roles('user');}

然后準(zhǔn)備三個(gè)測(cè)試接口,如下:

@RestControllerpublic class HelloController { @GetMapping('/hello') public String hello() { return 'hello'; } @GetMapping('/admin/hello') public String admin() { return 'admin'; } @GetMapping('/user/hello') public String user() { return 'user'; }}

這三個(gè)測(cè)試接口,我們的規(guī)劃是這樣的:

/hello 是任何人都可以訪問(wèn)的接口 /admin/hello 是具有 admin 身份的人才能訪問(wèn)的接口 /user/hello 是具有 user 身份的人才能訪問(wèn)的接口 所有 user 能夠訪問(wèn)的資源,admin 都能夠訪問(wèn)

注意第四條規(guī)范意味著所有具備 admin 身份的人自動(dòng)具備 user 身份。

接下來(lái)我們來(lái)配置權(quán)限的攔截規(guī)則,在 Spring Security 的 configure(HttpSecurity http) 方法中,代碼如下:

http.authorizeRequests() .antMatchers('/admin/**').hasRole('admin') .antMatchers('/user/**').hasRole('user') .anyRequest().authenticated() .and() ... ...

這里的匹配規(guī)則我們采用了 Ant 風(fēng)格的路徑匹配符,Ant 風(fēng)格的路徑匹配符在 Spring 家族中使用非常廣泛,它的匹配規(guī)則也非常簡(jiǎn)單:

通配符 含義 ** 匹配多層路徑 * 匹配一層路徑 ? 匹配任意單個(gè)字符

上面配置的含義是:

如果請(qǐng)求路徑滿足 /admin/** 格式,則用戶需要具備 admin 角色。 如果請(qǐng)求路徑滿足 /user/** 格式,則用戶需要具備 user 角色。 剩余的其他格式的請(qǐng)求路徑,只需要認(rèn)證(登錄)后就可以訪問(wèn)。

注意代碼中配置的三條規(guī)則的順序非常重要,和 Shiro 類似,Spring Security 在匹配的時(shí)候也是按照從上往下的順序來(lái)匹配,一旦匹配到了就不繼續(xù)匹配了,所以攔截規(guī)則的順序不能寫錯(cuò)

如果使用角色繼承,這個(gè)功能很好實(shí)現(xiàn),我們只需要在 SecurityConfig 中添加如下代碼來(lái)配置角色繼承關(guān)系即可:

@BeanRoleHierarchy roleHierarchy() { RoleHierarchyImpl hierarchy = new RoleHierarchyImpl(); hierarchy.setHierarchy('ROLE_admin > ROLE_user'); return hierarchy;}

注意,在配置時(shí),需要給角色手動(dòng)加上 ROLE_ 前綴。上面的配置表示 ROLE_admin 自動(dòng)具備 ROLE_user 的權(quán)限。

接下來(lái),我們啟動(dòng)項(xiàng)目進(jìn)行測(cè)試。

項(xiàng)目啟動(dòng)成功后,我們首先以 江南一點(diǎn)雨的身份進(jìn)行登錄:

Spring Security 中如何讓上級(jí)擁有下級(jí)的所有權(quán)限(案例分析)

登錄成功后,分別訪問(wèn) /hello,/admin/hello 以及 /user/hello 三個(gè)接口,其中:

/hello 因?yàn)榈卿浐缶涂梢栽L問(wèn),這個(gè)接口訪問(wèn)成功。 /admin/hello 需要 admin 身份,所以訪問(wèn)失敗。 /user/hello 需要 user 身份,所以訪問(wèn)成功。

再以 javaboy 身份登錄,登錄成功后,我們發(fā)現(xiàn) javaboy 也能訪問(wèn) /user/hello 這個(gè)接口了,說(shuō)明我們的角色繼承配置沒(méi)問(wèn)題!

2.原理分析

這里配置的核心在于我們提供了一個(gè) RoleHierarchy 實(shí)例,所以我們的分析就從該類入手。

RoleHierarchy 是一個(gè)接口,該接口中只有一個(gè)方法:

public interface RoleHierarchy {Collection<? extends GrantedAuthority> getReachableGrantedAuthorities(Collection<? extends GrantedAuthority> authorities);}

這個(gè)方法參數(shù) authorities 是一個(gè)權(quán)限集合,從方法名上看方法的返回值是一個(gè)可訪問(wèn)的權(quán)限集合。

舉個(gè)簡(jiǎn)單的例子,假設(shè)角色層次結(jié)構(gòu)是 ROLE_A > ROLE_B > ROLE_C,現(xiàn)在直接給用戶分配的權(quán)限是 ROLE_A,但實(shí)際上用戶擁有的權(quán)限有 ROLE_A、ROLE_B 以及 ROLE_C。

getReachableGrantedAuthorities 方法的目的就是是根據(jù)角色層次定義,將用戶真正可以觸達(dá)的角色解析出來(lái)。

RoleHierarchy 接口有兩個(gè)實(shí)現(xiàn)類,如下圖:

Spring Security 中如何讓上級(jí)擁有下級(jí)的所有權(quán)限(案例分析)

NullRoleHierarchy 這是一個(gè)空的實(shí)現(xiàn),將傳入的參數(shù)原封不動(dòng)返回。 RoleHierarchyImpl 這是我們上文所使用的實(shí)現(xiàn),這個(gè)會(huì)完成一些解析操作。

我們來(lái)重點(diǎn)看下 RoleHierarchyImpl 類。

這個(gè)類中實(shí)際上就四個(gè)方法 setHierarchy、getReachableGrantedAuthorities、buildRolesReachableInOneStepMap 以及 buildRolesReachableInOneOrMoreStepsMap,我們來(lái)逐個(gè)進(jìn)行分析。

首先是我們一開(kāi)始調(diào)用的 setHierarchy 方法,這個(gè)方法用來(lái)設(shè)置角色層級(jí)關(guān)系:

public void setHierarchy(String roleHierarchyStringRepresentation) {this.roleHierarchyStringRepresentation = roleHierarchyStringRepresentation;if (logger.isDebugEnabled()) {logger.debug('setHierarchy() - The following role hierarchy was set: '+ roleHierarchyStringRepresentation);}buildRolesReachableInOneStepMap();buildRolesReachableInOneOrMoreStepsMap();}

用戶傳入的字符串變量設(shè)置給 roleHierarchyStringRepresentation 屬性,然后通過(guò) buildRolesReachableInOneStepMap 和 buildRolesReachableInOneOrMoreStepsMap 方法完成對(duì)角色層級(jí)的解析。

buildRolesReachableInOneStepMap 方法用來(lái)將角色關(guān)系解析成一層一層的形式。我們來(lái)看下它的源碼:

private void buildRolesReachableInOneStepMap() {this.rolesReachableInOneStepMap = new HashMap<>();for (String line : this.roleHierarchyStringRepresentation.split('n')) {String[] roles = line.trim().split('s+>s+');for (int i = 1; i < roles.length; i++) {String higherRole = roles[i - 1];GrantedAuthority lowerRole = new SimpleGrantedAuthority(roles[i]);Set<GrantedAuthority> rolesReachableInOneStepSet;if (!this.rolesReachableInOneStepMap.containsKey(higherRole)) {rolesReachableInOneStepSet = new HashSet<>();this.rolesReachableInOneStepMap.put(higherRole, rolesReachableInOneStepSet);} else {rolesReachableInOneStepSet = this.rolesReachableInOneStepMap.get(higherRole);}rolesReachableInOneStepSet.add(lowerRole);}}}

首先大家看到,按照換行符來(lái)解析用戶配置的多個(gè)角色層級(jí),這是什么意思呢?

我們前面案例中只是配置了 ROLE_admin > ROLE_user,如果你需要配置多個(gè)繼承關(guān)系,怎么配置呢?多個(gè)繼承關(guān)系用 n 隔開(kāi)即可,如下 ROLE_A > ROLE_B n ROLE_C > ROLE_D。還有一種情況,如果角色層級(jí)關(guān)系是連續(xù)的,也可以這樣配置 ROLE_A > ROLE_B > ROLE_C > ROLE_D。

所以這里先用 n 將多層繼承關(guān)系拆分開(kāi)形成一個(gè)數(shù)組,然后對(duì)數(shù)組進(jìn)行遍歷。

在具體遍歷中,通過(guò) > 將角色關(guān)系拆分成一個(gè)數(shù)組,然后對(duì)數(shù)組進(jìn)行解析,高一級(jí)的角色作為 key,低一級(jí)的角色作為 value。

代碼比較簡(jiǎn)單,最終的解析出來(lái)存入 rolesReachableInOneStepMap 中的層級(jí)關(guān)系是這樣的:

假設(shè)角色繼承關(guān)系是 ROLE_A > ROLE_B n ROLE_C > ROLE_D n ROLE_C > ROLE_E,Map 中的數(shù)據(jù)是這樣:

A?>B C?>[D,E]

假設(shè)角色繼承關(guān)系是 ROLE_A > ROLE_B > ROLE_C > ROLE_D,Map 中的數(shù)據(jù)是這樣:

A?>B B?>C C?>D

這是 buildRolesReachableInOneStepMap 方法解析出來(lái)的 rolesReachableInOneStepMap 集合。

接下來(lái)的 buildRolesReachableInOneOrMoreStepsMap 方法則是對(duì) rolesReachableInOneStepMap 集合進(jìn)行再次解析,將角色的繼承關(guān)系拉平。

例如 rolesReachableInOneStepMap 中保存的角色繼承關(guān)系如下:

A?>B B?>C C?>D

經(jīng)過(guò) buildRolesReachableInOneOrMoreStepsMap 方法解析之后,新的 Map 中保存的數(shù)據(jù)如下:

A?>[B、C、D] B?>[C、D] C?>D

這樣解析完成后,每一個(gè)角色可以觸達(dá)到的角色就一目了然了。

我們來(lái)看下 buildRolesReachableInOneOrMoreStepsMap 方法的實(shí)現(xiàn)邏輯:

private void buildRolesReachableInOneOrMoreStepsMap() {this.rolesReachableInOneOrMoreStepsMap = new HashMap<>();for (String roleName : this.rolesReachableInOneStepMap.keySet()) {Set<GrantedAuthority> rolesToVisitSet = new HashSet<>(this.rolesReachableInOneStepMap.get(roleName));Set<GrantedAuthority> visitedRolesSet = new HashSet<>();while (!rolesToVisitSet.isEmpty()) {GrantedAuthority lowerRole = rolesToVisitSet.iterator().next();rolesToVisitSet.remove(lowerRole);if (!visitedRolesSet.add(lowerRole) ||!this.rolesReachableInOneStepMap.containsKey(lowerRole.getAuthority())) {continue;} else if (roleName.equals(lowerRole.getAuthority())) {throw new CycleInRoleHierarchyException();}rolesToVisitSet.addAll(this.rolesReachableInOneStepMap.get(lowerRole.getAuthority()));}this.rolesReachableInOneOrMoreStepsMap.put(roleName, visitedRolesSet);}}

這個(gè)方法還比較巧妙。首先根據(jù) roleName 從 rolesReachableInOneStepMap 中獲取對(duì)應(yīng)的 rolesToVisitSet,這個(gè) rolesToVisitSet 是一個(gè) Set 集合,對(duì)其進(jìn)行遍歷,將遍歷結(jié)果添加到 visitedRolesSet 集合中,如果 rolesReachableInOneStepMap 集合的 key 不包含當(dāng)前讀取出來(lái)的 lowerRole,說(shuō)明這個(gè) lowerRole 就是整個(gè)角色體系中的最底層,直接 continue。否則就把 lowerRole 在 rolesReachableInOneStepMap 中對(duì)應(yīng)的 value 拿出來(lái)繼續(xù)遍歷。

最后將遍歷結(jié)果存入 rolesReachableInOneOrMoreStepsMap 集合中即可。

這個(gè)方法有點(diǎn)繞,小伙伴們可以自己打個(gè)斷點(diǎn)品一下。

看了上面的分析,小伙伴們可能發(fā)現(xiàn)了,其實(shí)角色繼承,最終還是拉平了去對(duì)比。

我們定義的角色有層級(jí),但是代碼中又將這種層級(jí)拉平了,方便后續(xù)的比對(duì)。

最后還有一個(gè) getReachableGrantedAuthorities 方法,根據(jù)傳入的角色分析出其可能潛在包含的一些角色:

public Collection<GrantedAuthority> getReachableGrantedAuthorities(Collection<? extends GrantedAuthority> authorities) {if (authorities == null || authorities.isEmpty()) {return AuthorityUtils.NO_AUTHORITIES;}Set<GrantedAuthority> reachableRoles = new HashSet<>();Set<String> processedNames = new HashSet<>();for (GrantedAuthority authority : authorities) {if (authority.getAuthority() == null) {reachableRoles.add(authority);continue;}if (!processedNames.add(authority.getAuthority())) {continue;}reachableRoles.add(authority);Set<GrantedAuthority> lowerRoles = this.rolesReachableInOneOrMoreStepsMap.get(authority.getAuthority());if (lowerRoles == null) {continue;}for (GrantedAuthority role : lowerRoles) {if (processedNames.add(role.getAuthority())) {reachableRoles.add(role);}}}List<GrantedAuthority> reachableRoleList = new ArrayList<>(reachableRoles.size());reachableRoleList.addAll(reachableRoles);return reachableRoleList;}

這個(gè)方法的邏輯比較直白,就是從 rolesReachableInOneOrMoreStepsMap 集合中查詢出當(dāng)前角色真正可訪問(wèn)的角色信息。

3.RoleHierarchyVoter

getReachableGrantedAuthorities 方法將在 RoleHierarchyVoter 投票器中被調(diào)用。

public class RoleHierarchyVoter extends RoleVoter {private RoleHierarchy roleHierarchy = null;public RoleHierarchyVoter(RoleHierarchy roleHierarchy) {Assert.notNull(roleHierarchy, 'RoleHierarchy must not be null');this.roleHierarchy = roleHierarchy;}@OverrideCollection<? extends GrantedAuthority> extractAuthorities(Authentication authentication) {return roleHierarchy.getReachableGrantedAuthorities(authentication.getAuthorities());}}

關(guān)于 Spring Security 投票器,將是另外一個(gè)故事,松哥將在下篇文章中和小伙伴們分享投票器和決策器~

4.小結(jié)

到此這篇關(guān)于Spring Security 中如何讓上級(jí)擁有下級(jí)的所有權(quán)限的文章就介紹到這了,更多相關(guān)Spring Security上級(jí)擁有下級(jí)的所有權(quán)限內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 99久久精品国产免费 | 日韩欧美tⅴ一中文字暮 | 成人性生交大片免费 | 蜜臀中文字幕 | 影音先锋中文字幕在线 | 成人性做爰aaa片免费看不忠 | 久久九九精品99国产精品 | 在线激情网站 | 欧美人与性动交0欧美精一级 | 激情综合色综合久久综合 | 国产精品一区二区欧美 | 四虎国产精品成人永久免费影视 | 人妻无码一区二区三区 | 欧产日产国产69 | 精品无码午夜福利理论片 | 久草热在线视频 | 一边添奶一边添p好爽视频 欧美 变态 另类 人妖 | 亚洲男女激情 | 国产精品永久 | 一级片高清 | 蜜桃综合 | 成人毛片100部 | 日韩欧美视频网站 | 久久国产精品一国产精品 | 欧美人与禽zoz0性伦交 | 九色蜜桃臀丨porny丨自拍 | xxxx黄色片| 超碰2023 | 国产成人aaaa | 二级黄色片 | a免费毛片 | 日韩视频精品一区 | 日韩av第一页在线播放 | 深爱五月激情五月 | 激情内射日本一区二区三区 | 欧美偷拍视频 | 亚洲一区二区三区四 | 无码一区二区三区中文字幕 | 国产视频黄色 | 91调教打屁股xxxx网站 | 男男做性免费视频网 | www.香蕉.com| 久久这里只有精品9 | av免费黄色| 亚洲最大成人综合网720p | 国产精品国产高清国产av | 视频在线观看一区二区 | 成人无号精品一区二区三区 | 国产精品涩涩涩视频网站 | 免费看片成人 | 青娱乐伊人 | 欧美第一页在线观看 | 人妻少妇av无码一区二区 | 小明成人免费视频一区 | 中日韩高清无专码区2021 | 国产少妇高潮视频 | 亚洲视频在线免费看 | 欧美一区二区在线免费观看 | 国产美女包臀裙一区二区 | 国产寡妇亲子伦一区二区三区四区 | 成在线人av免费无码高潮喷水 | 久久久无码精品亚洲日韩按摩 | 免费成人黄色网址 | 国产欧美日韩综合精品一 | 国产精品视频在线免费观看 | 欧美va亚洲va | 嫩草av久久伊人妇女超级a | 亚洲爆乳大丰满无码专区 | 国产成人综合在线女婷五月99播放 | 成人免费毛片明星色大师 | 久精品国产欧美亚洲色aⅴ大片 | 午夜精品区 | 韩产日产国产欧产 | 亚洲天堂精品在线观看 | 超级黄色毛片 | 中文字幕中文字幕 | 亚久久 | 色婷婷综合久久久中文字幕 | 无码中文字幕乱码一区 | a级毛片蜜桃成熟时2在线播放 | 国产91丝袜在线播放0 | 天天色天天射天天干 | 欧美午夜精品久久久久久孕妇 | 深夜福利在线免费观看 | 日本久久亚洲 | 免费一级a毛片夜夜看 | 国产成人鲁鲁免费视频a | 欧美情侣性视频 | 亚洲日本中文字幕天天更新 | 日本人与禽zozzo小小的几孑 | av日韩在线免费观看 | 老司机精品久久 | 国产无遮挡免费观看视频网站 | 九九伊人八戒 | 偷窥自拍欧美色图 | 国产特级毛片aaaaaa高潮流水 | 亚洲精品亚洲人成在线 | 国内精品国产成人国产三级 | 精品亚洲一区二区三区在线观看 | 视频一区二区三区四区五区 | 欧美另类人妖 | 日本japanese少妇毛耸耸 | 澳门久久| www.五月.com| 狠狠色图片 | 校园春色自拍偷拍 | 日韩一区二区视频在线 | 欧美日韩aaa | 巨胸美女狂喷奶水www | 亚洲欧美一区在线 | 538精品视频在线播放 | 爱情岛成人www永久地址 | 精品国产美女 | 粉嫩小泬无遮挡久久久久久 | 久久久欧美国产精品人妻噜噜 | 玛雅精品福利视频在线导航 | 久久久久成人网 | 国产一区二区三精品久久久无广告 | 亚洲欧美日本韩国 | 人少妇精品123在线观看 | 人妻换人妻a片爽麻豆 | 男女又爽又黄激情免费视频大 | 韩国美女啪啪 | 日本不卡在线 | 国产一大二大不卡专区 | av不卡一区 | 一级片视频在线观看 | 国产精品三级在线观看无码 | 青青青av| 4hu亚洲人成人无码网www电影首页 | 性高朝久久久久久久 | videossex性糟蹋月经 | 伊人色在线视频 | 欧美3p两根一起进高清免费视频 | 国产精品午夜福利视频234区 | 欧美成人黄色网 | www亚洲欧美 | 中文字幕亚洲综合 | 噜噜高清欧美内射短视频 | 波多野结av衣东京热无码专区 | 中文字幕亚洲精品 | 人人爽人人爽人人爽 | 成年免费视频黄网站在线观看 | 亚洲美女自拍视频 | 人人妻人人澡av天堂香蕉 | 欧美高清x| 久久精品视频国产 | 欧美福利在线视频 | 日本少妇毛耸耸毛多水多 | 91精品无人区麻豆 | 乱肉合集乱高h久久爱 | 国产麻豆午夜三级精品 | 天堂国产| 国产精品a久久久久 | xxxeexxx性国产 | 精品国产一区二区三区四区五区 | 亚洲乱强伦 | 亚洲午夜精品a片久久www慈禧 | 国产综合久久久久 | 老司机在线免费视频 | 国产麻豆剧果冻传媒白晶晶 | 日本视频www| 欧美性xxxx极品hd欧美风情 | 精品国产一区二 | 这里只有精品在线播放 | 久久9999久久免费精品国产 | 毛片视频免费播放 | 91精品国产一区二区三区 | 日日躁夜夜躁白天躁晚上 | 日本高清www视频在线观看 | 女人与拘做受全过程免费视频 | 国产性色av免费观看 | 熟女人妻一区二区三区免费看 | 无码福利一区二区三区 | 欧美一区二区三区在线视频观看 | 国产综合在线视频 | 午夜av网址 | 美女久久久久久久久久 | 好吊妞视频这里有精品 | 日韩黄色网 | 国产欧美第一页 | 2024国产精品| 99精品免费久久久久久久久日本 | 亚洲色图激情 | 免费视频爱爱太爽了 | 激情五月婷婷综合 | 亚洲一卡二卡在线观看 | 日本成人在线网站 | 人妻系列无码专区久久五月天 | h视频免费在线 | 中国特级黄色毛片 | 久一在线| 国产精品人人爱一区二区白浆 | 538国产视频 | 久久久久久www | 成人影片麻豆国产影片免费观看 | 欧美精品色哟哟 | 高h破瓜受孕龙精 | 亚洲情侣在线 | 日日噜噜噜夜夜爽爽狠狠视频寻花 | 欧美精品亚洲精品日韩专区 | 欧美成人激情在线 | 久久人人艹 | 国产玉足脚交欧美一区二区 | 国产欧美精品一区二区在线播放 | 欧美精品无码一区二区三区 | 亚洲天堂av中文字幕 | 国产精品一品二区三区四区18 | 强开小受嫩苞第一次免费视频 | 国产精品a一区二区三区网址 | 波多野结衣黄色 | 樱桃视频影视在线观看免费 | 3atv精品不卡视频 | 欧美视频在线观看视频 | 粗了大了 整进去好爽视频 色偷偷亚洲男人的天堂 | 亚洲色欲色欲www在线观看 | 91精品啪在线观看国产商店 | 欧美午夜性生活 | 国产又大又粗又爽的毛片 | 果冻传媒一区 | 国产剧情久久久 | 在线视频 中文字幕 | 2020国产成人精品视频 | 欧美做爰爽爽爽爽爽爽 | 欧美午夜精品一区二区蜜桃 | 日韩在线网址 | 久久香蕉国产线熟妇人妻 | 美女网站污 | a免费视频 | 久草在线视频福利资源站 | 亚洲va在线va天堂va狼色在线 | 小泽玛利亚一区二区三区视频 | 中文屏幕乱码av | 日本美女逼 | 国产欧美日韩精品a在线观看 | 国产99久久久国产精品 | 欧美日韩免费观看一区=区三区 | 国产精品毛片在线 | 特级a级毛片 | 亚洲精品无码专区在线在线播放 | 国产精品夜间视频香蕉 | 国产真实乱全部视频 | 纤纤影视理伦片在线看 | 成在线人视频免费视频 | 国产女同疯狂激烈互摸 | 亚洲色图欧美自拍 | 欧美人与性禽动交情品 | 国产xxxx性hd极品 | 姑娘第5集在线观看免费 | 亚洲男人天堂久久 | 无码人妻一区二区三区线 | 成人毛片一区二区三区 | 美女被张开双腿日出白浆 | 九七超碰在线 | 亚洲r成人av久久人人爽澳门赌 | 国产极品美女做性视频 | 日本免费网站在线观看 | 九色porny自拍视频在线播放 | 黑人操亚洲人 | 风间由美av| 欧美乱大交xxxxx古装 | 性做久久久久久久免费看 | 五月天婷婷影院 | 天天舔天天操天天干 | 黄色www视频 | 欧洲成人av| 亚洲成av人片一区二区梦乃 | 99久久国 | 精品久久久久久人妻无码中文字幕 | 天堂欧美城网站地址 | 国产精品久久久久aaaa九色 | 波多野结衣不卡视频 | 欧美精品偷自拍另类在线观看 | 国产又黄又硬又湿又黄的播出时间 | 99久久精品美女高潮喷水 | 亚洲综合一区中 | 久久精品国产成人av | 亚洲激情中文字幕 | 九九99视频 | 亚洲高清毛片一区二区 | 少妇无码一区二区三区免费 | 日本少妇全身按摩做爰5 | 在线观看国产小视频 | 日韩欧美视频免费在线观看 | 你懂的视频在线播放 | 精品久久久无码中文字幕 | 亚洲精品成a人在线 | 特级毛片www| 中文字幕色av一区二区三区 | 亚洲天码中字 | 天堂√在线中文最新版8 | 亚洲理论电影在线观看 | 两根大肉大捧一进一出好爽视频 | 裸露双乳挤奶无遮掩裸体网站 | 欧美日韩一区二区久久 | 鸭子tv国产在线永久播放 | 亚洲日本香蕉视频 | 学生粉嫩无套白浆第一次 | 国产成人无码一区二区在线播放 | 国产精品免费网站 | 日日躁夜夜摸月月添添添 | 91九色精品 | 少妇毛片一区二区三区免费视频 | 国产边打电话边做对白刺激 | 一色一性一乱一交一视频 | 中文字幕23页 | 美女裸体视频永久免费 | 天天做天天爱天天做 | 国产欧美久久一区二区三区 | k8经典少妇在线观看 | 少妇性荡欲午夜性开放视频剧场 | 青青青爽视频在线观看 | 国产亚洲精品久久久久久网站 | 亚洲精品成人 | 国产原创精品 | 色一情一交一乱一区二区三区 | 免费看男女做好爽好硬视频 | 日韩天天 | 日本大奶子视频 | 97在线观视频免费观看 | eeuss影院在线奇兵区145 | 国产有码在线 | 国产日韩欧美一区 | 免费观看欧美猛交片 | 麻豆黄色一级片 | 夜夜高潮天天爽欧美 | 国产强伦姧在线观看无码 | 中国洗澡偷拍在线播放 | 一本大道香一蕉久 | 国产成人av一区二区三区不卡 | 久久精品国产一区二区电影 | 一级草逼片 | jizz性欧美5 jizz性欧美6 | 久久乐国产精品亚洲综合 | 黄页嫩草 | 又粗又硬又猛又黄网站在线观看高清观看视频 | 无码国模国产在线观看 | 国产一级内谢一级一内高请 | 嫩草av久久伊人妇女超级a | 尤物在线免费视频 | 97精品视频在线观看 | 国内精品x99av | 伊人爱爱网 | 国产一区二区四区 | 亚洲欧美91 | 老司机一区二区 | 欧美aa在线观看 | 欧美黄网址 | 精品久久一区二区 | 久久精品国产99久久久 | 青娱乐自拍视频 | 成年人午夜视频在线观看 | 日本aaaa级毛片在线看 | 国产高清免费看 | 久久夜色精品亚洲噜噜国产mv | 欧美区一区二区三 | 9999国产精品 | 97精品人妻一区二区三区香蕉 | 中文字幕综合网 | 欧美国产亚洲精品suv | 欧美在线观看视频一区 | 91久久视频 | 少妇伦子伦情品无吗 | 欧美三级网址 | 中文字幕无码不卡免费视频 | 日本免费人成视频在线观看 | 国产精品1区2区3区在线观看 | 欧美日韩免费做爰视频 | 国产日韩在线观看视频 | 亚洲日韩欧美综合 | 鲁一鲁一鲁一鲁一av | 四虎影视永久免费观看 | 白嫩丰满少妇xxxxx性张津瑜 | 国产精品尤物 | 我和公激情中文字幕 | 三男一女吃奶添下面视频 | 国产人免费人成免费视频喷水 | 色老头一区 | av免费在线不卡 | 青青草黄色 | 久久亚洲私人国产精品 | 久操不卡| 国产成人久久精品激情 | 成人毛片一区二区三区 | 2级黄色片 | 操亚洲美女 | 极品美女扒开粉嫩小泬 | 国产成人综合久久精品免费 | 亚洲精品久久国产高清 | 髙清视频播放在线观看 | 亚洲国产成人精品久久久 | 亚洲一区二区三区四区不卡 | 夜夜躁狠狠躁日日躁av | 超碰在线免费看 | 亚洲综合无码一区二区三区 | 在线看黄网 | a级黄色一级片 | 亚洲精品色情app在线下载观看 | 国产精品污视频 | 免费精品一区二区三区视频日产 | 明星各种姿势顶弄呻吟h | 国产乱码精品一区二区三区五月婷 | 亚洲视频在线观看网址 | 午夜黄色毛片 | 欧美性xxxx狂欢老少配 | 韩国三级a视频在线观看 | 国产首页 | 九色丨蝌蚪pony蜜桃臀 | 六姐妹在线观看免费 | 久久人妻无码中文字幕 | 日本免费高清视频 | 国产特级淫片免费看 | jjzzjjzz在线观看| 国色天香中文字幕在线视频 | 欧美日韩精品一区二区在线视频 | 潘金莲性生交大片免费看图片 | 亚洲精品成人天堂一二三 | 黑人大战中国av女叫惨了 | 国产精品久久久久久久天堂 | 国产成人免费观看视频 | 欧美激情在线一区二区 | 一区二区三区国产精 | 天天干com| 疯狂撞击丝袜人妻 | 91福利专区 | 激情五月俺也去 | 三级欧美日韩 | 欧美另类在线播放 | 午夜影院入口 | 97国产精品视频 | 高h破瓜受孕龙精 | 狠狠干狠狠艹 | 免费三级av| 国产黄大片 | 可以在线观看的黄色 | 性夜久久一区国产9人妻 | 三级男人添奶爽爽爽视频 | 黄色毛片在线看 | 韩国精品一区二区三区无码视频 | 日日摸夜夜添夜夜添一区二区 | 九九天堂网 | 精品少妇一区 | 黄色网页在线免费观看 | 嫩草一区二区三区 | 国产精品一区二区三区四 | 中文字幕一区日韩精品 | 99爱这里只有精品 | 国产真实乱对白精彩久久 | 亚洲精品久久久久avwww潮水 | 精品久久久久久久久久ntr影视 | 欧美一区二区三区在线看 | 老司机精品视频一区二区 | 久久加勒比亚洲精品一区 | 狼色精品人妻在线视频 | 亚洲成熟女人毛毛耸耸多 | 水蜜桃久久夜色精品一区怎么玩 | 日本少妇免费视频一三区 | 亚洲aⅴ在线 | 窝窝午夜精品一区二区 | 特级a级片| 欧美综合在线视频 | 强奷乱码中文字幕熟女一 | 乌克兰性生交视频 | 久热精品视频在线播放 | 太粗太长太硬高潮了av | 夜夜夜高潮夜夜爽夜夜爰爰 | 婷婷色六月天 | 久久99亚洲精品久久99 | 无码人妻精品一区二区在线视频 | 亚洲欧美自拍偷拍视频 | 国产成人免费看 | 亚洲aⅴ天上人间在线观看 亚洲aⅴ在线 | 亚洲性xx| 人妻少妇av无码一区二区 | 国产精品久久国产精品99 gif | 精品午夜一区二区三区在线观看 | 懂色av中文字幕 | 国产一区二区99 | 特一级黄色 | 国产精品内射视频免费 | 日日摸日日碰人妻无码老牲 | 爆操网站| 欧美视频在线观看一区 | 韩国三级在线视频 | 9色porny自拍视频一区二区 | 国产二级一片内射视频播放 | 久久中文在线 | 日韩青青草 | 国产人妻久久精品二区三区老狼 | 日韩爱爱网 | 东方影院av久久久久久 | 欧美在线视频免费播放 | 亚洲精品久久30p | 久久久精品视频一区二区三区 | 久草成人 | 成人在线观看免费 | 五月精品在线 | 日韩精品视频在线看 | av涩涩| 黄色片免费 | av中文网站 | 尤物精品 | 国产婷婷成人久久av免费高清 | 久久精品中文无码资源站 | 亚洲欧洲日韩 | 鲁在线视频 | 二区三区偷拍浴室洗澡视频 | 丰满白嫩大屁股ass 久久精品无码一区二区三区免费 | 国产精品久久二区 | 五月婷婷激情综合网 | 亚洲精品午夜久久久久久久久久久 | 日本高清无卡码一区二区久久 | 中文天堂资源在线www | 欧美日韩视频一区二区三区 | 亚洲三级网站 | 久久精品国产亚洲沈樵 | 久久中文字幕高清 | 婷婷射| 真人二十三式性视频(动) | 玛雅精品福利视频在线导航 | 日韩中文字幕在线 | 成人三一级一片aaa 成人涩涩 | 国产视频自拍一区 | 日韩成人在线看 | 婷婷色综合 | 亚洲一区二区三区免费看 | 欧美极品第一页 | 亚洲视频一区 | 亚洲激情av | aⅴ资源番号库 | 成人性色生活片免费看l | 国产精品内射视频免费 | 国产精品人人妻人人爽人人牛 | 麻豆国产尤物av尤物在线观看 | 久久精品国产一区二区三区 | 日日色av| 蜜桃tv一区二区三区 | 久草在线资源网 | 色姑娘综合 | 最近中文2019字幕第二页 | 国产精品午夜在线观看 | 成年人免费网站视频 | av在线网站无码不卡的 | 波多野结衣喷潮 | 日韩精品视频在线观看免费 | 欧美日韩黄色网 | 精品久久久久久中文字幕 | 亚洲国产精品综合久久网络 | 欧美日韩精品一区二区三区蜜桃 | 欧美一级二级在线观看 | 亚洲成av人片一区二区梦乃 | 国产午夜一区 | 97色在线观看免费视频 | 亚洲精品一区二区不卡 | 精品二区视频 | 日韩成人精品 | 久久精品国产v日韩v亚洲 | 欧美三级理论片 | 久久av无码精品人妻糸列 | 日本肉体xxxx裸体784大胆 | 四虎国产精品一区二区 | 青草久久网 | 色综合久久中文综合网 | 一区二区三区人妻无码 | 一本色道久久综合亚洲精品 | 亚洲精品色情app在线下载观看 | 美女少妇av | 色综合天天综合网国产 | 欧美大片免费观看在线观看网站推荐 | 亚洲女人的天堂 | 久久网站免费 | 日韩精品人妻系列无码专区 | 天天做天天爱夜夜爽少妇 | 韩国白嫩粉嫩嫩嫩模美女视频 | 可以免费看的av网站 | 激情小说专区 | 国产欧美在线一区 | 精品国产亚洲一区二区三区 | 天天综合网久久 | 久久久国产精品人人片 | 日韩免费高清大片在线 | 精品国产伦一区二区三区免费 | 国产成人精品久久亚洲高清不卡 | 真实国产乱啪福利露脸 | av无码国产在线看免费网站 | 丰满饥渴老女人hd69av | 午夜天堂精品久久久久 | 国产精品国产三级国产三级人妇 | 成人午夜sm精品久久久久久久 | 国产精品毛片 | 成人小视频免费在线观看 | 国产精品51麻豆cm传媒 | 亚洲欧洲美洲在线观看 | 特黄视频 | 一区二区三区在线观看视频 | 久久久久黑人强伦姧人妻 | 婷婷综合久久中文字幕蜜桃三电影 | 天天干天天操天天爽 | av观看网站 | 99久热在线精品996热是什么 | 狠狠色综合欧美激情 | www国产精品 | 日日噜噜噜夜夜爽爽狠狠视频寻花 | 超碰男人的天堂 | 无遮挡边吃摸边吃奶边做 | 成人看的羞羞视频免费观看 | 成人免费毛片嘿嘿连载视频 | 亚洲一区 日韩精品 中文字幕 | 无码专区人妻系列日韩 | 美女久久久久久久久 | 亚洲视频综合网 | 一性一交一伦一色一按—摩 | www中文字幕com | av免费播放| 99热都是精品 |