日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

基于Java JAAS表单的身份验证

發布時間:2023/12/10 java 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于Java JAAS表单的身份验证 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
使用JAAS實現登錄模塊是一個高級主題,而且大多數開發人員也很少有機會參與這種開發。 但是JAAS登錄模塊的基本實現并不是那么困難,這是因為我打算將其發布。 在這里,我正在解釋如何實現tomcat管理的身份驗證模塊。 此實現與容器無關。 我們可以將其與稍有更改的任何容器一起使用。 第一步,我們需要創建一個實現javax.security.auth.spi.LoginModule接口的登錄模塊類。 該接口提供了必須由我們的登錄模塊類實現的5種方法。 這些是initialize(),login(),commit(),abort(),logout()initialize()方法傳遞了四個參數。 “主題”是什么,我們需要進行身份驗證。 主題可以代表單個登錄用戶的相關信息。 它可以表示“用戶名”,“密碼”等身份。此外,它還可以表示分配給用戶的角色。 所有這些身份都應表示為java.security.Principal。 因此,我們應該通過實現java.security.Principal創建單獨的類來區分這些實體。 在本教程中,我為用戶名,密碼和角色創建了單獨的類,分別為JAASUserPrincipal,JAASPasswordPrincipal和JAASRolePrincipal。 主題的getPrincipals()方法返回一組與主題關聯的java.security.Principal。 為了區別這些,為每個身份創建單獨的類很重要。 “ CallbackHandler ”用于與用戶通信。 通過登錄模塊對用戶進行身份驗證時,登錄模塊將調用CallbackHandler實例的handle()方法以獲取用戶名和密碼。 我們還不想擔心CallbackHandler實例。 因為容器設法提供所需的callbakcs。 Tomcat為此提供了JAASCallbackHandler 。 但是,如果我們要顯式調用身份驗證,則需要通過實現javax.security.auth.callback.CallbackHandler來創建自己的回調處理程序類。 我將在本教程的結尾進行解釋。 initialize()方法的下一個重要參數是'options'。 這些選項我們在' jass.config '文件中聲明。 通過初始化登錄模塊,提供了在“ jass.config”文件中聲明的選項的映射。 稍后我將解釋本教程的“ jaas.config”文件。 接下來,我將顯示我們的主體類的完整源代碼。

JAASUserPrincipal.java

package com.rainyday.server.login;import java.io.Serializable;import java.security.Principal;/*** @author semika**/public class JAASUserPrincipal implements Principal, Serializable {private String name;/*** @param name*/public JAASUserPrincipal(String name) {if (name == null) {throw new NullPointerException("NULL user name");}this.name = name;}@Overridepublic String getName() {return name;}@Overridepublic String toString() {return "UserPrincipal [name=" + name + "]";}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + ((name == null) ? 0 : name.hashCode());return result;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;JAASUserPrincipal other = (JAASUserPrincipal) obj;if (name == null) {if (other.name != null)return false;} else if (!name.equals(other.name))return false;return true;} }

JAASRolePrincipal.java

package com.rainyday.server.login;import java.io.Serializable;import java.security.Principal;/*** @author semika**/public class JAASRolePrincipal implements Principal, Serializable {private String name;/*** @param name*/public JAASRolePrincipal(String name) {if (name == null) {throw new NullPointerException("NULL role name");}this.name = name;}@Overridepublic String getName() {return name;}@Overridepublic String toString() {return "JASSRolePrincipal [name=" + name + "]";}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + ((name == null) ? 0 : name.hashCode());return result;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;JAASRolePrincipal other = (JAASRolePrincipal) obj;if (name == null) {if (other.name != null)return false;} else if (!name.equals(other.name))return false;return true;} }

JAASPasswordPrincipal.java

package com.rainyday.server.login;import java.io.Serializable;import java.security.Principal;/*** @author semika**/public class JAASPasswordPrincipal implements Principal, Serializable {private String name;/*** @param name*/public JAASPasswordPrincipal(String name) {if (name == null) {throw new NullPointerException("NULL password.");}this.name = name;}@Overridepublic String getName() {return name;}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + ((name == null) ? 0 : name.hashCode());return result;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;JAASPasswordPrincipal other = (JAASPasswordPrincipal) obj;if (name == null) {if (other.name != null)return false;} else if (!name.equals(other.name))return false;return true;}@Overridepublic String toString() {return "JAASPasswordPrincipal [name=" + name + "]";}} 以上三個類是完全相似的。 但是,我們需要為每個主體創建單獨的類以區分它們。 登錄模塊的login()方法執行身份驗證。 這將驗證用戶輸入的數據庫用戶名和密碼。 現在,您可能會遇到問題,用戶輸入的登錄詳細信息如何進入login()方法。 如前所述,回調處理程序將登錄標識帶入login()方法。 從login()方法中,login模塊通過將所需的回調傳遞到其中來調用回調處理程序的handle()方法。 然后,handle()方法將使用所需的信息填充這些回調,并使其可用于login()方法。 成功認證后,登錄模塊將調用commit()方法。 可以使用相關的主體填充主題。 例如,我們可以從數據庫中檢索用戶分配的角色,并將這些角色附加到主題中。 接下來,我將解釋運行此登錄模塊所需的配置。 我們應該創建“ jass.config”文件,并將其放置在“ $ CATALINA_HOME / conf ”下。 本教程的“ jass.config”文件如下。 rainyDay {com.rainyday.server.login.JAASLoginModule requireddbDriver="com.mysql.jdbc.Driver"dbURL="jdbc:mysql://localhost/rainyday"dbUser="root"dbPassword="abc123"userQuery="select username from secu_user where secu_user.username=? and secu_user.password=?"roleQuery="select secu_user_role.rolename from secu_user, secu_user_role?"+ "where secu_user.username=secu_user_role.username and secu_user.username=?"debug=true; };

“ jass.config”文件應具有類似的格式。 除了登錄模塊聲明之外,您還可以根據需要聲明選項。 登錄模塊可以在initialize()方法參數中使用“選項”映射來使用這些選項。

