精品欧美一区二区三区在线观看 _久久久久国色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网站| 欧美精品九九| 亚洲跨种族黑人xxx| 成人免费自拍视频| 色一情一乱一伦一区二区三欧美| 国语对白永久免费| 久久免费大视频| 亚洲国产精品99| 蜜臀av免费观看| 日本aa在线| 国产清纯白嫩初高生在线观看91| 亚洲va电影大全| 国产成人综合欧美精品久久| 亚洲精品888| 亚洲欧美日韩图片| 日韩欧美中文在线视频| 高清不卡亚洲| 亚洲国产精品一区二区www在线| 色一情一乱一伦一区二区三区丨 | 欧美午夜视频一区二区| 亚洲欧美国产不卡| 性xxxfllreexxx少妇| 精品中文字幕一区二区小辣椒| 97精品国产91久久久久久| 天天色影综合网| 丝袜美腿综合| 精品国产不卡一区二区三区| 欧美大片久久久| 欧美aaa视频| 精品久久久一区| 欧美黄网在线观看| 日本中文字幕视频在线| 久久先锋影音av| 狠狠色综合网站久久久久久久| 97国产精品久久久| 日韩**一区毛片| 2018日韩中文字幕| 精品无码久久久久久久久| 99久久精品网| www.亚洲成人| 亚洲熟女少妇一区二区| 免费观看久久av| 亚洲激情在线观看| 亚洲精品乱码久久久久久蜜桃欧美| 成人在线分类| 韩日视频一区| 一区二区不卡在线视频 午夜欧美不卡在| 日本一区二区精品| 嫩草在线播放| 久久综合999| 九九99玖玖| 日韩在线视频观看免费| 成人精品国产免费网站| 国产精品日韩欧美一区二区三区| 亚洲成人一级片| 成人综合婷婷国产精品久久 | 久久天天躁狠狠躁夜夜躁2014| 人妻熟人中文字幕一区二区| 菠萝蜜一区二区| 综合网中文字幕| 日本成人免费在线观看| 久久亚洲国产| 粗暴蹂躏中文一区二区三区| 婷婷色中文字幕| 国内综合精品午夜久久资源| 欧美激情在线播放| 日韩精品无码一区二区| 免费看黄裸体一级大秀欧美| 日本亚洲精品在线观看| 高潮无码精品色欲av午夜福利| 免播放器亚洲一区| 国产综合久久久久久| 国产熟女精品视频| 不卡欧美aaaaa| 欧美日韩免费观看一区| 国产福利在线| 亚洲欧美色图小说| 日韩xxxx视频| 欧美色999| 91精品一区二区三区久久久久久| 中文字幕人妻一区| 伊人成综合网yiren22| 中文字幕亚洲一区| 免费无码毛片一区二区app| 亚洲国产一区二区三区高清 | 男人的天堂视频在线| av在线加勒比| 欧洲一区二区三区免费视频| 精品国产乱码久久久久久蜜臀| 国产精品va无码一区二区| 欧美日韩精品免费观看视完整| 欧美日韩亚洲综合一区 | 国产真人真事毛片| 亚洲在线黄色| 成人久久久久久| 欧美一区二区公司| 国产精品美日韩| 国产精品久久久久7777| 91p九色成人| 欧美videos大乳护士334| 人妻精品久久久久中文字幕 | 色妞欧美日韩在线| 精品无码黑人又粗又大又长| 日本成人在线视频网站| 99理论电影网| av电影在线观看一区二区三区| 一区二区三区美女| 日韩精品你懂的| 美国十次av导航亚洲入口| 日韩中文字幕久久| 国产精品美女久久久久av爽| 国内精品国产成人| 欧美日韩无遮挡| 国产羞羞视频在线播放| 欧美日韩国产美| 自拍偷拍亚洲天堂| 国产精品v一区二区三区 | 日韩av综合| 国产一区二区精品丝袜| 日本一级淫片色费放| 激情综合色综合久久综合| 久久久久欧美| 国精一区二区三区| 欧美一区二区三区四区久久| 天天躁夜夜躁狠狠是什么心态| 亚洲黄网站黄| 99国产视频在线| 日本韩国在线视频爽| 日韩欧美在线视频免费观看| 2025中文字幕| 中文字幕免费精品| 国产精品视频精品| 黄色av网址在线免费观看| 亚洲福利视频一区二区| 日韩大尺度视频| 在线精品国产| 91久久精品视频| 黄色在线免费网站| 欧美人伦禁忌dvd放荡欲情| 久久久久无码精品国产sm果冻| 午夜在线视频观看日韩17c| 国产日韩三区| www.色在线| 亚洲大胆美女视频| 中文字幕一区二区三区手机版| 国产精品中文有码| www.黄色网址.com| 精品国产亚洲一区二区在线观看| www.xxxx精品| 国产乱码精品一区二区| 国产精品福利av| 亚洲精品综合在线观看| 91综合视频| 91免费精品视频| 影音先锋男人在线资源| 欧美xxxxxxxxx| 久久亚洲成人av| 成人性生交大片免费看中文| av日韩在线看| 加勒比色老久久爱综合网| 8090成年在线看片午夜| 巨骚激情综合| 欧美色视频一区| 网站永久看片免费| 国产在线播放一区二区三区| 成年在线观看视频| 老司机凹凸av亚洲导航| 日韩av电影免费观看高清| 超碰免费在线观看| 91麻豆精品国产91久久久使用方法| 日本中文在线视频| 成人黄页毛片网站| 久久无码高潮喷水| 青青草原综合久久大伊人精品| 成人激情av在线| aaa在线播放视频| 亚洲免费视频网站| 在线观看黄色国产| 一二三四区精品视频| 你懂得在线视频| 青草av.久久免费一区| 黄色高清视频网站| 国产另类在线| 国产精品爽黄69天堂a| 一区二区三区伦理| 亚洲嫩模很污视频| 国产精品久久久久久69| 调教+趴+乳夹+国产+精品| 永久免费av无码网站性色av| 国产精品一区二区三区四区| 国内外成人激情视频| 五月精品视频| 久久av免费一区| 四虎国产精品免费久久5151| 91极品女神在线| 黄av在线播放| 精品视频中文字幕| 国产精品伦理一区| 欧美午夜无遮挡| 欧美黄色aaa| 久久蜜臀中文字幕| 下面一进一出好爽视频| 免费看亚洲片| 97超碰国产精品| 日韩理论电影| 久久久久久久久久码影片| 精品一区二区三区四区五区| 日本国产一区二区三区| 五月婷婷视频在线观看| 在线观看日韩视频| 亚洲色图欧美视频| 日韩欧美国产一区在线观看| 亚洲av无码乱码国产精品fc2| 亚洲成人免费视频| 日韩成人毛片视频| 国产精品三级视频| 极品粉嫩小仙女高潮喷水久久 | 午夜视频在线观看免费视频| 亚洲高清av在线| 精品人妻一区二区三区日产乱码| 欧美午夜一区二区三区免费大片| 日韩精品久久久久久久酒店| 亚洲色图在线播放| 老司机福利在线观看| 久久久美女艺术照精彩视频福利播放| 极品白嫩少妇无套内谢| 极品少妇xxxx偷拍精品少妇| 最新中文字幕免费视频| 久久亚洲精选| 成人免费aaa| 影音先锋久久久| 国产精品videossex国产高清 | 日韩在线高清视频| 二区在线观看| 一本色道久久综合狠狠躁篇的优点 | av女人的天堂| 久久久久久久国产精品影院| 性囗交免费视频观看| 北条麻妃一区二区三区| 日韩精品xxx| 国产成人亚洲综合a∨婷婷 | 国产一二三区在线播放| 在线电影一区二区| 超碰人人爱人人| 国产精品97| 97超碰免费观看| 亚洲九九视频| 福利在线小视频| 国产精品大片免费观看| 蜜桃视频一区二区在线观看| 欧美精品三级| 国产美女主播在线| 最新亚洲一区| 欧美韩国日本在线| 天堂精品中文字幕在线| 日日噜噜夜夜狠狠| 精彩视频一区二区| 中国男女全黄大片| 97久久精品人人做人人爽50路| 久久人人妻人人人人妻性色av| 91在线小视频| 99在线视频免费| 亚洲欧美偷拍三级| 日本三级中文字幕| 日韩欧美在线免费观看| 亚洲一区二区视频在线播放| 制服.丝袜.亚洲.另类.中文| www国产一区| 日韩av网站电影| 国产69精品久久app免费版| 日韩在线观看免费高清| 啪啪免费视频一区| 欧美重口另类videos人妖| 国产第一精品| 国产精品白丝jk白祙| 香蕉国产成人午夜av影院| 日韩欧美亚洲日产国产| 亚洲精品一区二区妖精| 亚洲国产精品无码观看久久| 三级久久三级久久久| 欧美成人乱码一二三四区免费| 国产激情视频一区二区在线观看| 国产传媒第一页| 亚洲欧美一区二区久久| 国产一级精品视频| 欧美片在线播放| 婷婷伊人综合中文字幕| 中文字幕在线看视频国产欧美| 欧美劲爆第一页| av中文字幕在线观看| 97在线观看免费高清| 自拍偷自拍亚洲精品被多人伦好爽| 91精品久久久久久综合乱菊 | 欧美一卡2卡3卡4卡| 婷婷开心激情网| 精品国产欧美成人夜夜嗨| 极品视频在线| 91久久久久久久久久久久久| 久久大胆人体视频| 中文字幕一区二区三区乱码 | 国产亚洲电影| 亚洲精品国产suv一区88| 久久久久久久高潮| 一二三区视频在线观看| 国产精品污污网站在线观看 | 黄色精品免费| 亚欧美在线观看| 久久一二三国产| 欧美日韩国产精品综合| 欧美四级电影网| 午夜成人鲁丝片午夜精品| 久久人人爽人人爽爽久久| 欧美亚洲大片| 免费成人深夜夜行视频| 亚洲婷婷免费| 青娱乐精品在线| 国产精品毛片久久久久久| youjizz在线视频| 亚洲第一二三四五区| 成人影院www在线观看| 国产精品免费久久久| 精品产国自在拍| 97国产精东麻豆人妻电影| 成人污视频在线观看| av成人免费网站| 欧美日韩三级一区二区| 黄色免费在线播放| 日本亚洲欧洲色| 综合亚洲自拍| 欧美丰满熟妇bbbbbb百度| 成人国产视频在线观看| 精品午夜福利在线观看| 日韩欧美的一区二区| а天堂中文在线官网| 成人性教育视频在线观看| 菠萝蜜一区二区| 免费看污污网站| 国产精品美女久久久久久久久| 国产第一页在线观看| 国产亚洲精品va在线观看| 婷婷综合六月| 奇米影视首页 狠狠色丁香婷婷久久综合| 亚洲乱码久久| 波多野结衣影院| 欧美性少妇18aaaa视频| 欧美日本韩国一区二区| 欧美在线国产精品| 久久av超碰| 91淫黄看大片| 中文字幕av一区二区三区免费看| www.av88| 久久色免费在线视频| 色悠久久久久综合先锋影音下载| 最新av网址在线观看| 国产成人在线免费观看| 日产亚洲一区二区三区| 亚洲免费一级电影| 久久福利在线| avove在线观看| 国产suv一区二区三区88区| 成人观看免费视频| 亚洲第一区在线| 忘忧草在线影院两性视频| 秋霞在线观看一区二区三区| 免费看日韩精品| 日本一级二级视频| 亚洲国产欧美一区二区三区久久| 免费福利视频一区二区三区| 五月天丁香综合久久国产 | 国产黄色在线观看| 动漫精品视频| 日韩精品午夜视频| 婷婷激情四射网| 亚洲精品一区二区三区福利| 欧美大胆成人| 警花观音坐莲激情销魂小说| 成人美女视频在线看| 国产99久久久久久免费看| 久久综合久中文字幕青草| 欧美亚洲色图校园春色| 三级a三级三级三级a十八发禁止| 亚洲精品视频自拍| 亚洲日本香蕉视频| 成人福利在线观看| 亚洲欧美日本国产专区一区| 无码人妻精品中文字幕| 亚洲精品在线免费观看视频| 成人精品国产| 久久这里只有精品18| 国产日产精品1区| jizz国产视频| 日本伊人精品一区二区三区介绍| 91精品1区| 少妇无套高潮一二三区| 精品乱人伦一区二区三区| 韩国精品主播一区二区在线观看| 91大学生片黄在线观看|