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

寫了這么多年代碼,這樣的登錄方式還是頭一回見!

開發 前端
Spring Security 系列還沒搞完,最近還在研究。有的時候我不禁想,如果從 Spring Security 誕生的第一天開始,我們就一直在追蹤它,那么今天再去看它的源碼一定很簡單,因為我們了解到每一行代碼的緣由。

 Spring Security 系列還沒搞完,最近還在研究。

[[332172]]

有的時候我不禁想,如果從 Spring Security 誕生的第一天開始,我們就一直在追蹤它,那么今天再去看它的源碼一定很簡單,因為我們了解到每一行代碼的緣由。

然而事實上我們大部分人都是中途接觸到它的,包括松哥自己。所以在閱讀源碼的時候,有時候會遇到一些不是那么容易理解的東西,并不是說這個有多難,只是我們不了解 N 年前的開發環境,因此也就不容易理解某一行代碼出現的意義。

所以為了搞透徹這個框架,有時候我們還得去了解之前發生了什么。

這就跟學 Spring Boot 一樣,很多小伙伴問要不要跳過 SSM ,我說不要,甚至還專門寫了一篇文章(Spring Boot 要怎么學?要學哪些東西?要不要先學 SSM?),跳過了 SSM ,Spring Boot 中的很多東西就無法真正理解。

扯遠了。。。

Spring Security 中對 HttpServletRequest 請求進行了封裝,重寫了 HttpServletRequest 中的幾個和安全管理相關的方法,想要理解 Spring Security 中的重寫,就要先從 HttpServletRequest 開始看起。

有小伙伴可能會說,HttpServletRequest 能跟安全管理扯上什么關系?今天松哥就來和大家捋一捋,我們不講 Spring Security,就來單純講講 HttpServletRequest 中的安全管理方法。

1.HttpServletRequest

在 HttpServletRequest 中,我們常用的方法如:

  • public String getHeader(String name);
  • public String getParameter(String name);
  • public ServletInputStream getInputStream()
  • ...

這些常見的方法可能大家都有用過,還有一些不常見的,和安全相關的方法:

  1. public String getRemoteUser(); 
  2. public boolean isUserInRole(String role); 
  3. public java.security.Principal getUserPrincipal(); 
  4. public boolean authenticate(HttpServletResponse response) 
  5.             throws IOException, ServletException; 
  6. public void login(String username, String password) throws ServletException; 
  7. public void logout() throws ServletException; 

前面三個方法,在之前的 Servlet 中就有,后面三個方法,則是從 Servlet3.0 開始新增加的方法。從方法名上就可以看出,這些都是和認證相關的方法,但是這些方法,我估計很多小伙伴都沒用過,因為不太實用。

在 Spring Security 框架中,對這些方法進行了重寫,進而帶來了一些好玩并且方便的特性,這個松哥在后面的文章中再和大家分享。

要理解 Spring Security 中的封裝,就得先來看看,不用框架,這些方法該怎么用!

2.實踐出真