另外,我們應該通過添加JAVA_OPTS環境變量的路徑來告訴tomcat,“ jaas.config”文件的位置。 我將其添加到$ CATALINA_HOME / bin下的'catalina.sh'文件中,如下所示。

JAVA_OPTS =” $ JAVA_OPTS -Djava.security.auth.login.config == .. / conf / jaas.config”

接下來,您需要聲明JAASRealm配置。 您可以在$ CATALINA_HOME / conf下的server.xml文件中添加一個新的“ Realm”條目。 在我們的教程中,“領域”條目如下。

<Realm className="org.apache.catalina.realm.JAASRealm"appName="rainyDay"userClassNames="com.rainyday.server.login.JASSUserPrincipal,com.rainyday.server.login.JAASPasswordPrincipal"roleClassNames="com.rainyday.server.login.JASSRolePrincipal"/>

有關apache tomcat的領域配置,您可以查看此文檔 。 jaas登錄模塊的完整源代碼。

JAASLoginModule.java

package com.rainyday.server.login;import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import java.util.Map;import javax.security.auth.Subject; import javax.security.auth.callback.Callback; import javax.security.auth.callback.CallbackHandler; import javax.security.auth.callback.NameCallback; import javax.security.auth.callback.PasswordCallback; import javax.security.auth.callback.UnsupportedCallbackException; import javax.security.auth.login.LoginException; import javax.security.auth.spi.LoginModule;import org.apache.log4j.Logger;/*** @author semika**/ public class JAASLoginModule implements LoginModule { private static Logger LOGGER = Logger.getLogger(JAASLoginModule.class); // initial stateprivate Subject subject;private CallbackHandler callbackHandler;private Map sharedState;private Map options;// configurable optionprivate boolean debug = false;// the authentication statusprivate boolean succeeded = false;private boolean commitSucceeded = false;//user credentialsprivate String username = null;private char[] password = null;//user principleprivate JAASUserPrincipal userPrincipal = null;private JAASPasswordPrincipal passwordPrincipal = null;public JAASLoginModule() {super();}@Overridepublic void initialize(Subject subject, CallbackHandler callbackHandler,Map<string, ?=""> sharedState, Map<string, ?=""> options) {this.subject = subject;this.callbackHandler = callbackHandler;this.sharedState = sharedState;this.options = options;debug = "true".equalsIgnoreCase((String)options.get("debug")); }@Overridepublic boolean login() throws LoginException {if (callbackHandler == null){throw new LoginException("Error: no CallbackHandler available " +"to garner authentication information from the user");}Callback[] callbacks = new Callback[2];callbacks[0] = new NameCallback("username");callbacks[1] = new PasswordCallback("password: ", false);try {callbackHandler.handle(callbacks);username = ((NameCallback)callbacks[0]).getName();password = ((PasswordCallback)callbacks[1]).getPassword();if (debug) {LOGGER.debug("Username :" + username);LOGGER.debug("Password : " + password);}if (username == null || password == null) {LOGGER.error("Callback handler does not return login data properly");throw new LoginException("Callback handler does not return login data properly"); }if (isValidUser()) { //validate user.succeeded = true;return true;} } catch (IOException e) { e.printStackTrace();} catch (UnsupportedCallbackException e) {e.printStackTrace();}return false;}@Overridepublic boolean commit() throws LoginException {if (succeeded == false) {return false;} else { userPrincipal = new JAASUserPrincipal(username);if (!subject.getPrincipals().contains(userPrincipal)) {subject.getPrincipals().add(userPrincipal);LOGGER.debug("User principal added:" + userPrincipal);}passwordPrincipal = new JAASPasswordPrincipal(new String(password)); if (!subject.getPrincipals().contains(passwordPrincipal)) {subject.getPrincipals().add(passwordPrincipal);LOGGER.debug("Password principal added: " + passwordPrincipal);}//populate subject with roles.List<string> roles = getRoles();for (String role: roles) {JAASRolePrincipal rolePrincipal = new JAASRolePrincipal(role);if (!subject.getPrincipals().contains(rolePrincipal)) {subject.getPrincipals().add(rolePrincipal); LOGGER.debug("Role principal added: " + rolePrincipal);}}commitSucceeded = true;LOGGER.info("Login subject were successfully populated with principals and roles"); return true;}}@Overridepublic boolean abort() throws LoginException {if (succeeded == false) {return false;} else if (succeeded == true && commitSucceeded == false) {succeeded = false;username = null;if (password != null) {password = null;}userPrincipal = null; } else {logout();}return true;}@Overridepublic boolean logout() throws LoginException {subject.getPrincipals().remove(userPrincipal);succeeded = false;succeeded = commitSucceeded;username = null;if (password != null) {for (int i = 0; i < password.length; i++){password[i] = ' ';password = null;}}userPrincipal = null;return true;}private boolean isValidUser() throws LoginException {String sql = (String)options.get("userQuery");Connection con = null;ResultSet rs = null;PreparedStatement stmt = null;try {con = getConnection();stmt = con.prepareStatement(sql);stmt.setString(1, username);stmt.setString(2, new String(password));rs = stmt.executeQuery();if (rs.next()) { //User exist with the given user name and password.return true;}} catch (Exception e) {LOGGER.error("Error when loading user from the database " + e);e.printStackTrace();} finally {try {rs.close();} catch (SQLException e) {LOGGER.error("Error when closing result set." + e);}try {stmt.close();} catch (SQLException e) {LOGGER.error("Error when closing statement." + e);}try {con.close();} catch (SQLException e) {LOGGER.error("Error when closing connection." + e);}}return false;}/*** Returns list of roles assigned to authenticated user.* @return*/private List<string> getRoles() { Connection con = null;ResultSet rs = null;PreparedStatement stmt = null;List<string> roleList = new ArrayList<string>(); try {con = getConnection();String sql = (String)options.get("roleQuery");stmt = con.prepareStatement(sql);stmt.setString(1, username);rs = stmt.executeQuery();if (rs.next()) { roleList.add(rs.getString("rolename")); }} catch (Exception e) {LOGGER.error("Error when loading user from the database " + e);e.printStackTrace();} finally {try {rs.close();} catch (SQLException e) {LOGGER.error("Error when closing result set." + e);}try {stmt.close();} catch (SQLException e) {LOGGER.error("Error when closing statement." + e);}try {con.close();} catch (SQLException e) {LOGGER.error("Error when closing connection." + e);}}return roleList;}/*** Returns JDBC connection* @return* @throws LoginException*/private Connection getConnection() throws LoginException {String dBUser = (String)options.get("dbUser");String dBPassword = (String)options.get("dbPassword");String dBUrl = (String)options.get("dbURL");String dBDriver = (String)options.get("dbDriver");Connection con = null;try {//loading driverClass.forName (dBDriver).newInstance();con = DriverManager.getConnection (dBUrl, dBUser, dBPassword);} catch (Exception e) {LOGGER.error("Error when creating database connection" + e);e.printStackTrace();} finally {}return con;} } 如果login()或commit()方法執行中出現問題,將調用login模塊的abort()方法。 在這種情況下,如果身份驗證過程失敗,我們不能說身份驗證過程已成功完成,并且可以在abort()方法內完成所需的清理操作。 我們可以利用在登錄模塊的initialize()方法中初始化的“選項”映射來獲取在“ jass.config”文件中聲明的配置信息。 您可以想出一種好的技術來獲取JDBC連接對象。 在本教程中,我并沒有專心于此,而只是想向您展示機制,即如何完成事情。 至此,我們已經完成了基本JAAS身份驗證模塊所需的工作。 接下來,我們應該在web.xml文件中配置安全約束。 <login-config><auth-method>FORM</auth-method><realm-name>rainyDay</realm-name><form-login-config><form-login-page>/login.jsp</form-login-page><form-error-page>/error.jsp</form-error-page></form-login-config> </login-config> <security-role><role-name>*</role-name> </security-role> <security-constraint><web-resource-collection><web-resource-name>Rainy day</web-resource-name><url-pattern>/</url-pattern><http-method>POST</http-method><http-method>GET</http-method></web-resource-collection><auth-constraint><role-name>*</role-name></auth-constraint> </security-constraint>

由于上述安全限制,如果在沒有身份驗證的情況下對應用程序受保護區域中的特定資源提出了某些請求,則該請求將被重定向到“登錄”頁面。 接下來,我將向您展示簡單HTML表單,該表單將在表單提交后調用我們的登錄模塊。

<form id="loginForm" name="loginForm" method="post" action="j_security_check">User Name : <input id="username" type="text" name="j_username" class="textbox"></input>Password : <input id="password" type="password" name="j_password" class="textbox"></input><input name="login" type="submit" value="LOGIN" id="submit" class="button blue"></form> 到此,我們完成了。這是JAAS的非?;镜膶崿F。 這種JAAS模塊的優點在于,我們只需更改一次配置即可更改為其他登錄模塊實現,而無需對現有代碼進行任何修改。 而且這是與容器無關的。 如果要使用jBoss服務器而不是“ jass.config”來部署它,則可以使用jboss conf文件夾中的“ login-config.xml”文件。 正如我答應過的,這里就是如何顯式調用這種登錄模塊。 在某些情況下,我們需要以實用的方式對特定用戶進行身份驗證,但仍然應該使用已實現的登錄模塊。 在這種情況下,最大的問題是向我們的登錄模塊提供用戶身份(用戶名,密碼等)。 在上述情況下,我們使用了一個“ CallbackHandler”類,該類是apache catalina提供的“ JAASCallbackHander”。 但是,在這里我們不能使用和我們必須實現我們自己的回調處理程序類。

JAASCallbackHandler.java

package com.rainyday.server.login;import java.io.IOException;import javax.security.auth.callback.Callback; import javax.security.auth.callback.CallbackHandler; import javax.security.auth.callback.NameCallback; import javax.security.auth.callback.PasswordCallback; import javax.security.auth.callback.UnsupportedCallbackException;import org.apache.log4j.Logger;/*** @author semika**/public class JAASCallbackHandler implements CallbackHandler {private static final Logger LOGGER = Logger.getLogger(JAASCallbackHandler.class);private String username = null;private String password = null;/*** @param username* @param password*/public JAASCallbackHandler(String username, String password) {this.username = username;this.password = password;}@Overridepublic void handle(Callback[] callbacks) throws IOException,UnsupportedCallbackException {LOGGER.info("Callback Handler invoked ");for (int i = 0; i < callbacks.length; i++) {if (callbacks[i] instanceof NameCallback) {NameCallback nameCallback = (NameCallback) callbacks[i];nameCallback.setName(username);} else if (callbacks[i] instanceof PasswordCallback) {PasswordCallback passwordCallback = (PasswordCallback) callbacks[i];passwordCallback.setPassword(password.toCharArray());} else {throw new UnsupportedCallbackException(callbacks[i], "The submitted Callback is unsupported");}}} }

接下來,我們必須創建一個' LoginContext'實例來顯式調用身份驗證。

LoginContext lc = null;try {lc = new LoginContext("rainyDay", new JAASCallbackHandler(username, password));lc.login();//get the subject.Subject subject = lc.getSubject();//get principalssubject.getPrincipals();LOGGER.info("established new logincontext");} catch (LoginException e) {LOGGER.error("Authentication failed " + e);} 如果我們最終無一例外地執行了以上代碼,則表明身份驗證已成功。 如果遇到異常,則認證失敗。 這就是本教程中的全部內容。 http://docs.oracle.com/javaee/1.4/tutorial/doc/Security5.html是我了解登錄身份驗證的很好的教程。

參考:來自我們JCG合作伙伴 Semika loku kaluge的基于Java表單的身份驗證 ,位于Code Box博客上。


翻譯自: https://www.javacodegeeks.com/2012/06/java-jaas-form-based-authentication.html

總結

以上是生活随笔為你收集整理的基于Java JAAS表单的身份验证的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

韩国在线一区二区 | 最近日韩中文字幕中文 | 狠狠88综合久久久久综合网 | 日韩精品中字 | 亚洲免费av一区二区 | 色爽网站| 久99久精品视频免费观看 | 操久久免费视频 | 亚洲精品国产第一综合99久久 | 国产亚洲视频系列 | 97精品一区二区三区 | 国产手机精品视频 | 成人综合日日夜夜 | 久久91久久久久麻豆精品 | 国产精品原创在线 | 亚洲欧美一区二区三区孕妇写真 | 午夜精品久久久久久久99 | 欧美精品久久久久久久亚洲调教 | 在线亚洲天堂网 | 999视频网站| 91漂亮少妇露脸在线播放 | 91人人视频在线观看 | 日韩二区三区在线观看 | 国产区久久 | 91视频免费 | 国产精品久久久一区二区 | 欧美日韩免费在线视频 | 中文字幕在线观看不卡 | 最近中文字幕mv免费高清在线 | 日批视频在线观看免费 | 五月网婷婷 | 探花视频在线观看免费 | 视频在线观看91 | 超碰在线国产 | 最近久乱中文字幕 | 色综合久久中文字幕综合网 | 精品国产aⅴ麻豆 | 成人一级片在线观看 | 狠狠躁18三区二区一区ai明星 | 亚洲日本va午夜在线电影 | 欧美另类亚洲 | 久久在线一区 | 久久综合中文字幕 | 国产生活一级片 | 91精品国产亚洲 | 麻豆视频一区 | 欧美激情一区不卡 | 国产高清免费视频 | 91毛片在线| 国产中的精品av小宝探花 | 7799av| 欧美99精品 | 色婷婷综合久久久久中文字幕1 | 成人h动漫精品一区二 | av福利在线 | 久草在线资源网 | 日本精品久久久一区二区三区 | 色天天久久 | 中文字幕 国产精品 | 在线视频观看亚洲 | 久久精品国产一区二区电影 | 97色综合| 久草免费在线观看 | 国产中文字幕av | 97精品国自产拍在线观看 | 亚洲美女视频网 | 高潮毛片无遮挡高清免费 | 亚洲欧美日韩国产一区二区三区 | 精品一区三区 | 一区二区亚洲精品 | 久久精品视频观看 | 精品专区一区二区 | 人人爱人人射 | 国产成人一区二区三区久久精品 | 最近2019中文免费高清视频观看www99 | 中文字幕成人一区 | 国产精品尤物 | 亚洲一区美女视频在线观看免费 | 色天天综合网 | 毛片.com| 91在线视频播放 | 久久国产精品二国产精品中国洋人 | 九九九九免费视频 | 日韩视频一二三区 | 欧美日韩亚洲第一页 | 国产一区二区三区免费观看视频 | 伊人精品在线 | 成人h视频在线播放 | 日本精品视频免费 | 99精品国产福利在线观看免费 | 一区二区成人国产精品 | 性色av香蕉一区二区 | 久久字幕网| 日韩美女免费线视频 | 国产精品免费麻豆入口 | 久久99国产视频 | 色综合天天射 | 日本xxxxav | 国产伦精品一区二区三区四区视频 | 狠狠色噜噜狠狠狠狠 | 在线观看mv的中文字幕网站 | 麻豆成人精品视频 | www.色午夜,com| 97在线观看视频 | 九九热视频在线 | 国产五月天婷婷 | 五月天激情开心 | 亚洲久在线| 久久精品久久综合 | 97在线免费视频 | 国产在线p | 99视频在线精品国自产拍免费观看 | 99精品欧美一区二区 | 亚洲午夜av电影 | 深爱激情亚洲 | 超级碰视频 | 精品国产免费久久 | 国产精品免费视频久久久 | 人人射人人射 | 国产视频精品免费 | 色多多污污| 欧美视频18| 六月丁香六月婷婷 | 美女视频黄,久久 | 视频在线精品 | 91成版人在线观看入口 | 亚洲欧美日韩精品久久奇米一区 | 91亚瑟视频| 日韩色av色资源 | 日韩高清不卡一区二区三区 | 国产91精品在线播放 | 一级一片免费视频 | 精品一区二区免费视频 | 国产精品久久久久久高潮 | 91视频电影 | 中文字幕乱偷在线 | 91视频传媒 | 日韩免费一区二区在线观看 | av观看久久久| 欧美成人猛片 | 国产一级片久久 | 这里只有精品视频在线 | 99中文字幕在线观看 | 亚洲国产偷 | 成人小视频在线播放 | 操久在线 | 国产福利精品一区二区 | 日韩精品一区二区三区免费观看视频 | 91精品在线播放 | 色视频在线观看 | 免费av小说 | 黄色福利视频网站 | 在线黄色观看 | 在线免费观看黄网站 | 69亚洲精品| 久精品在线观看 | 视频二区在线视频 | 97超碰精品 | 久综合网 | 97超碰超碰 | 福利视频午夜 | 亚洲精品在线观看中文字幕 | 国产在线视频一区二区三区 | 在线看黄色av| 综合激情| 国产日韩精品在线 | 亚洲国产av精品毛片鲁大师 | 免费看黄网站在线 | 国产最新在线观看 | 在线观看中文字幕第一页 | 国产色在线,com | 欧美性色xo影院 | 国产精品免费看久久久8精臀av | 婷婷综合亚洲 | 亚洲伊人网在线观看 | 日韩免费一级a毛片在线播放一级 | 亚洲综合导航 | 视频福利在线观看 | 婷婷激情综合五月天 | 超碰av在线免费观看 | www.香蕉视频| 波多野结衣视频一区二区 | 天天操夜夜爱 | 五月天激情综合 | 色狠狠干 | 精品久久久久久亚洲综合网 | 男女精品久久 | 日韩在线观看第一页 | 在线观看蜜桃视频 | 久久久国产精品久久久 | 中文字幕国产在线 | 国产免费看 | 日韩黄色免费电影 | www.久久久com | 精品成人在线 | 91污视频在线观看 | 久久亚洲私人国产精品va | 亚洲一级在线观看 | 久久涩涩网站 | 91久久人澡人人添人人爽欧美 | 色资源二区在线视频 | 激情网在线视频 | 亚洲国产午夜视频 | 手机看片1042 | 综合在线观看色 | 天堂在线一区二区三区 | 91精品视频播放 | 在线看中文字幕 | 亚洲精品黄色在线观看 | 国产1区2| 日韩欧美一区二区三区视频 | 五月丁色 | 久久久久久久久久久久久久免费看 | 正在播放 久久 | 亚洲综合色视频在线观看 | 亚洲伊人成综合网 | 国产午夜精品视频 | 久久免费视频在线 | 玖玖在线播放 | 亚洲日本国产精品 | 国产免费不卡 | 欧美激情视频一区二区三区免费 | 91人人爽久久涩噜噜噜 | 四虎在线观看精品视频 | 欧美一区二区三区在线视频观看 | 久二影院| 中文字幕人成人 | 久久免费视频在线观看 | 日韩有码在线观看视频 | 日韩专区视频 | 欧美一级视频免费看 | 午夜影院一级 | 欧美性脚交 | 欧美性精品 | 97干com | 国产精品成人国产乱一区 | 激情综合狠狠 | 精品国产乱码久久久久久天美 | 亚洲日韩精品欧美一区二区 | 精品久久一 | 久久婷婷影视 | 精品国产一区二 | 99热精品在线 | 欧美日韩在线第一页 | 人人爱人人做人人爽 | 久草视频在线免费看 | 色999在线| 久久精品国产一区 | 国产高清福利在线 | 日韩影视在线观看 | 狠狠操狠狠插 | 狠狠操夜夜| www久久精品 | 99精品久久久久 | 亚洲精品91天天久久人人 | 九九在线视频 | 日一日干一干 | 91精品久久久久久久久久入口 | 国产高清中文字幕 | 日本美女xx| av黄色大片| 色综合色综合色综合 | 国产免费又黄又爽 | 色婷婷播放 | a级国产乱理论片在线观看 特级毛片在线观看 | 久久无码av一区二区三区电影网 | 99色精品视频 | 国产女做a爱免费视频 | 超碰97人| av在线电影播放 | 婷婷色伊人 | 97色在线观看 | 最新99热| 在线国产高清 | 久久99国产综合精品 | 99热精品国产一区二区在线观看 | 99热手机在线 | av女优中文字幕在线观看 | 麻豆91在线播放 | 成人午夜网址 | 日本bbbb摸bbbb| 亚洲一区黄色 | 夜夜操夜夜干 | 色网免费观看 | 久久天天躁夜夜躁狠狠躁2022 | 亚州精品天堂中文字幕 | 午夜影院在线观看18 | 99九九热只有国产精品 | 日韩欧美国产成人 | 亚洲国产精品一区二区久久,亚洲午夜 | 亚洲综合五月天 | 欧美激情视频在线免费观看 | 午夜视频一区二区三区 | 国产录像在线观看 | 五月综合在线观看 | 亚洲国产色一区 | 综合五月婷婷 | 色综合久久五月 | 美女在线免费观看视频 | 久久99精品国产麻豆宅宅 | 婷婷久月 | 天天爽天天做 | 色视频 在线| 国产美女精品 | 精品久久综合 | 国产涩涩在线观看 | 干狠狠 | 亚洲精品乱码久久久久久高潮 | 国产网站在线免费观看 | 伊人五月天综合 | 九色porny真实丨国产18 | 97操碰 | 久久国产午夜精品理论片最新版本 | 99久热在线精品视频观看 | 日日弄天天弄美女bbbb | 色综合久久久久久中文网 | 成人黄大片 | 亚洲成人精品影院 | 久久亚洲影视 | 久久九九九九 | 国产精品高清在线观看 | 在线电影 一区 | 成人免费在线观看入口 | 欧美日韩国产成人 | 久色免费视频 | 人人射人人插 | 中文字幕视频 | 婷婷九月激情 | 免费日韩av片 | 天天色天天骑天天射 | 91人人澡人人爽 | 福利一区在线视频 | 日日操日日插 | 夜夜躁日日躁狠狠躁 | 国产一区二区三区免费在线观看 | 麻豆久久久久久久 | 日韩精品一区二区三区电影 | 成人午夜电影免费在线观看 | 丁香花在线视频观看免费 | a视频免费看 | 久久色中文字幕 | 六月激情网 | 综合激情av | 天天射天天干天天操 | av官网在线| 日日摸日日添夜夜爽97 | 青青草国产免费 | 精品国产一区二区三区蜜臀 | 丁香激情综合国产 | 99精品黄色片免费大全 | 一区二区三区精品在线 | 91视频-88av| 中文在线a在线 | 91色综合| 免费在线播放av电影 | 久久久久久综合 | 国产成人一区在线 | 日韩欧美精品在线 | 欧美精品一级视频 | 欧美国产精品久久久久久免费 | 国产精品亚洲精品 | 中文字幕日韩伦理 | 久久午夜电影院 | 一区二区欧美在线观看 | 精品久久久久久久久久岛国gif | 高清av免费看| 国产视频不卡一区 | 国产黄色片免费观看 | 亚洲视频免费视频 | 三上悠亚一区二区在线观看 | 91九色国产视频 | a级国产片 | 2019av在线视频 | 特级黄色电影 | 天天插天天狠天天透 | 国产高清不卡av | 狠狠的操你 | 三级性生活视频 | 亚洲作爱 | 久草视频精品 | 伊人影院得得 | 色婷婷狠狠 | 成人精品在线 | 成人av影院在线观看 | 亚洲欧美在线视频免费 | 香蕉视频免费看 | 在线观看黄a | 国产资源中文字幕 | 国产在线专区 | 久久亚洲免费 | 久久久久久久久久久综合 | 欧美91在线 | 国产福利精品一区二区 | 91传媒免费在线观看 | 爱情影院aqdy鲁丝片二区 | 国产91电影在线观看 | 欧洲精品二区 | 中文字幕第一页av | 日日日日干 | 国产免费一区二区三区最新6 | 国产成人黄色网址 | 天天色天天射天天干 | 涩涩网站在线播放 | 91免费在线 | 国产精品毛片一区 | 91精品秘密在线观看 | 色婷婷六月 | 日韩国产欧美在线视频 | 一区二区三区日韩在线 | 香蕉影院在线播放 | 日韩高清黄色 | 性色在线视频 | 亚洲va欧美va人人爽 | 精品国产一区二区三区久久 | av一本久道久久波多野结衣 | 精品国产伦一区二区三区免费 | 丁香六月在线观看 | 在线天堂中文在线资源网 | 免费看av在线 | 国产日韩精品在线 | 中文字幕888 | 欧美久久久久久久久 | 色黄视频免费观看 | 又黄又爽又无遮挡的视频 | 青春草视频 | 一区二区三区免费在线观看视频 | 亚洲日本韩国一区二区 | 日韩欧美在线观看一区二区 | 亚洲一区二区三区精品在线观看 | 超碰在线1 | 在线91精品| 狠狠操操网| 丁香久久激情 | 天堂av在线网址 | 久久久久综合精品福利啪啪 | 亚洲涩涩网 | 精品久久久精品 | 在线观看v片 | 免费久久久久久 | 久久公开免费视频 | 日韩 在线a | 欧美在线观看视频一区二区三区 | 中文字幕乱码在线播放 | 国产亚洲日本 | 日韩在线观看第一页 | 久久久久久影视 | 精品高清美女精品国产区 | 99视频在线 | 欧美日韩精品综合 | 97精品国产97久久久久久免费 | 亚洲免费av在线播放 | 亚洲精品国产欧美在线观看 | 久久久免费毛片 | 欧美99热| 黄色小视频在线观看免费 | 成人aⅴ视频 | 久久人人添人人爽添人人88v | 在线观看www91| 黄色av成人在线观看 | 久久热首页 | 国产精品一区二区三区在线免费观看 | 天天射天天搞 | 久草网免费 | 欧美性生交大片免网 | 一级a性色生活片久久毛片波多野 | 91污污视频在线观看 | 国产精品欧美激情在线观看 | 久久精品国产亚洲精品2020 | 精品国产人成亚洲区 | 欧美巨乳网 | 久青草影院| 日韩黄色软件 | 一区二区在线电影 | 欧美一区免费在线观看 | 欧美色噜噜噜 | 精品国产综合区久久久久久 | 色五月激情五月 | 91九色精品| 视频在线观看入口黄最新永久免费国产 | 欧美成年人在线视频 | 深爱激情综合网 | 天天操天天添天天吹 | www天天干| 亚洲国产精品传媒在线观看 | 久久国产精品电影 | 午夜av在线电影 | 人人干天天干 | 人人澡人人澡人人 | www.夜夜操.com | 美女久久久久久久久久久 | 亚洲精品短视频 | 中文字幕人成不卡一区 | 中文字幕 在线看 | 国产精品久久中文字幕 | 日韩av免费在线看 | 久久精品视频4 | www久久九 | 久久精品视频网 | 外国av网| 中日韩欧美精彩视频 | 狠狠色噜噜狠狠狠合久 | 亚洲精品日韩在线观看 | 亚洲午夜小视频 | 日本在线观看视频一区 | 亚州免费视频 | 超碰人人干人人 | 色综合激情久久 | 国产精品久久久久久久久久久久午 | 日韩免费av在线 | 黄色一级影院 | 欧美一级片在线免费观看 | 亚洲精品中文字幕视频 | 亚洲精品免费在线观看视频 | 亚洲粉嫩av | 婷婷六月天丁香 | 国产视频欧美视频 | 欧美性生活小视频 | 欧美在线一二 | 国产在线观看中文字幕 | 最新av免费在线观看 | 久久黄色小说视频 | 夜夜骑天天操 | 天天爽人人爽夜夜爽 | 日韩欧美成| 99热国产精品 | 91av在线视频免费观看 | 97在线观看视频免费 | 99亚洲精品视频 | 免费观看不卡av | 欧美亚洲国产日韩 | 午夜久久久久久久久 | 亚洲欧美日韩精品久久奇米一区 | 欧美俄罗斯性视频 | 午夜精品久久久久久久久久久久 | 九色精品免费永久在线 | 国产区 在线 | 亚洲黄色在线观看 | 丁香婷婷综合激情五月色 | 97超碰在线久草超碰在线观看 | 亚洲成人麻豆 | 美女久久一区 | 在线观看v片 | 日本黄色黄网站 | 四虎欧美 | 天天综合日日夜夜 | 黄色www | www麻豆视频 | 国产只有精品 | 在线精品视频在线观看高清 | 特级毛片网 | 国际精品久久 | 麻豆免费在线播放 | 亚洲一级片免费观看 | 午夜一级免费电影 | 欧美午夜理伦三级在线观看 | 九九九视频在线 | 亚洲天堂网在线观看视频 | 成人黄在线观看 | 91精品国产99久久久久久久 | 免费日韩一区二区 | 久久精品99国产国产精 | 黄色av影院 | 欧美日韩视频一区二区三区 | 草久久精品 | 久久久久国产a免费观看rela | 精品久久久久久久久亚洲 | 精品国产观看 | 国产在线观看h | 色网av| 国产成人无码AⅤ片在线观 日韩av不卡在线 | 在线观看视频福利 | www.国产精品| 美女视频久久久 | 久久精品99久久久久久2456 | 国产成人精品三级 | 中文字幕乱码亚洲精品一区 | 国产精品九九热 | 91av免费在线观看 | 天堂av影院| 国产韩国日本高清视频 | 中国老女人日b | 久久精品男人的天堂 | 欧美一区二区日韩一区二区 | 日韩在线精品 | 国产精品美乳一区二区免费 | 亚洲国产三级在线观看 | 国产免费又爽又刺激在线观看 | 最新av电影网址 | 99精品视频在线播放观看 | 日韩精品视频网站 | 久久久久成人免费 | 99这里只有久久精品视频 | 亚洲天堂香蕉 | av电影免费| 六月丁香六月婷婷 | 亚州精品成人 | 欧美最猛性xxxxx(亚洲精品) | 精品国产精品一区二区夜夜嗨 | 精品99999 | 久久任你操 | 久久97超碰 | 狠狠躁日日躁 | 欧美激情第十页 | 国产精品大片免费观看 | 成人在线观看你懂的 | 亚洲区另类春色综合小说 | 亚洲 欧美 91 | 亚洲午夜久久久久久久久 | 久久久久成人精品 | av成人黄色| 国产黄色精品在线观看 | 色狠狠久久av五月综合 | 四虎影视成人永久免费观看视频 | 国产网站色 | 精品一区二区亚洲 | h视频在线看 | 免费污片 | 精品一区二区6 | 国产精品18久久久久久不卡孕妇 | 欧美一区免费在线观看 | 精品爱爱| 黄色在线免费观看网址 | 国产一级片一区二区三区 | 色网址99 | 婷婷精品在线视频 | 欧美一区二区三区激情视频 | av噜噜噜在线播放 | 天天操天天射天天爱 | 天天曰天天干 | 国产精品久久久久久久久久直播 | 亚洲欧美乱综合图片区小说区 | 国产小视频在线播放 | 午夜精品久久久99热福利 | 九九久久在线看 | 国产资源站| 午夜在线观看影院 | 精品国产免费一区二区三区五区 | 精品无人国产偷自产在线 | 久久久成人精品 | 久艹在线播放 | 亚洲视频分类 | 激情深爱.com| 婷婷激情站 | 国产成人精品999 | 黄色三级网站 | 激情综合交 | 天天狠狠干 | 高清av中文在线字幕观看1 | 亚洲乱码中文字幕综合 | 美女网站色免费 | 国产免费一区二区三区最新6 | 精品久久一| av播放在线 | 欧美一区日韩一区 | 天天拍天天色 | 日韩在线不卡视频 | 国产小视频在线免费观看 | 色网免费观看 | www.久久视频 | 91久久偷偷做嫩草影院 | 国产一级不卡毛片 | 亚洲黄色影院 | 九九九九热精品免费视频点播观看 | 久久久亚洲精品 | 福利片免费看 | 黄色成年网站 | 五月av在线 | 美国人与动物xxxx | 久久视频免费在线 | 精品一区二区日韩 | 99精品视频在线观看播放 | 国产精品久久久久久五月尺 | 成人h视频在线播放 | 九九综合在线 | 欧美激情第一页xxx 午夜性福利 | 在线国产黄色 | 香蕉97视频观看在线观看 | 日韩免费成人 | 91精品视频免费看 | 亚洲精品小区久久久久久 | 久久午夜精品影院一区 | 免费看黄视频 | 五月天综合激情 | 亚洲一区二区三区精品在线观看 | 日本精品在线看 | 91精品视频在线免费观看 | 免费中文字幕 | 久久久国产网站 | 五月婷婷香蕉 | 久草视频看看 | www.天天射.com | 韩国av免费观看 | 日韩有码在线观看视频 | 免费在线观看国产精品 | 久久久久一区 | 在线观看你懂的网站 | 色综合久久久久久久久五月 | 久久手机免费视频 | 日韩欧美在线观看一区二区三区 | 色综合天天在线 | 日本女人的性生活视频 | 亚洲国产理论片 | 夜夜躁日日躁狠狠躁 | 国产精品黄色av | 99九九视频 | a在线观看视频 | 日韩欧美在线高清 | 337p日本欧洲亚洲大胆裸体艺术 | 久久综合九色综合欧美就去吻 | 日本中出在线观看 | 一级电影免费在线观看 | 亚洲一一在线 | 久章操 | 亚洲更新最快 | 国产剧情一区 | 色资源中文字幕 | 91视频com| 精品国产一区二区三区在线观看 | 97香蕉久久国产在线观看 | 国产一级做a | 久久极品| 色综合久久久 | 天天干天天拍天天操天天拍 | 欧美精品亚洲精品日韩精品 | 亚洲女裸体 | 国产亚洲欧美日韩高清 | 亚洲 欧美日韩 国产 中文 | 亚洲欧洲一区二区在线观看 | 国产免费高清 | 美女国产免费 | 国产1区2区3区精品美女 | 九九久久成人 | 99热手机在线观看 | 色天天 | 成人动漫精品一区二区 | 久久天天躁夜夜躁狠狠躁2022 | 亚洲免费av在线 | 国产亚洲精品久久久久动 | www.99热精品 | 久久久亚洲国产精品麻豆综合天堂 | 亚洲欧美国内爽妇网 | 亚洲国产精品电影在线观看 | 天天操天天射天天插 | 久草爱视频 | 99精品在线观看 | 中文av日韩 | 国产夫妻自拍av | 婷婷国产一区二区三区 | 国产精品都在这里 | 日本婷婷色 | 日韩高清在线一区二区三区 | 国产91大片| 91久久久久久久一区二区 | 中文在线免费看视频 | 在线a亚洲视频播放在线观看 | 激情在线五月天 | 欧美日韩精品网站 | 成人久久久久久久久久 | 丁香婷五月 | 久久免费精品视频 | 久久综合中文色婷婷 | 亚洲黄色在线 | www.夜夜操 | 成人欧美一区二区三区黑人麻豆 | 亚洲成av人影院 | 人人看黄色 | 97超碰资源总站 | 狠狠操夜夜操 | 奇米影视8888在线观看大全免费 | 日韩在线观看一区 | 成人亚洲精品国产www | 欧美色黄 | 国产成人精品综合久久久 | 中文字幕网站 | 欧美三级在线播放 | 免费视频一级片 | 日韩一区二区三区不卡 | 91高清免费 | 亚洲精品视频免费在线 | 在线日本看片免费人成视久网 | 在线观看www视频 | 欧美性色综合 | 美女久久久久久久 | 日本久久免费视频 | 日韩在线免费观看视频 | 国产亚州精品视频 | 久久伊人热 | 国产不卡毛片 | 黄色福利网 | 国产尤物一区二区三区 | 国产精品 中文字幕 亚洲 欧美 | 最近中文字幕在线中文高清版 | 91在线日韩 | 日本久热| 天天玩天天干 | 在线观看日韩精品 | 中文字幕久久亚洲 | 国产日韩视频在线观看 | 日韩高清dvd | 激情喷水 | 欧美精品亚州精品 | 激情欧美国产 | av中文字幕亚洲 | 中字幕视频在线永久在线观看免费 | 夜夜操天天干, | 97超级碰碰碰视频在线观看 | 亚洲免费在线视频 | 久久综合激情 | 久久国产精品久久久久 | av日韩精品 | 久久精品牌麻豆国产大山 | 国产资源免费 | 亚洲视频综合 | 亚洲成人中文在线 | 色av男人的天堂免费在线 | 国产91影视| av成人免费在线看 | 婷婷丁香激情综合 | 天天操操 | 在线a亚洲视频播放在线观看 | 97热久久免费频精品99 | 久久天| 国产精品免费麻豆入口 | 成人午夜黄色 | av短片在线 | 午夜av影院 | 久久久久久免费毛片精品 | 免费av网站观看 | 免费在线观看91 | 一区二区精品在线视频 | 色综合天天综合 | 欧美一二三区在线观看 | 二区三区在线 | 美女久久久久久久 | 狠狠色丁香婷婷综合久小说久 | 99久久国产免费看 | 日韩va在线观看 | 国产精品久久久久999 | 久草视频在线观 | 91丨九色丨蝌蚪丨老版 | 中文字幕一区二区三区乱码在线 | 99精品久久久久久久久久综合 | 成人黄色在线看 | 精品视频97| 亚洲精品在线观看的 | 日韩高清成人在线 | 又黄又爽又色无遮挡免费 | 丰满少妇麻豆av | 午夜精品电影 | 97在线观看免费观看高清 | 久操免费视频 | 97成人资源 | 97超碰站 | 1000部国产精品成人观看 | 日韩在线中文字幕 | 在线看日韩av | 2024国产精品视频 | 久久天天拍 | 一区二区三区在线影院 | 91成人看片| 国产.精品.日韩.另类.中文.在线.播放 | 激情网综合| 一区二区三区免费在线观看视频 | 婷婷在线不卡 | 亚洲精品成人av在线 | 国产 视频 高清 免费 | 日韩中文字幕在线观看 | 香蕉在线播放 | 欧美一区二区三区四区夜夜大片 | 婷婷在线播放 | 天天摸天天舔天天操 | 欧美日韩国内在线 | 欧美性黑人 | 色综合久久五月天 | 中文字幕123区 | 超碰97中文 | 精品一二三区视频 | 天天操天天操天天操天天 | 97狠狠干 | 久久蜜臀av | 久草9视频 | 中文字幕在线精品 | 国产视频亚洲视频 | 亚洲www天堂com | 国产高清在线免费视频 | 亚洲国产精品人久久电影 | 欧美日韩国内在线 | 久久久在线 | 五月激情姐姐 | 天天草天天摸 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 国产精品高潮久久av | 日韩精品一区二区三区电影 | 日韩免费中文字幕 | 午夜精品福利一区二区三区蜜桃 | 久久综合色天天久久综合图片 | 一区二区在线影院 | 精品国产乱码久久久久久1区2匹 | 日本精品视频在线观看 | 在线色亚洲 | 99这里都是精品 | 亚洲成人资源网 | 在线亚洲欧美视频 | 99精品欧美一区二区三区 | 国产综合91 | 精品久久免费 | 亚洲高清激情 | 人人爽人人爽人人片av免 | 国产精品一区二区三区四 | 亚洲日本韩国一区二区 | 久久短视频 | 日韩在线理论 | 国产成人一区二区三区在线观看 | 黄色中文字幕在线 | 国产亚洲精品久久久久动 | 最近中文字幕高清字幕在线视频 | 国产一级二级av | 91影视成人 | 欧美日韩一级视频 | 久久精品永久免费 | 手机看国产毛片 | 国产精品欧美久久久久无广告 | 综合av在线| 国产99在线 | 成人免费看电影 | 日三级在线 | 五月天综合激情 | 国产午夜影院 | 国产特黄色片 | 日韩精品国产一区 | 国产精品免费小视频 | av网站在线免费观看 | 深爱激情五月婷婷 | 蜜臀av网址 | 欧美精品在线一区二区 | 香蕉影视在线观看 | 国产91在线播放 | 国产精品一区二区三区在线看 | 久久夜色精品亚洲噜噜国4 午夜视频在线观看欧美 | 激情深爱 | 亚洲免费成人av电影 | 欧美va在线观看 | 在线观看91 | 国产精品你懂的在线观看 | 亚洲一区二区麻豆 | 国产午夜三级一区二区三 | 欧洲一区二区三区精品 | 最新影院 | 我要看黄色一级片 | 国产在线观看免 | 国产97碰免费视频 | 欧美性色综合网站 | 一区视频在线 | 精品国产一区二区三区久久久久久 | 婷香五月 | 在线免费高清视频 | 丁香狠狠 | 国产二级视频 | 天天拍天天草 | 深爱激情五月婷婷 | 天天爽天天爽天天爽 | 五月天中文在线 | 亚洲免费永久精品国产 | 在线91精品 | 草久电影 | 日韩一区二区三 | 欧美午夜精品久久久久久孕妇 | 日韩欧美一区二区在线 | 天堂v中文 | 91精品在线播放 | www看片网站 | 99久久精品国产一区二区三区 | 国产资源在线视频 | 欧美激情视频在线观看免费 | 国产麻豆成人传媒免费观看 | 国产小视频你懂的在线 | 99看视频在线观看 | 五月婷婷丁香色 | 日韩在线三级 | 日韩字幕在线观看 | 超碰国产在线 | 日本精品一二区 | 亚洲精品国产高清 | 欧美看片 | 成人小视频在线观看免费 | 国产一区观看 | 正在播放 久久 | 亚洲国产中文字幕 | 97碰碰视频 | 在线观看成人av | 91久久国产精品 | 高清中文字幕av | 日本精品视频免费 | 91在线看免费 | 国产精品久久久精品 | 久久夜色精品国产欧美一区麻豆 | 青草视频在线看 | 91麻豆操|