久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

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

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

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

答案是能!

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

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

1.角色繼承案例

我們先來一個(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 是任何人都可以訪問的接口 /admin/hello 是具有 admin 身份的人才能訪問的接口 /user/hello 是具有 user 身份的人才能訪問的接口 所有 user 能夠訪問的資源,admin 都能夠訪問

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

接下來我們來配置權(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)證(登錄)后就可以訪問。

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

如果使用角色繼承,這個(gè)功能很好實(shí)現(xiàn),我們只需要在 SecurityConfig 中添加如下代碼來配置角色繼承關(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)限。

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

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

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

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

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

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

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è)可訪問的權(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á)的角色解析出來。

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ì)完成一些解析操作。

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

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

首先是我們一開始調(diào)用的 setHierarchy 方法,這個(gè)方法用來設(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 屬性,然后通過 buildRolesReachableInOneStepMap 和 buildRolesReachableInOneOrMoreStepsMap 方法完成對(duì)角色層級(jí)的解析。

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

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);}}}

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

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

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

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

代碼比較簡(jiǎn)單,最終的解析出來存入 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 方法解析出來的 rolesReachableInOneStepMap 集合。

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

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

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

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

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

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

我們來看下 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)前讀取出來的 lowerRole,說明這個(gè) lowerRole 就是整個(gè)角色體系中的最底層,直接 continue。否則就把 lowerRole 在 rolesReachableInOneStepMap 中對(duì)應(yīng)的 value 拿出來繼續(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)前角色真正可訪問的角色信息。

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)文章:
主站蜘蛛池模板: 欧美日韩亚洲一区二区 | 在线第一页 | 99re在线观看视频 | av网站免费 | 亚洲成人av在线 | 青青久久 | 午夜精品久久久久久久久 | 亚洲欧美高清 | 蜜桃av网址| 国产精品久久国产精品99 gif | jizzjizz亚洲中国少妇 | 精品日韩| 亚洲码欧美码一区二区三区 | 久久视频精品 | 成人在线一区二区 | 日韩精品一区二区三区 | 2024天天干 | 欧美成人精品一区二区三区 | 国产精品久久久久一区二区三区 | 国产视频一二三区 | 国产精品69毛片高清亚洲 | 日韩一区免费观看 | 成人在线免费 | 日日插日日操 | 成人午夜精品久久久久久久蜜臀 | 蜜桃视频在线观看www社区 | 9999国产精品欧美久久久久久 | 欧美日韩电影一区二区三区 | 综合久久综合久久 | 免费观看一区二区三区毛片 | 久久精品国产99国产精品 | 欧美a√ | 日韩精品一区二区三区四区视频 | 国产精品久久久久久亚洲影视 | 久久精品欧美一区二区三区不卡 | 黄av在线 | jizz欧美大片| 日日视频| 午夜精品在线 | 欧美日韩国产精品一区 | 偷拍自拍第一页 | 日本a v在线播放 | 国产精品久久久久影院色老大 | 国产亚洲精品久久久456 | 一区二区久久久 | 男女18免费网站视频 | 中文字幕高清在线 | 国产精品久久久久久婷婷天堂 | 99精品国产高清一区二区麻豆 | 天天干狠狠干 | 日韩欧美在线观看视频网站 | 久久国产精品一区二区三区 | 精品国产91亚洲一区二区三区www | 中文字幕免费看 | 日日摸夜夜添夜夜添亚洲女人 | 欧美日韩亚洲综合 | 国产老女人精品毛片久久 | 中文字幕一区二区在线观看 | 天天亚洲综合 | 中文字幕亚洲欧美精品一区四区 | 亚洲人成在线播放 | 欧美一区不卡 | 天天摸天天摸 | 羞羞视频免费观看 | 成人超碰 | 国产成人精品一区二区三区视频 | 国产日韩av在线 | 成人精品一区二区三区 | 日韩小视频在线播放 | 国产精品免费av | 久久九九精品视频 | 久久国产精品久久久久久久久久 | 日韩视频在线播放 | 亚洲美女一区 | av一区二区在线观看 | 精品一区二区三区免费毛片 | 一区二区三区在线观看国产 | 欧美在线xxx | 国产一区二区精品丝袜 | 中文在线a在线 | 麻豆一区一区三区四区 | 国产精品久久久久久久午夜 | 欧美一区成人 | 国产日韩欧美激情 | 免费成人在线网站 | 亚洲成人免费在线 | 亚洲日韩aⅴ在线视频 | 九九热这里都是精品 | 久草日韩 | 夫妻午夜影院 | 日穴视频在线观看 | 国产精品视频入口 | 成人免费在线视频观看 | 亚洲综合区| 99re在线视频 | 国产美女自拍视频 | 亚洲精品一区二区三区精华液 | 日韩精品在线免费观看视频 | 精品国产乱码久久久久久1区2区 | 精品国产一区二区三区久久久蜜臀 | 欧美一区二区三区久久精品 | 国产精品网站在线观看 | 91精品国产91久久久久久最新 | 欧美成人精品一区二区三区 | 亚洲三级免费观看 | 玖玖在线精品 | 久久精品欧美一区二区三区麻豆 | 精品久久久久久久久久久久久久 | 涩涩综合 | 国产精品一区二区av | 伊人狠狠干 | 亚洲欧美日韩天堂 | 日韩91视频| 在线观看你懂的网站 | 不卡一二区 | 国产成人福利在线 | 精品一区二区三区在线观看 | 91在线视频免费播放 | 日本久久艹 | 久久久久久久久久一区二区 | 91高清视频| 女人夜夜春 | 天天拍天天操 | 亚洲国产婷婷香蕉久久久久久99 | 亚洲成人av在线 | 精品色区 | 日本中文字幕电影 | 美女毛片 | 婷婷丁香激情网 | 国产96在线视频 | 黄色片在线免费观看 | 国产精品一区二区三区四区 | 国产一区二区视频在线 | 日本成人久久 | 一区二区三区亚洲 | 国产欧美精品一区二区三区四区 | 免费观看视频www | 天天艹逼 | 国产一区二区三区在线免费观看 | 国产高清精品一区二区三区 | 免费日韩成人 | av成人在线观看 | 91国内外精品自在线播放 | 欧美日本韩国在线 | 高清av网站| 亚洲综合大片69999 | 日韩污视频在线观看 | 成人一区视频 | 91资源在线 | 高清国产午夜精品久久久久久 | 国产精品黄网站在线观看 | 成人在线免费 | 暖暖日本在线视频 | 日韩激情综合 | 亚洲国产精品va在线看黑人 | 精品人人 | 欧美日韩综合精品 | 黄色在线观看网址 | 亚洲一区在线日韩在线深爱 | 玖玖久久 | 国产一区二区久久 | 日本三级电影网站 | 亚洲免费a | 美女黄网 | 中文字幕在线看第二 | 福利片一区二区 | 日韩爱爱网 | 欧美激情精品久久久久久 | www.涩涩视频 | 日本高清视频在线播放 | 黄色片网站在线看 | 亚洲天堂影视 | 一二三四在线视频观看社区 | 97国产一区二区精品久久呦 | 欧美一区二区三区免费 | 欧美成人手机在线 | 亚洲国产一区二区三区四区 | 日日操av | 一区二区三区精品视频 | 日韩av电影免费 | 最新超碰| 一级人爱视频 | 国产自产才c区 | 国产一级纯肉体一级毛片 | 国产成人99久久亚洲综合精品 | 久久夜色精品国产 | 91久久久久久 | 日韩精品免费在线观看 | 国产精品色婷婷亚洲综合看 | 欧美一区二区二区 | 激情久久久久 | 精品在线播放 | 九九热精品免费视频 | 欧美日韩综合一区 | 日韩精品视频免费专区在线播放 | 男人的天堂久久精品 | 欧美精品久久久久 | 一区二区三区四区在线 | 婷婷综合激情 | 亚洲福利精品 | 六月色婷婷| 国产精品福利在线观看 | 欧美日本一区 | 97人人做人人人难人人做 | 青青草免费在线 | 国产免费拔擦拔擦8x高清在线人 | 亚洲色图p | 91精品国产乱码久久久久久久久 | 欧美日韩精品区 | 国产精品自拍视频 | 免费看爱爱视频 | 精品久久久久久国产 | 久久久久久亚洲 | 久草在线观看福利视频 | 3bmm在线观看视频免费 | 免费av中国| 一区综合 | 欧美99| 91在线区| 欧美日韩在线一区二区 | 国产日韩欧美91 | 成人黄色一区 | 国产高清毛片 | 国产传媒自拍 | 91尤物网站网红尤物福利 | 亚洲成人免费观看 | 99久久精品免费 | 91精品国产综合久久久久久漫画 | 欧美日韩亚洲一区二区 | 日韩成人在线播放 | 香蕉视频一级片 | 欧美一级免费在线观看 | 精品一区二区三区不卡 | 国产综合一区二区 | 久久狠狠 | 麻豆精品国产传媒 | 日韩欧美一区二区三区 | 天天操天天摸天天干 | 国产成人免费视频 | 久久亚洲国产精品日日av夜夜 | 奇米av在线 | 精品免费国产一区二区三区 | 国产精品一区二区久久 | 蜜月aⅴ免费一区二区三区 99re在线视频 | 在线观看亚洲一区二区三区 | 久久久午夜爽爽一区二区三区三州 | 精品久久久久久久久久久久久久久 | 久久久久久久久久久久久久av | 欧美理伦片在线播放 | 青青久久 | 日本精品在线观看 | 五月激情综合网 | 91麻豆精品国产91久久久资源速度 | 黄色骚片 | 国产精品国色综合久久 | 国产精品久久久久免费a∨ 欧洲精品一区 | 久久99国产精品久久99大师 | 色婷婷亚洲国产女人的天堂 | 91超碰在线播放 | 日本成人黄色网址 | 91福利视频导航 | 欧美精品一区二区蜜臀亚洲 | 亚洲精品在线看 | 亚洲最大免费视频 | 国产精品欧美日韩 | 97精品视频在线 | 一级毛片在线播放 | 少妇久久久久 | 日日摸日日碰夜夜爽不卡dvd | 午夜免费观看视频 | 精品久久一二三区 | 红色av社区 | 欧美日韩中文字幕在线播放 | 成人在线视频免费观看 | 成人av在线网 | 国产一区二区久久久 | 国产精品二区三区 | 奇米影视四色777me | 国产精品一区二区av | 国产视频综合在线 | 一级全黄少妇性色生活片免费 | 视频一区二区三区在线观看 | av一区二区三区 | 蜜桃精品在线观看 | 成人中文字幕在线 | 日韩在线视频观看免费 | 国产成人中文字幕 | 国产伦精品一区二区 | 欧美中文字幕在线 | 欧美99热 | 成人在线免费视频 | 精品亚洲一区二区三区四区五区 | 日韩三及片 | 韩日免费视频 | 一区二区三区四区不卡视频 | 97人人超碰| 久久精品国产亚洲一区二区三区 | 久久99视频 | 成人片网址 | 99re在线播放视频 | 国产成人91 | 欧美亚洲免费 | 亚洲视频在线免费观看 | 国产在线一区二区三区 | 中文久久 | 国产成人综合一区二区三区 | 国产精品久久久久久久午夜片 | 一区二区三区免费在线 | 特级淫片日本高清视频免费 | 亚洲八区 | 日日爱夜夜爱 | 天天摸天天操 | 国产精品美女久久久久久久久久久 | 日本精品免费在线观看 | 国产欧美日韩精品在线 | 搞黄视频在线观看 | 99福利视频 | 久久久久亚洲 | 在线播放亚洲 | 精品亚洲一区二区三区 | 日韩精品一91爱爱 | 成人欧美一区二区三区黑人孕妇 | 韩日一区 | 亚洲精品www久久久 www.蜜桃av | 99riav国产一区二区三区 | 国产成人免费视频网站视频社区 | 自拍亚洲 | 在线国产91 | 色综合激情 | 日本一区二区三区免费观看 | 亚洲乱码一区二区三区在线观看 | 久国产 | 91.成人天堂一区 | 久久精品一区二区 | 国产成人99久久亚洲综合精品 | 日韩国产高清在线 | 成人午夜激情 | 欧美色欧美亚洲另类七区 | 国产精品久久久久久久一区探花 | 中文字幕高清视频 | 成人精品在线视频 | 视频一区 中文字幕 | 亚洲精品视频在线观看免费 | 日韩毛片在线观看 | 夜夜久久 | 久久久久亚洲一区二区三区 | 伊人网站 | 欧美日韩免费 | 极品久久久久久 | 国产伦精品一区二区三区四区视频 | 日韩免费福利视频 | 欧美一级网站 | 欧美成人精品一区二区 | concern超碰在线| 久久久久无码国产精品一区 | 日韩视频中文 | 欧美在线视频一区二区 | 亚洲精品电影网在线观看 | 日韩欧美一区二区三区久久婷婷 | 日韩一区二区不卡 | 天天射美女 | 亚洲伊人久久综合 | 亚洲视频中文 | 亚洲电影在线观看 | 夜久久| 久久青青 | 91精品国产欧美一区二区成人 | 91国在线高清视频 | 国产精品1区 | 日韩亚洲一区二区 | 成人午夜免费视频 | 激情一区二区三区 | 欧美一区在线视频 | 国产激情精品一区二区三区 | av中文字幕在线观看 | 日韩一区高清视频 | 国产一区二区在线免费观看 | 国产精品不卡一区 | 国产精品视频一区二区免费不卡 | 久久免费99精品久久久久久 | 在线视频 欧美日韩 | 国内精品一区二区三区 | 日韩爱爱免费视频 | 一区中文字幕 | 不用播放器的免费av | 亚洲精品视频播放 | 日韩视频在线免费观看 | 精品视频免费观看 | 国产综合精品一区二区三区 | 成人欧美一区二区三区黑人孕妇 | 久久精品影视 | 国产在视频一区二区三区吞精 | 91亚洲成人 | 精品久久久久久一区二区 | 欧美精品一区久久 | v亚洲| 精品亚洲一区二区三区 | 欧美久久久久久久久久久久久久 | 中文字幕av一区二区 | 男女黄色免费网站 | 欧洲精品视频在线观看 | 美女久久| 操操操夜夜操 | 欧美日韩国产综合网 | 成人欧美一区二区三区黑人孕妇 | 天天干夜夜爽 | 亚洲成人一区 | 国产精品视频网 | 亚洲欧美91 | 免费在线精品视频 | 精品国产乱码久久久久久蜜柚 | 99成人| 天天爽夜夜春 | 一二三区精品 | 欧美日韩免费一区二区三区 | 亚洲wu码| 国产一区二区精品在线观看 | 久久久久久91 | 久福利 | 四虎精品在线 | 日韩欧美一区在线 | 午夜久久久 | 天天操一操 | av中文字幕在线 | 国产 一区 | 国产日韩一区二区 | 特一级毛片 | 中文字幕在线观看的电影 | 视频一区二区三区在线观看 | 日日精品 | 欧美日韩中文在线观看 | 亚洲精品一二三四五区 | 国产三级日本三级美三级 | 成人午夜精品久久久久久久蜜臀 | 视频福利一区 | av三级在线免费观看 | chinese中国真实乱对白 | 午夜精品一区二区三区四区 | 天天操天天干视频 | 日韩一区二区免费视频 | 日韩爱爱网 | 成人欧美日韩一区二区三区 | 成人久久久精品乱码一区二区三区 | www.久久爱.cn | 日日鲁鲁 | 三区在线| 成人综合在线观看 | 国产免费一区二区三区 | 欧美成人精品一区二区三区 | 九九九色 | 一区二区三区在线 | 在线日韩视频 | 国产一区二区三区精品久久久 | 欧美亚洲国产一区 | 欧美a级成人淫片免费看 | 亚洲最大av网站 | 日韩欧在线| 亚洲一区二区三区四区在线观看 | 久久久精品影院 | 久久久精品久久久久 | 久久国产精品一区二区三区 | 免费av一区二区三区 | 中文字幕免费在线 | 欧美成年黄网站色视频 | 亚洲免费在线视频 | 午夜精品久久久久 | 亚洲aⅴ天堂av在线电影软件 | 一级国产视频 | 天天干夜夜弄 | 国产成人久久精品一区二区三区 | 欧美极品视频 | 日韩在线视频观看 | 欧美精品二区 | 午夜国产一级片 | 国产精品成人国产乱一区 | 日韩99 | 亚洲一区二区三区在线观看免费 | 国产三区四区 | 精品视频一区二区三区四区 | 午夜精品久久久久久 | 日韩免费网站 | 久日精品 | 国产精品综合视频 | 毛片免费观看网址 | 午夜影院免费视频 | 日韩精品一区二区在线观看视频 | 日韩在线观看一区二区 | 日韩中文字幕免费在线播放 | 日韩成人av在线 | 亚洲狠狠爱一区二区三区 | 国内精品一区二区 | 日韩成人高清 | 欧美精品成人一区二区三区四区 | 亚洲国产一区二区三区, | 一区二区免费看 | 精品一区二区三区在线视频 | 日本欧美在线 | 91tv亚洲精品香蕉国产一区 | 91秦先生艺校小琴 | 精品视频一区二区三区四区 | 亚洲人免费视频 | 人人草天天草 | 婷婷色在线 | 亚洲福利小视频 | 欧美激情视频一区二区三区在线播放 | 婷婷中文字幕 | 午夜黄色影院 | 一区二区三区高清 | 天天看天天爽 | 国产精品二区三区 | 国产精品一区二区三区在线免费观看 | 激情五月婷婷综合 | 日韩视频一区在线观看 | 亚洲精品久久久 | 日本一区二区不卡 | 黄色av网站在线免费观看 | 久久久www| 国产精品成人久久久久 | 欧美视频免费 | 久久国产高清 | 亚洲第一成年免费网站 | 国产一级黄片毛片 | 国产一区二区三区免费 | 精品久久一区二区三区 | 荡女妇边被c边呻吟视频 | 天天艹逼| 日本在线免费观看 | 国产高清视频 | 激情小视频网站 | 国产精品久久久久久久久久妞妞 | 成人精品久久久 | www.国产精品| 9l蝌蚪porny中文自拍 | 91免费看| 久久在线视频 | 国产欧美精品一区 | 久久久一区二区 | 岛国av一区| 欧美久久久 | 91精品国产乱码久久久久久久久 | 无毒黄网 | 国产福利精品一区 | 亚洲免费人成在线视频观看 | 免费午夜剧场 | 国产女精品 | 亚洲精品久久久久久久久久久 | 欧美二区在线观看 | www天天干| 开操网| 亚洲天天做 | 国产精品久久久久久久久动漫 | 久久久久在线 | 亚洲人成人一区二区在线观看 | h在线免费| 天天爽夜夜爽 | 不卡一区二区三区四区 | 在线观看欧美一区 | 精品一区二区三区在线观看 | 欧美国产综合 | 四季久久免费一区二区三区四区 | 久久久久久免费看 | 成人av影片在线观看 | 免费黄色在线视频网址 | 欧美成人精品激情在线观看 | 精品精品| 国产精品久久7777 | 日比视频网站 | 九九亚洲视频 | 国产精品毛片久久久久久 | 99视频精品 | 亚洲一区视频 | 国产成人精品一区二区三区四区 | 亚洲狠狠爱一区二区三区 | 亚洲精品视频在线播放 | 国产男女免费视频 | 在线精品国产 | 免费观看电视在线高清视频 | 激情小网站 | 天天干人人 | 人人干天天操 | 日韩欧美精品在线 | 一区小视频 | 在线播放三级 | 精品 99| 国产精品久久久久影院色老大 | 91精品国产一区二区 | 在线国产一区二区 | 91久久久www播放日本观看 | 特级淫片日本高清视频免费 | 偷派自拍 | 亚洲成人一区二区 | 日韩精品一区二区三区在线观看 | 精品一区二区免费视频 | 欧美日韩高清在线一区 | 国产精品视频入口 | 成人在线一区二区三区 | 国产精品第一国产精品 | 国产在线不卡 | 狠狠爱天天操 | 在线播放亚洲 | 久久久久久成人 | 亚洲精品乱码久久久久久蜜桃 | 一区免费在线观看 | 欧美一区二区三区在线视频 | 国产亚洲一区二区三区在线观看 | 韩国毛片在线 | 91精品久久久久久久 | 精品视频久久 | 91欧美在线 | 婷婷色国产偷v国产偷v小说 | 一级片在线观看 | 综合久久网| 国产成人99| 国产一区二区三区久久久 | 亚洲一区二区三区高清 |