知我們創建一個普普通通的 Web 項目,不使用任何框架(后面的案例都基于此),然后在 doGet 方法中打印出 HttpServletRequest 的類型,代碼如下:

  1. @Override 
  2. protected void doGet(HttpServletRequest request, HttpServletResponse resp) throws ServletException, IOException { 
  3.     System.out.println("request.getClass() = " + request.getClass()); 

代碼運行打印結果如下:

  1. request.getClass() = class org.apache.catalina.connector.RequestFacade 

HttpServletRequest 是一個接口,而 RequestFacade 則是一個正兒八經的 class。

HttpServletRequest 是 Servlet 規范中定義的 ServletRequest,這相當于是標準的 Request;但是在 Tomcat 中的 Request 則是 Tomcat 自己自定義的 Request,自定義的 Request 實現了 HttpServletRequest 接口并且還定義了很多自己的方法,這些方法還是 public 的,如果直接使用 Tomcat 自定義的 Request,開發者只需要向下轉型就能調用這些 Tomcat 內部方法,這是有問題的,所以又用 RequestFacade 封裝了一下,以至于我們實際上用到的就是 RequestFacade 對象。

那么毫無疑問,HttpServletRequest#login 方法具體實現就是在 Tomcat 的 Request#login 方法中完成的。經過源碼追蹤,我們發現,登錄的數據源是由 Tomcat 中的 Realm 提供的,注意這個 Realm 不是 Shiro 中的 Realm。

Tomcat 中提供了 6 種 Realm,可以支持與各種數據源的對接:

  • JDBCRealm:很明顯,這個 Realm 可以對接到數據庫中的用戶信息。
  • DataSourceRealm:它通過一個 JNDI 命名的 JDBC 數據源在關系型數據庫中查找用戶。
  • JNDIRealm:通過一個 JNDI 提供者1在 LDAP 目錄服務器中查找用戶。
  • UserDatabaseRealm:這個數據源在 Tomcat 的配置文件中 conf/tomcat-users.xml。
  • MemoryRealm:這個數據源是在內存中,內存中的數據也是從 conf/tomcat-users.xml 配置文件中加載的。
  • JAASRealm:JAAS 架構來實現對用戶身份的驗證。

如果這些 Realm 無法滿足需求,當然我們也可以自定義 Realm,只不過一般我們不這樣做,為啥?因為這這種登錄方式用的太少了!今天這篇文章純粹是和小伙伴們開開眼界。

如果自定義 Realm 的話,我們只需要實現 org.apache.catalina.Realm 接口,然后將編譯好的 jar 放到 $CATALINA_HOME/lib 下即可,具體的配置則和下面介紹的一致。

接下來我和大家介紹兩種配置方式,一個是 UserDatabaseRealm,另一個是 JDBCRealm。

2.1 基于配置文件登錄

我們先來定義一個 LoginServlet:

  1. @WebServlet(urlPatterns = "/login"
  2. public class LoginServlet extends HttpServlet { 
  3.     @Override 
  4.     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
  5.         doPost(req, resp); 
  6.     } 
  7.  
  8.     @Override 
  9.     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
  10.         String username = req.getParameter("username"); 
  11.         String password = req.getParameter("password"); 
  12.         try { 
  13.             req.login(username, password); 
  14.         } catch (ServletException e) { 
  15.             req.getRequestDispatcher("/login.jsp").forward(req, resp); 
  16.             return
  17.         } 
  18.         boolean login = req.getUserPrincipal() != null && req.isUserInRole("admin"); 
  19.         if (login) { 
  20.             resp.sendRedirect("/hello"); 
  21.             return
  22.         } else { 
  23.             req.getRequestDispatcher("/login.jsp").forward(req, resp); 
  24.         } 
  25.     } 

當請求到達后,先提取出用戶名和密碼,然后調用 req.login 方法進行登錄,如果登錄失敗,則跳轉到登錄頁面。

登錄完成后,通過獲取登錄用戶信息以及判斷登錄用戶角色,來確保用戶是否登錄成功。

如果登錄成功,就跳轉到項目應用首頁,否則就跳轉到登錄頁面。

接下來定義 HelloServlet:

  1. @WebServlet(urlPatterns = "/hello"
  2. public class HelloServlet extends HttpServlet { 
  3.     @Override 
  4.     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
  5.         doPost(req,resp); 
  6.     } 
  7.  
  8.     @Override 
  9.     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
  10.         Principal userPrincipal = req.getUserPrincipal(); 
  11.         if (userPrincipal == null) { 
  12.             resp.setStatus(401); 
  13.             resp.getWriter().write("please login"); 
  14.         } else if (!req.isUserInRole("admin")) { 
  15.             resp.setStatus(403); 
  16.             resp.getWriter().write("forbidden"); 
  17.         }else
  18.             resp.getWriter().write("hello"); 
  19.         } 
  20.     } 

在 HelloServlet 中,先判斷用戶是否已經登錄,沒登錄的話,就返回 401,已經登錄但是不具備相應的角色,就返回 403,否則就返回 hello。

接下來再定義 LogoutServlet,執行注銷操作:

  1. @WebServlet(urlPatterns = "/logout"
  2. public class LogoutServlet extends HttpServlet { 
  3.     @Override 
  4.     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
  5.         doPost(req,resp); 
  6.     } 
  7.  
  8.     @Override 
  9.     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
  10.         req.logout(); 
  11.         resp.sendRedirect("/hello"); 
  12.     } 

logout 方法也是 HttpServletRequest 自帶的。

最后再簡單定義一個 login.jsp 頁面,如下:

  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %> 
  2. <html> 
  3. <head> 
  4.     <title>Title</title> 
  5. </head> 
  6. <body> 
  7. <form action="/login" method="post"
  8.     <input type="text" name="username"
  9.     <input type="text" name="password"
  10.     <input type="submit" value="登錄"
  11. </form> 
  12. </body> 
  13. </html> 

