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

SpringSecurity系列之CAS 單點(diǎn)登錄對接數(shù)據(jù)庫

運(yùn)維 數(shù)據(jù)庫運(yùn)維
我們用 CAS Server 做單點(diǎn)登錄,CAS Server 主要是負(fù)責(zé)認(rèn)證的,也就是它主要解決登錄問題。登錄成功之后,還有一個(gè)權(quán)限處理的問題,權(quán)限的問題則交由各個(gè) CAS Client 自行處理,并不在 CAS Server 中完成。

[[409542]]

 1.整體思路

先來看整體思路。

我們用 CAS Server 做單點(diǎn)登錄,CAS Server 主要是負(fù)責(zé)認(rèn)證的,也就是它主要解決登錄問題。登錄成功之后,還有一個(gè)權(quán)限處理的問題,權(quán)限的問題則交由各個(gè) CAS Client 自行處理,并不在 CAS Server 中完成。

在上篇文章中,松哥有教過大家定義 UserDetailsService,不知道大家是否還記得如下代碼(忘記了可以參考上篇文章:Spring Boot 實(shí)現(xiàn)單點(diǎn)登錄的第三種方案!):

  1. @Component 
  2. @Primary 
  3. public class UserDetailsServiceImpl implements UserDetailsService{ 
  4.  
  5.     @Override 
  6.     public UserDetails loadUserByUsername(String s) throws UsernameNotFoundException { 
  7.         return new User(s, "123"truetruetruetrue
  8.                 AuthorityUtils.createAuthorityList("ROLE_user")); 
  9.     } 

這段代碼是在什么時(shí)候執(zhí)行呢?

如果我們沒有使用 CAS 這一套的話,這段代碼當(dāng)然是在用戶登錄的時(shí)候執(zhí)行,用戶登錄時(shí),從數(shù)據(jù)庫中查詢用戶的信息,然后做校驗(yàn)(參考本系列前面文章就懂)。

如果我們使用 CAS 這一套,用戶登錄的校驗(yàn)將在 CAS Server 上執(zhí)行,CAS Client 就不用做校驗(yàn)工作了,但是為什么我們還需要定義 UserDetailsService 呢?這是為了當(dāng)用戶在 CAS Server 上登錄成功之后,拿著用戶名回到 CAS Client,然后我們再去數(shù)據(jù)庫中根據(jù)用戶名獲取用戶的詳細(xì)信息,包括用戶的角色等,進(jìn)而在后面的鑒權(quán)中用上角色。

好了,這是我們一個(gè)大致的思路,接下來我們來看具體實(shí)現(xiàn)。

2.具體實(shí)現(xiàn)

接下來的配置在 松哥手把手教你入門 Spring Boot + CAS 單點(diǎn)登錄 一文的基礎(chǔ)上完成,所以還沒看前面文章的小伙伴建議先看一下哦。

2.1 準(zhǔn)備工作

首先我們先在數(shù)據(jù)庫中準(zhǔn)備一下用戶表、角色表以及用戶角色關(guān)聯(lián)表:

  1. CREATE TABLE `t_role` ( 
  2.   `id` bigint(20) NOT NULL AUTO_INCREMENT, 
  3.   `namevarchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL
  4.   `name_zh` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL
  5.   PRIMARY KEY (`id`) 
  6. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; 
  7.  
  8. CREATE TABLE `t_user` ( 
  9.   `id` bigint(20) NOT NULL AUTO_INCREMENT, 
  10.   `account_non_expired` bit(1) NOT NULL
  11.   `account_non_locked` bit(1) NOT NULL
  12.   `credentials_non_expired` bit(1) NOT NULL
  13.   `enabled` bit(1) NOT NULL
  14.   `passwordvarchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL
  15.   `username` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL
  16.   PRIMARY KEY (`id`) 
  17. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; 
  18.  
  19. CREATE TABLE `t_user_roles` ( 
  20.   `t_user_id` bigint(20) NOT NULL
  21.   `roles_id` bigint(20) NOT NULL
  22.   KEY `FKj47yp3hhtsoajht9793tbdrp4` (`roles_id`), 
  23.   KEY `FK7l00c7jb4804xlpmk1k26texy` (`t_user_id`), 
  24.   CONSTRAINT `FK7l00c7jb4804xlpmk1k26texy` FOREIGN KEY (`t_user_id`) REFERENCES `t_user` (`id`), 
  25.   CONSTRAINT `FKj47yp3hhtsoajht9793tbdrp4` FOREIGN KEY (`roles_id`) REFERENCES `t_role` (`id`) 
  26. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; 
  27.  
  28. INSERT INTO `t_role` (`id`, `name`, `name_zh`) VALUES (1,'ROLE_admin','管理員'),(2,'ROLE_user','普通用戶'); 
  29. INSERT INTO `t_user` (`id`, `account_non_expired`, `account_non_locked`, `credentials_non_expired`, `enabled`, `password`, `username`) VALUES (1,b'1',b'1',b'1',b'1','123','javaboy'),(2,b'1',b'1',b'1',b'1','123','江南一點(diǎn)雨'); 
  30. INSERT INTO `t_user_roles` (`t_user_id`, `roles_id`) VALUES (1,1),(2,2); 

2.2 CAS Server

然后我們要在 CAS Server 的 pom.xml 文件中添加兩個(gè)依賴:

  1. <dependency> 
  2.     <groupId>org.apereo.cas</groupId> 
  3.     <artifactId>cas-server-support-jdbc-drivers</artifactId> 
  4.     <version>${cas.version}</version> 
  5. </dependency> 
  6. <dependency> 
  7.     <groupId>org.apereo.cas</groupId> 
  8.     <artifactId>cas-server-support-jdbc</artifactId> 
  9.     <version>${cas.version}</version> 
  10. </dependency> 

 

注意這里不用添加數(shù)據(jù)庫驅(qū)動,系統(tǒng)會自動解決。

添加完成之后,再在 src/main/resources/application.properties 文件中添加如下配置:

  1. cas.authn.jdbc.query[0].url=jdbc:mysql://127.0.0.1:3306/withjpa?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false 
  2. cas.authn.jdbc.query[0].user=root 
  3. cas.authn.jdbc.query[0].password=123 
  4. cas.authn.jdbc.query[0].sql=select * from t_user where username=? 
  5. cas.authn.jdbc.query[0].fieldPassword=password 
  6. cas.authn.jdbc.query[0].driverClass=com.mysql.cj.jdbc.Driver 
  • 前三行配置是數(shù)據(jù)庫基本連接配置,這個(gè)無需我多說。
  • 第四行表示配置用戶查詢 sql,根據(jù)用戶名查詢出用戶的所有信息。
  • 第五行表示數(shù)據(jù)庫中密碼的字段名字是什么。
  • 第六行是數(shù)據(jù)庫驅(qū)動。

OK,配置完成后,接下來我們就來重啟 CAS Server:

  1. ./build.sh run 

啟動成功后,瀏覽器輸入 https://cas.javaboy.org:8443/cas/login 就可以進(jìn)入登錄頁面了(注意是 https 哦):

此時(shí)登錄用戶名就是 javaboy,密碼是 123。

2.3 CAS Client

接下來我們再來看看 CAS Client 要做哪些完善。

接下來的配置在 Spring Boot 實(shí)現(xiàn)單點(diǎn)登錄的第三種方案! 一文的基礎(chǔ)上完成,所以還沒看前面文章的小伙伴建議先看一下哦。

同時(shí),為了案例簡潔,我這里使用 JPA 來操作數(shù)據(jù)庫,要是大家不熟悉這塊的操作,可以參考本系列之前的文章:Spring Security+Spring Data Jpa 強(qiáng)強(qiáng)聯(lián)手,安全管理只有更簡單!。

CAS Client 中的對接主要是實(shí)現(xiàn) UserDetailsService 接口。這里要用到數(shù)據(jù)庫查詢,所以我們首先添加數(shù)據(jù)庫相關(guān)依賴:

  1. <dependency> 
  2.     <groupId>mysql</groupId> 
  3.     <artifactId>mysql-connector-java</artifactId> 
  4. </dependency> 
  5. <dependency> 
  6.     <groupId>org.springframework.boot</groupId> 
  7.     <artifactId>spring-boot-starter-data-jpa</artifactId> 
  8. </dependency> 

 

然后在 application.properties 中配置數(shù)據(jù)庫連接信息:

  1. spring.datasource.username=root 
  2. spring.datasource.password=123 
  3. spring.datasource.url=jdbc:mysql:///withjpa?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai 
  4.  
  5. spring.jpa.database=mysql 
  6. spring.jpa.database-platform=mysql 
  7. spring.jpa.hibernate.ddl-auto=update 
  8. spring.jpa.show-sql=true 
  9. spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect 

都是常規(guī)配置,我們就不再重復(fù)解釋了。

接下來我們創(chuàng)建兩個(gè)實(shí)體類,分別表示用戶角色了用戶類:

用戶角色:

  1. @Entity(name = "t_role"
  2. public class Role { 
  3.     @Id 
  4.     @GeneratedValue(strategy = GenerationType.IDENTITY) 
  5.     private Long id; 
  6.     private String name
  7.     private String nameZh; 
  8.     //省略 getter/setter 

這個(gè)實(shí)體類用來描述用戶角色信息,有角色 id、角色名稱(英文、中文),@Entity 表示這是一個(gè)實(shí)體類,項(xiàng)目啟動后,將會根據(jù)實(shí)體類的屬性在數(shù)據(jù)庫中自動創(chuàng)建一個(gè)角色表。

用戶實(shí)體類:

  1. @Entity(name = "t_user"
  2. public class User implements UserDetails { 
  3.     @Id 
  4.     @GeneratedValue(strategy = GenerationType.IDENTITY) 
  5.     private Long id; 
  6.     private String username; 
  7.     private String password
  8.     private boolean accountNonExpired; 
  9.     private boolean accountNonLocked; 
  10.     private boolean credentialsNonExpired; 
  11.     private boolean enabled; 
  12.     @ManyToMany(fetch = FetchType.EAGER,cascade = CascadeType.PERSIST) 
  13.     private List<Role> roles; 
  14.     @Override 
  15.     public Collection<? extends GrantedAuthority> getAuthorities() { 
  16.         List<SimpleGrantedAuthority> authorities = new ArrayList<>(); 
  17.         for (Role role : getRoles()) { 
  18.             authorities.add(new SimpleGrantedAuthority(role.getName())); 
  19.         } 
  20.         return authorities; 
  21.     } 
  22.     @Override 
  23.     public String getPassword() { 
  24.         return password
  25.     } 
  26.  
  27.     @Override 
  28.     public String getUsername() { 
  29.         return username; 
  30.     } 
  31.  
  32.     @Override 
  33.     public boolean isAccountNonExpired() { 
  34.         return accountNonExpired; 
  35.     } 
  36.  
  37.     @Override 
  38.     public boolean isAccountNonLocked() { 
  39.         return accountNonLocked; 
  40.     } 
  41.  
  42.     @Override 
  43.     public boolean isCredentialsNonExpired() { 
  44.         return credentialsNonExpired; 
  45.     } 
  46.  
  47.     @Override 
  48.     public boolean isEnabled() { 
  49.         return enabled; 
  50.     } 
  51.     //省略其他 get/set 方法 

用戶實(shí)體類主要需要實(shí)現(xiàn) UserDetails 接口,并實(shí)現(xiàn)接口中的方法。

這里的字段基本都好理解,幾個(gè)特殊的我來稍微說一下:

  • accountNonExpired、accountNonLocked、credentialsNonExpired、enabled 這四個(gè)屬性分別用來描述用戶的狀態(tài),表示賬戶是否沒有過期、賬戶是否沒有被鎖定、密碼是否沒有過期、以及賬戶是否可用。
  • roles 屬性表示用戶的角色,User 和 Role 是多對多關(guān)系,用一個(gè) @ManyToMany 注解來描述。
  • getAuthorities 方法返回用戶的角色信息,我們在這個(gè)方法中把自己的 Role 稍微轉(zhuǎn)化一下即可。

數(shù)據(jù)模型準(zhǔn)備好之后,我們再來定義一個(gè) UserDao:

  1. public interface UserDao extends JpaRepository<User,Long> { 
  2.     User findUserByUsername(String username); 

這里的東西很簡單,我們只需要繼承 JpaRepository 然后提供一個(gè)根據(jù) username 查詢 user 的方法即可。如果小伙伴們不熟悉 Spring Data Jpa 的操作,可以在公眾號后臺回復(fù) springboot 獲取松哥手敲的 Spring Boot 教程,里邊有 jpa 相關(guān)操作,也可以看看松哥錄制的視頻教程:Spring Boot + Vue 系列視頻教程。

在接下來定義 UserService ,如下:

  1. @Component 
  2. @Primary 
  3. public class UserDetailsServiceImpl implements UserDetailsService{ 
  4.  
  5.     @Autowired 
  6.     UserDao userDao; 
  7.     @Override 
  8.     public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException { 
  9.         User user = userDao.findUserByUsername(username); 
  10.         if (user == null) { 
  11.             throw new UsernameNotFoundException("用戶不存在"); 
  12.         } 
  13.         return user
  14.     } 

我們自己定義的 UserDetailsServiceImpl 需要實(shí)現(xiàn) UserDetailsService 接口,實(shí)現(xiàn)該接口,就要實(shí)現(xiàn)接口中的方法,也就是 loadUserByUsername。

OK ,如此之后,我們的 CAS Client 現(xiàn)在就開發(fā)完成了,接下來啟動 CAS Client,啟動成功后,瀏覽器輸入 http://client1.cas.javaboy.org:8080/user/hello 訪問 hello 接口,此時(shí)會自動跳轉(zhuǎn)到 CAS Server 上登錄,登錄的用戶名密碼就是我們存儲在數(shù)據(jù)庫中的用戶名密碼。登錄成功之后,經(jīng)過兩個(gè)重定向,會重新回到 hello 接口。

hello 接口訪問成功之后,再去訪問 /user/hello 接口,就會發(fā)現(xiàn)權(quán)限配置也生效了。

這里比較簡單,我就不給大家截圖了。

3.小結(jié)

好啦,今天主要和小伙伴們分享了一下 Spring Security + CAS 單點(diǎn)登錄中,如何使用本地?cái)?shù)據(jù)庫。一個(gè)核心的思路是,認(rèn)證由 CAS Server 來做,權(quán)限相關(guān)的操作,則還是由 Spring Security 來完成。

好了 ,本文就說到這里,本文相關(guān)案例我已經(jīng)上傳到 GitHub ,大家可以自行下載:https://github.com/lenve/spring-security-samples

本文轉(zhuǎn)載自微信公眾號「江南一點(diǎn)雨」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系江南一點(diǎn)雨公眾號。

 

責(zé)任編輯:武曉燕 來源: 江南一點(diǎn)雨
相關(guān)推薦

2021-07-02 10:45:53

SpringBootCAS登錄

2021-05-08 10:44:35

SpringSecur登錄詳情

2021-07-13 14:05:37

單點(diǎn)登錄頁面

2021-09-06 10:24:12

鴻蒙HarmonyOS應(yīng)用

2021-09-03 15:41:00

鴻蒙HarmonyOS應(yīng)用

2021-06-29 12:27:19

Spring BootCAS 登錄

2012-12-03 13:54:15

IBMdW

2022-05-12 07:37:51

單點(diǎn)登錄微服務(wù)開源

2021-04-21 10:38:44

Spring Boot RememberMe安全

2020-10-18 07:33:58

單點(diǎn)登錄cas-serverkeycloak

2011-04-18 13:46:24

數(shù)據(jù)庫設(shè)計(jì)

2010-09-30 08:27:48

2010-09-30 09:11:01

2021-05-24 09:08:50

數(shù)據(jù)庫工具技術(shù)

2011-09-23 09:09:38

數(shù)據(jù)庫遷移

2023-09-19 09:21:20

2021-05-12 10:39:51

SpringSecurity設(shè)備

2011-08-24 09:56:07

Oracle hand虛擬專用數(shù)據(jù)庫VPD

2023-08-24 08:47:38

2011-07-27 08:56:32

Oracle數(shù)據(jù)庫綁定變量軟解析
點(diǎn)贊
收藏

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

欧美极品色图| 欧美在线激情视频| 少妇伦子伦精品无吗| 国内小视频在线看| 91美女在线观看| 国产精品精品视频| 九九在线观看视频| 久久最新网址| 欧美成人乱码一区二区三区| 日韩人妻精品无码一区二区三区| 日本在线免费| 91网页版在线| 亚洲一区二区三区四区在线播放 | 97高清免费视频| 手机免费观看av| 老牛精品亚洲成av人片| 欧美日韩精品一二三区| 欧美视频免费看欧美视频| 91看片在线观看| 97精品国产97久久久久久久久久久久| 成人h猎奇视频网站| 日韩中文字幕在线观看视频| 中文字幕一区二区三区乱码图片| 亚洲欧美激情视频| 国产xxxx视频| 欧美专区一区| 在线播放亚洲一区| 国产无套粉嫩白浆内谢的出处| 3d玉蒲团在线观看| 国产精品福利一区二区三区| 欧美高清视频一区| 天堂中文在线官网| 粉嫩欧美一区二区三区高清影视| 国产精品综合不卡av| 日本三级小视频| 亚洲福利专区| 欧美日韩国产va另类| 亚洲人与黑人屁股眼交| av资源久久| 亚洲欧美日韩天堂一区二区| 国产污在线观看| 亚洲啊v在线免费视频| 欧美久久久久久久久久| 九九热99视频| 国产精品蜜月aⅴ在线| 91久久一区二区| 久久精品午夜福利| 日本免费一区二区三区四区| 疯狂欧美牲乱大交777| 亚洲国产精品无码观看久久| 特级毛片在线| 亚洲一区在线观看免费观看电影高清 | 欧美精品制服第一页| 午夜国产小视频| 99精品小视频| 播播国产欧美激情| 午夜三级在线观看| 香蕉精品视频在线观看| 久久亚洲国产精品| 深夜福利影院在线观看| 午夜久久tv| 久久久久免费精品国产| 欧美成人aaaaⅴ片在线看| 伊人成人在线| 欧美在线性视频| 加勒比在线一区| 人人超碰91尤物精品国产| 国产精品中文字幕久久久| 国产又粗又猛又黄| 国产真实乱对白精彩久久| 96久久精品| 欧洲av在线播放| 久久色在线视频| 亚洲一卡二卡区| av观看在线| 天天色图综合网| 韩国一区二区av| 中文字幕成人| 亚洲精品在线网站| 手机在线成人av| 精品一区二区三区在线| 日韩视频免费在线观看| 国产在线观看免费视频软件| 欧美福利一区| 青草成人免费视频| ,一级淫片a看免费| 国产成人免费高清| 欧美精品成人一区二区在线观看 | 99精品视频在线播放免费| 成人av一区二区三区| 日韩高清在线播放| 99se视频在线观看| 欧美日韩国产黄| 亚洲综合欧美激情| 风间由美中文字幕在线看视频国产欧美 | 亚洲一区自拍偷拍| 久久久久免费精品| 日本在线一区二区三区| 亚洲精品在线观看www| 久久精品一区二区三区四区五区 | 久久精品国产露脸对白| 另类春色校园亚洲| 精品国模在线视频| 国产成人一级片| 国产一区二区视频在线| 欧美精品成人一区二区在线观看| 制服丝袜在线播放| 欧美伊人久久大香线蕉综合69| 麻豆免费在线观看视频| 成人亚洲一区| 日本精品视频在线播放| www.天堂av.com| 欧美国产精品专区| 免费国产黄色网址| 亚洲成人偷拍| 精品国产欧美成人夜夜嗨| 亚洲永久精品在线观看| 国产成人激情av| 一级日韩一区在线观看| 高清不卡亚洲| 亚洲激情第一页| 欧洲猛交xxxx乱大交3| 看国产成人h片视频| 久久综合九色欧美狠狠| 91超碰在线免费| 欧美一卡二卡三卡| 女人裸体性做爰全过| 视频一区视频二区中文| 精品无人乱码一区二区三区的优势| 好了av在线| 欧美日韩中字一区| 欧美激情亚洲色图| 欧美专区18| 看欧美日韩国产| 女厕盗摄一区二区三区| 亚洲国产精品悠悠久久琪琪| 久久久久成人精品无码| 国产精品香蕉一区二区三区| 国产日产欧美一区二区| 国产精品一区二区精品| 日韩视频―中文字幕| 99re热视频| 国产精品天美传媒沈樵| 午夜激情av在线| 欧美日韩高清| 国产精品自产拍在线观看| jizz在线观看| 欧美亚洲尤物久久| 亚洲毛片亚洲毛片亚洲毛片| 蜜桃av一区二区在线观看| 亚洲成人18| 九七影院97影院理论片久久| 中文字幕日韩欧美在线| 伊人亚洲综合网| 亚洲欧洲色图综合| 午夜福利123| 欧美影院一区| 国产98在线|日韩| 僵尸再翻生在线观看免费国语| 精品粉嫩超白一线天av| 日韩大片免费在线观看| 93久久精品日日躁夜夜躁欧美| 高清在线观看免费| 精品国产一区二区三区小蝌蚪| 国产v综合ⅴ日韩v欧美大片| av中文在线| 91精品国产综合久久久久| 国产这里有精品| 成人av电影免费观看| 久久久999视频| 奇米亚洲欧美| 成人欧美一区二区三区黑人孕妇| 91三级在线| 日韩成人在线观看| 瑟瑟视频在线免费观看| 亚洲欧美日本在线| 亚洲国产精品无码久久久久高潮 | 国产精品午夜国产小视频| 麻豆av在线免费看| 精品久久久久久久久久久久久久久 | 精品久久久久一区| av片免费观看| 亚洲三级视频在线观看| 亚洲天堂美女视频| 蜜桃视频一区二区三区在线观看| 色哟哟免费网站| 久操国产精品| 91在线观看免费高清| 白浆在线视频| 日韩在线欧美在线国产在线| 亚洲欧美黄色片| 日本道精品一区二区三区 | 色哟哟国产精品| 日韩三级久久久| eeuss鲁片一区二区三区在线观看| 91av在线免费播放| 欧美激情在线| 日本一区二区三区视频在线观看 | 国产成人av一区二区| 99精品视频在线看| 欧美成人tv| 日韩av电影免费观看| 视频一区日韩| 国产精品视频久久久久| 欧美极品videos大乳护士| 久久精品在线播放| 欧洲一区av| 精品国产一二三| 在线免费观看中文字幕| 欧美日韩免费网站| 永久看片925tv| 中文欧美字幕免费| theav精尽人亡av| 高清shemale亚洲人妖| 免费看涩涩视频| 久久婷婷麻豆| 奇米精品一区二区三区| 欧美激情综合| 日韩最新中文字幕| 久久精品国产大片免费观看| 久久伊人资源站| 牛牛影视久久网| 国产精品国产一区二区| 国产高清亚洲| 国产拍精品一二三| 四虎4545www精品视频| 91大神福利视频在线| 欧美女同一区| 久久夜色撩人精品| 麻豆tv在线| 日韩视频精品在线| 9色在线视频网站| 中文字幕亚洲专区| 国产成人天天5g影院在线观看| 国产视频久久久久久久| 午夜视频在线播放| 日韩av在线网址| 天堂影院在线| 亚洲欧美精品中文字幕在线| 欧美色综合一区二区三区| 亚洲第一页自拍| 污视频软件在线观看| 亚洲国产精品成人av| 色噜噜在线播放| 亚洲第一页在线| 视频三区在线观看| 亚洲精品中文字幕av| 人成在线免费视频| 亚洲午夜激情免费视频| a天堂在线资源| 精品国产欧美一区二区五十路| 黄网站在线免费| 欧美伦理91i| 成人女同在线观看| 久久久伊人日本| 亚洲插插视频| 国产精品视频区1| av日韩在线免费观看| 亚洲自拍偷拍色图| 国产精品tv| 欧美一进一出视频| 色狮一区二区三区四区视频| 最新视频 - x88av| 日韩午夜免费| 又色又爽又高潮免费视频国产| 免费观看成人av| 国模大尺度视频| 99精品在线免费| 极品蜜桃臀肥臀-x88av| 亚洲色图在线视频| 日韩欧美性视频| 欧美在线免费播放| 国产绿帽刺激高潮对白| 亚洲成年人影院在线| 欧美婷婷久久五月精品三区| 最近2019中文字幕第三页视频| av网站在线免费| 98精品国产自产在线观看| www成人在线视频| 91久久大香伊蕉在人线| 天堂av一区二区三区在线播放| 亚洲一区二区三区精品动漫| 亚洲高清在线| 777视频在线| 成人高清视频在线观看| 一级黄色片网址| 夜夜爽夜夜爽精品视频| 人人草在线观看| 欧美一区二区视频在线观看2020| 少妇av在线播放| 色系列之999| 成入视频在线观看| 91精品久久久久久久久久久久久| 精品人人人人| 一区二区不卡在线观看| 一本色道久久精品| 一级日本黄色片| 国产婷婷色一区二区三区在线| 久草视频手机在线观看| 欧美色老头old∨ideo| 少妇av一区二区| 九九热精品视频在线播放| 播放一区二区| 精品国产电影| 在线中文字幕第一区| 日韩手机在线观看视频| 大胆亚洲人体视频| 小早川怜子一区二区的演员表| 欧美性xxxxx极品娇小| www.天堂av.com| 麻豆一区二区在线观看| se01亚洲视频| 久久国产精品-国产精品| 欧美va天堂在线| 亚洲最大天堂网| 国产日本亚洲高清| 日韩不卡视频在线| 精品国产乱码久久久久久免费 | 九九视频精品全部免费播放| 91国在线高清视频| 黄色精品一二区| 国产极品视频在线观看| 色哟哟国产精品| 欧美性孕妇孕交| 欧美最猛性xxxxx(亚洲精品)| japanese色系久久精品| 免费成人深夜夜行网站视频| 免费国产亚洲视频| 国内精品卡一卡二卡三| 色综合久久久久综合体| 亚洲欧美一区二区三| 97国产精品免费视频| 红杏视频成人| 精品国产av无码一区二区三区| 国产成人免费视频| 久久中文字幕无码| 精品免费日韩av| 欧美性爽视频| 97人人模人人爽人人喊38tv| 女人色偷偷aa久久天堂| 韩国三级hd中文字幕有哪些| 亚洲视频每日更新| 国产美女精品视频国产| 久久手机免费视频| 免费观看亚洲天堂| 9色porny| 91丨九色丨黑人外教| 久草手机在线观看| 亚洲精品天天看| 忘忧草在线影院两性视频| 国产综合动作在线观看| 99香蕉国产精品偷在线观看| 特级西西人体wwwww| 精品人伦一区二区三区蜜桃网站 | 粉嫩av一区二区三区天美传媒 | 一个色综合导航| 精品3atv在线视频| 色女孩综合网| 久久www免费人成看片高清| 波兰性xxxxx极品hd| 在线电影欧美成精品| 新版中文在线官网| 国产成人精品一区二区三区福利| 伊人成人在线视频| 国产精品1000部啪视频| 欧美中文一区二区三区| 快射av在线播放一区| 国产精华一区二区三区| 一区二区三区四区五区在线| 亚洲自拍偷拍图| 制服丝袜亚洲色图| 久久久久黄久久免费漫画| 蜜桃狠狠色伊人亚洲综合网站| 男人的天堂久久精品| 欧美成人一二三区| 日韩精品免费在线| 国内欧美日韩| av网站手机在线观看| 久久久久国产精品人| 91欧美日韩麻豆精品| 久久久久久久av| 成人一区二区| 精品无码人妻少妇久久久久久| 一本一本大道香蕉久在线精品 | 97视频在线看| 色欧美自拍视频| 欧美夫妇交换xxx| 欧美日韩在线三区| 国精一区二区三区| 亚洲春色综合另类校园电影| 国产成人99久久亚洲综合精品| 天堂网一区二区三区| 久久精品国产精品亚洲| 人妖一区二区三区| 99日在线视频| 美足av综合网| 国产一区在线免费观看| 久久99国产精品麻豆| 国产成人精品一区二三区| 久久精品人人爽|