所有工作都準備好了,接下來就是數據源了,默認情況下加載的是 conf/tomcat-users.xml 中的數據,找到 Tomcat 的這個配置文件,修改之后內容如下:

  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <tomcat-users> 
  3.     <role rolename="admin"/> 
  4.     <user username="javaboy" password="123" roles="admin"/> 
  5. </tomcat-users> 

配置完成后,啟動項目進行測試。登錄用戶名是 javaboy,登錄密碼是 123,具體的測試過程我就不再演示了。

2.2 基于數據庫登錄

如果想基于數據庫登錄,我們需要先準備好數據庫和表,需要兩張表,user 表和 role 表,如下:

  1. CREATE TABLE `user` ( 
  2.   `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
  3.   `username` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL
  4.   `passwordvarchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL
  5.   PRIMARY KEY (`id`) 
  6. ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; 
  7. CREATE TABLE `role` ( 
  8.   `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
  9.   `username` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL
  10.   `role_name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL
  11.   PRIMARY KEY (`id`) 
  12. ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; 

然后向表中添加兩行模擬數據:

接下來,找到 Tomcat 的 conf/server.xml 文件,修改配置,如下:

  1. <Realm className="org.apache.catalina.realm.LockOutRealm"
  2.   <Realm  className="org.apache.catalina.realm.JDBCRealm" debug="99" 
  3.         driverName="com.mysql.jdbc.Driver" 
  4.         connectionURL="jdbc:mysql://localhost:3306/basiclogin" 
  5.         connectionName="root" connectionPassword="123" 
  6.         userTable="user" userNameCol="username"     
  7.         userCredCol="password" 
  8.         userRoleTable="role" roleNameCol="role_name" /> 
  9. </Realm> 

在這段配置中:

  • 指定 JDBCRealm。
  • 指定數據庫驅動。
  • 指定數據庫連接地址。
  • 指定數據庫連接用戶名/密碼。
  • 指定用戶表名稱;用戶名的字段名以及密碼字段名。
  • 指定角色表名稱;以及角色字段名。

配置完成后,再次登錄測試,此時的登錄數據就是來自數據庫的數據了。

3.優化

前面的 HelloServlet,我們是在代碼中手動配置的,要是每個 Servlet 都這樣配置,這要搞到猴年馬月了~

所以我們對此可以在 web.xml 中進行手動配置。

首先我們創建一個 AdminServlet 進行測試,如下:

  1. @WebServlet(urlPatterns = "/admin/hello"
  2. public class AdminServlet extends HttpServlet { 
  3.     @Override 
  4.     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
  5.         resp.getWriter().write("hello admin!"); 
  6.     } 

然后在 web.xml 中進行配置:

  1. <security-constraint
  2.     <web-resource-collection> 
  3.         <web-resource-name>admin</web-resource-name
  4.         <url-pattern>/admin/*</url-pattern> 
  5.     </web-resource-collection> 
  6.     <auth-constraint
  7.         <role-name>admin</role-name
  8.     </auth-constraint
  9. </security-constraint
  10. <security-role> 
  11.     <role-name>admin</role-name
  12. </security-role> 

這個配置表示 /admin/* 格式的請求路徑,都需要具有 admin 角色才能訪問,否則就訪問不到,這樣,每一個 Admin 相關的 Servlet 就被保護起來了,不用在 Servlet 中寫代碼判斷了。

4.小結

好啦,經過本文的介紹,相信小伙伴們對于 HttpServletRequest 中關于認證的幾個方法基本上都了解了,接下來的文章松哥將繼續和大家介紹這些方法在 Spring Security 框架中是如何進行演化的,看懂了本文,后面的文章就很好理解了~

本文案例下載地址:https://github.com/lenve/javaboy-code-samples

本文轉載自微信公眾號「江南一點雨」,可以通過以下二維碼關注。轉載本文請聯系江南一點雨公眾號。

 

責任編輯:武曉燕 來源: 江南一點雨
相關推薦

2018-10-06 21:51:37

代碼SOLID編程

2018-10-07 06:30:40

代碼設計模式面向對象原則

2017-11-30 07:30:27

程序員代碼軟件世界觀

2024-02-20 08:09:51

Java 8DateUtilsDate工具類

2025-08-01 00:00:00

2021-02-03 08:24:32

JavaScript技巧經驗

2015-03-27 10:20:41

谷歌地圖谷歌偉大

2021-09-13 10:03:54

藍牙連接藍牙藍牙設備

2020-07-28 15:18:52

Gartner信息安全網絡安全

2023-11-13 08:49:54

2020-03-30 16:18:02

代碼開發工具

2024-03-01 17:01:15

GraphQL后端

2022-04-21 07:52:08

JS線程GUI渲染

2020-07-21 18:37:14

代碼條件變量

2023-05-31 16:40:01

2020-11-20 10:22:34

代碼規范設計

2021-04-27 15:13:20

Java開發語言

2017-08-21 15:10:30

筆記本塑料材質工藝

2024-05-23 10:34:15

CSS 3CSS技術

2021-12-16 10:16:18

硬盤WindowsiPhone
點贊
收藏

51CTO技術棧公眾號

小小影院久久| 成人在线免费观看黄色| 美国毛片一区二区| 美女精品视频一区| 中文字幕av观看| 自拍偷自拍亚洲精品被多人伦好爽| 国产清纯白嫩初高生在线观看91| 成人午夜高潮视频| 全部毛片永久免费看| 日韩在线观看一区| 欧美v国产在线一区二区三区| 免费在线观看亚洲视频| 在线日本中文字幕| 成人av网站在线| 国产精品一区二区性色av| 劲爆欧美第一页| 国产毛片一区二区三区 | 在线观看亚洲天堂| 91日韩免费| 日韩精品亚洲元码| 国产xxx在线观看| 在线成人视屏| 精品国产成人av| 日韩不卡视频一区二区| 欧美日本韩国一区二区| 成人一区二区三区在线观看| 成人免费福利在线| 精品人妻一区二区色欲产成人| 亚洲欧美在线专区| 国产一区二区三区在线播放免费观看 | 国产免费一区二区三区| 中文字幕一级片| 亚洲一区二区三区高清| 欧美福利视频网站| 久久国产高清视频| 成人精品久久| 亚洲视频欧洲视频| 一区二区三区国产精品| 日日摸夜夜添夜夜添国产精品| 日韩一区二区三| 欧美精品无码一区二区三区| 免费看电影在线| 亚洲欧洲av在线| 亚洲欧洲久久| 五月天婷婷在线观看视频| 欧美zzoo| 91视频观看视频| 国产视频在线观看一区| 性中国古装videossex| 久久成人免费电影| 国产欧美日韩视频| 中文字幕乱码一区二区| 99精品国产在热久久| 青青青青在线| 日本久久二区| 在线观看国产一区二区| 国产亚洲欧美在线视频| 成人ssswww在线播放| 亚洲一区二区影院| av在线观看地址| 日日噜噜噜噜人人爽亚洲精品| 久草在线视频网站| 亚洲尤物在线视频观看| 白白操在线视频| 日本伦理一区二区| 亚洲高清一区二区三区| 成人在线观看你懂的| 97蜜桃久久| 福利一区福利二区微拍刺激| av动漫免费看| 99热播精品免费| 在线成人av影院| 国产一级片中文字幕| 免费看日产一区二区三区| 欧美va亚洲va香蕉在线| 水蜜桃av无码| 精品美女视频| 欧美xxxx做受欧美.88| 黄色小视频在线免费看| 免费永久网站黄欧美| 国产精品久久久久久久久久久新郎 | 国产精品久久久精品| 国产精品欧美激情在线| 国产福利不卡视频| 久久99国产精品| 第一福利在线| 亚洲综合网站在线观看| 成熟丰满熟妇高潮xxxxx视频| 欧美大电影免费观看| 欧美狂野另类xxxxoooo| 国产内射老熟女aaaa| 欧美一区二区.| 亚洲精品美女久久久久| 性做久久久久久免费观看| 日韩成人在线网站| 玖草视频在线观看| 青青草原综合久久大伊人精品| 久久亚洲影音av资源网| 国产成人在线观看网站| 蜜桃视频在线观看一区二区| 成人欧美一区二区三区黑人免费| 亚洲 美腿 欧美 偷拍| 1024成人网| 日韩精品 欧美| 在线视频成人| 亚洲人成网站999久久久综合| 三上悠亚作品在线观看| 久久成人在线| 成人区精品一区二区| 国产69精品久久app免费版| 一区二区三区欧美日韩| 亚洲一区二区蜜桃| 精品欧美一区二区三区免费观看| 麻豆mv在线看| 91精品在线免费| 90岁老太婆乱淫| 亚洲私人影院| 成人午夜在线观看| 黄色片在线免费观看| 亚洲成av人影院| 欧美高清精品一区二区| 不卡日本视频| 国产成人avxxxxx在线看 | 欧美一级久久| 成人18视频| 九色porny丨首页在线| 在线观看亚洲a| 国产制服丝袜在线| 今天的高清视频免费播放成人| 国产精品久久久久久久天堂| 亚洲av成人精品日韩在线播放| 一区二区三区加勒比av| 国产精品久久久久久久av福利| 精品产国自在拍| 欧美影院久久久| 四虎在线视频免费观看| 亚洲一区二区欧美激情| 国产成人精品一区二区在线小狼| 国产精品久久久久久影院8一贰佰 国产精品久久久久久麻豆一区软件 | 欧美性受xxxx| 91精品人妻一区二区三区蜜桃欧美| 大桥未久在线播放| 亚洲香蕉网站| 国产精品久久久久久中文字| 美女做暖暖视频免费在线观看全部网址91 | 国产亚洲小视频| 激情五月婷婷综合| 亚洲v国产v在线观看| 成人私拍视频| 亚洲天堂男人天堂| 婷婷激情五月综合| 久久精品亚洲麻豆av一区二区| 热99这里只有精品| 欧美电影在线观看完整版| 久久久爽爽爽美女图片| 人人妻人人澡人人爽久久av| 亚洲国产日韩在线一区模特 | 国产免费一级视频| 久久久九九九九| 成人性视频欧美一区二区三区| 欧美女王vk| 国产精品亚洲综合天堂夜夜| av网在线观看| 欧美日本在线看| 日韩视频中文字幕在线观看| 国产精品123| 欧美无砖专区免费| 亚洲精品一级二级三级| 国产精品jizz在线观看麻豆| 成人在线高清视频| 91精品国产综合久久香蕉的特点| 免费麻豆国产一区二区三区四区| 粉嫩aⅴ一区二区三区四区五区 | 人人精品人人爱| 日韩视频在线观看视频| 538任你躁精品视频网免费| 97在线日本国产| 加勒比一区二区三区在线| 欧美日韩一区二区欧美激情 | 欧美日韩亚洲网| 欧美成人国产精品一区二区| 久久99精品国产麻豆不卡| 国产在线视频在线| 久久综合色占| 成人黄色片在线| 2020国产在线| 中文字幕亚洲在线| 亚洲精品久久久久avwww潮水| 精品动漫一区二区| 国产精品18在线| 东方欧美亚洲色图在线| 成人一区二区三| 欧美黄色一级视频| 日韩电影大全在线观看| 日韩一级淫片| 国产精品久久久久久久久久免费| 欧美寡妇性猛交xxx免费| 亚洲男人天堂2019| 国产成人精品无码高潮| 欧美小视频在线观看| 永久免费看片直接| 久久久久高清精品| 中文字幕99页| 蜜臀精品一区二区三区在线观看| 久久久国内精品| 欧洲激情综合| 国内视频一区| 超碰国产精品一区二页| 清纯唯美日韩制服另类| v片在线观看| 亚洲人a成www在线影院| 亚洲av无码国产精品永久一区| 欧美性生活大片视频| 国产原创视频在线| 亚洲大尺度视频在线观看| 中文字幕电影av| 欧美高清一级片在线观看| 强迫凌虐淫辱の牝奴在线观看| 国内精品在线播放| 日本美女高潮视频| 亚洲少妇一区| 日韩精品一区二区三区色偷偷| 黄色欧美在线| 亚洲自拍偷拍第一页| 免费一级欧美在线观看视频| 青青草成人在线| 国产美女高潮在线观看| 欧美大片大片在线播放| 你懂的在线免费观看| 91精品国产综合久久国产大片| 久操视频在线免费观看| 日韩欧美国产一区二区| 免费网站观看www在线观| 一区二区三区四区高清精品免费观看 | 亚洲日本成人在线观看| 在线观看免费小视频| 国产亚洲一区二区三区| 人人爽久久涩噜噜噜网站| 网站永久看片免费| 国产网站一区二区| b站大片免费直播| 久久精品一区四区| 欧美黄色一级生活片| 26uuu另类欧美| 免费看污黄网站在线观看| 91在线观看免费视频| 免费a v网站| 99国产一区二区三精品乱码| 亚洲色偷偷色噜噜狠狠99网| 成人免费毛片高清视频| 制服丝袜在线第一页| 成人动漫中文字幕| 亚洲男女在线观看| av网站免费线看精品| 狠狠人妻久久久久久综合蜜桃| www.欧美日韩| 男人天堂av电影| 国产三级欧美三级| 亚洲一二三四视频| 亚洲欧洲精品一区二区三区| 久久精品一区二区三区四区五区| 亚洲视频小说图片| 久久久久久久9999| 欧美日韩国产在线看| 亚洲另类在线观看| 欧美日韩你懂得| 国产99视频在线| 亚洲第一福利网| 久久久资源网| 日韩一区二区三区国产| 在线观看的网站你懂的| 欧美激情二区三区| 中文字幕在线视频网站| 国产精品久久久久久久一区探花| 日韩成人综合网站| 成人av播放| 一本久久青青| 夜夜爽www精品| 激情一区二区| 看欧美ab黄色大片视频免费| 九一九一国产精品| 你懂的在线观看网站| 国产蜜臀av在线一区二区三区| 97在线观看视频免费| 亚洲高清中文字幕| 中文字幕精品无码亚| 欧美精品一区男女天堂| 不卡在线视频| 色综合久久悠悠| 综合在线影院| 99se婷婷在线视频观看| 国产成人精品免费视| 国产欧美123| 日韩不卡一二三区| 绯色av蜜臀vs少妇| 中文字幕av一区二区三区高| 中文字幕影音先锋| 欧美中文字幕一区| 国产成人无码www免费视频播放| 亚洲毛片在线看| a毛片在线看免费观看| 日韩av片免费在线观看| 亚洲三级av| 性欧美videosex高清少妇| 亚洲看片一区| 波多野结衣在线免费观看| 久久久精品国产免大香伊| 丰满少妇高潮久久三区| 欧美色精品天天在线观看视频| 秋霞视频一区二区| 久久久精品久久久| 亚洲成人看片| 国产精品一区二区三区免费| 97精品国产一区二区三区 | 黑鬼狂亚洲人videos| 一本大道综合伊人精品热热| 亚洲欧美强伦一区二区| yw.139尤物在线精品视频| 小黄鸭精品aⅴ导航网站入口| 国产福利久久| 午夜激情久久| 在线观看免费黄网站| 久久看人人爽人人| 国产成人亚洲欧洲在线| 欧美mv日韩mv国产网站app| 黄网站视频在线观看| 国产精品久久久久久中文字| 亚洲伊人春色| 91猫先生在线| www..com久久爱| 国产一级视频在线播放| 日韩亚洲欧美在线观看| 超碰porn在线| 91九色视频导航| 91精品国产91久久久久久密臀| 天天操天天摸天天爽| 国产日韩av一区| 日韩黄色一级视频| 国产性色av一区二区| 韩国美女久久| 欧美精品在线一区| 久久精品网址| 男人舔女人下部高潮全视频| 色系网站成人免费| 久久久久久青草| 国产精品美女午夜av| 日韩av片子| 一区二区免费av| 亚洲欧美日韩国产中文在线| 国产三级小视频| 欧美高清性猛交| 粉嫩av一区二区| 欧美牲交a欧美牲交| 久久综合色一综合色88| 无码一区二区三区| 中文字幕亚洲图片| 麻豆精品一区| 黄色三级中文字幕| 99久久婷婷国产综合精品| 国产一级片毛片| 亚洲性视频网址| 欧美亚洲二区| www.69av| 91在线一区二区三区| 99成人精品视频| 久久精品成人欧美大片| 中文无码日韩欧| 免费黄色福利视频| 国产精品视频看| 午夜精品一二三区| 欧美性在线视频| 色999日韩| 成人做爰www看视频软件| 日韩欧美大尺度| 中文字幕日本在线| 91视频在线免费观看| 亚洲一区二区网站| 欧美性生给视频| 精品日韩一区二区三区| 不卡av影片| 亚洲av综合色区| 91色视频在线| 91成品人影院| 午夜剧场成人观在线视频免费观看| 九九综合在线| 欧美激情国内自拍| 精品久久久免费| 老司机午夜在线视频| 国产亚洲一区二区三区在线播放| 日韩在线一二三区| 欧美国产精品一二三| 亚洲男人天堂2019| 视频欧美一区| 国产精品天天av精麻传媒| 一区二区三区资源| 国产98在线| 国产伦精品一区二区三区高清版| 日韩av中文字幕一区二区三区| 欧美三级小视频| 在线亚洲国产精品网|