久久精品国产精品国产精品污,男人扒开添女人下部免费视频,一级国产69式性姿势免费视频,夜鲁夜鲁很鲁在线视频 视频,欧美丰满少妇一区二区三区,国产偷国产偷亚洲高清人乐享,中文 在线 日韩 亚洲 欧美,熟妇人妻无乱码中文字幕真矢织江,一区二区三区人妻制服国产

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

权限管理的设计方法

發布時間:2025/7/25 编程问答 10 豆豆
生活随笔 收集整理的這篇文章主要介紹了 权限管理的设计方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

權限管理的設計方法是非常重要的,在項目開發中,也是最最基本的。

首先,設置三種要素:用戶、群組、角色。
用戶為登錄用,對應到人。群組對應為用戶的集合,是一種特殊的用戶。角色為一組權限項的集合,用戶(群組)都有各自的角色。

權限的實現通過Permission類和Rule類來實現。

Permission供外部調用,Rule為一個接口,為權限判斷規則。

Permission是一個抽象類,有以下方法

public boolean hasPermission(User user,HashMap oldData,Input input);

public String getPermissionName();

public abstract Rule[] getDenyRule();

public abstract Rule[] getAcceptRule();

hasPermission方法供外部調用,已實現,實現方法為先根據getDenyRule()得到的規則判斷權限是否被阻攔,再根據getAcceptRule來判斷是否有權限。

而Rule接口的接品則由用戶自行定義,隨包附帶了一個已實現的Rule,實現的功能如下:

先尋找User的所有角色,然后判斷角色是否有權限,如果無權限則尋找其父級群組,再取父級群組的所有角色進行判斷是否有權限,如果無權限則再往上級群組找,直到找最上一級還是無權限才判斷為無權限。

現實現判斷權限有無權限的方式已可以達成的有以下三種:

1、 是否有操作的權限。

2、 是否有操作的子操作的權限。

3、 在數據為某條件時有操作(子操作)的權限。

在進行程序開發時,第一步,編寫User,Group,Role的實現類,已提供了一套XML的實現類。

第二步,寫配置文件,進行權限項的配置。

第三步,在程序中要進行權限判斷的地方調用Permission.hasPermission方法即可。

以后我會把代碼逐天貼出來。

如果大家有什么別的種類權限要進行判斷的,請給我發送郵件,我繼續改善,歡迎大家多提意見。

==================================================

權限組件之一(用戶)

----------------------

首先,我定義了一個用戶接口,可以從其中取出其的各種屬性.代碼如后面所示.用戶除了各種不同的屬性以外還必須設置其角色以及所屬的群組.

然后定義一個AbstractUser把User共性的東西進行處理.所有的取屬性的方法都已實現.用戶只要根據實現情況繼承AbstractUser把自己要定義的屬性進行處理即可.(因為每個系統的用戶都會有不同的屬性,所以留成抽象類供使用者自己擴展). 只要初始化變量description, name ,group ,id, prop,role,propMap即可.

最后定義了一個類UserImpl來實現具體的User作隨包的一個User供一般使用者使用.不建議直接使用UserImpl,因為以后的版本可能會重寫該類.如果要使用的話可以把該類改名為自己的類即可.

這部分涉及到了一個ResourceLib類,該類中存是我自己定義的存儲各種資源配置用的類,可以直接使用.

======================User.java===============================

package org.fswan.permission;

import org.fswan.Identity;

import java.util.Properties;

import org.fswan.workflow.exception.CantFoundIDException;

public interface User

{

/**

* 獲取用戶名

* @return 用戶名

*/

public String getName();

/**

* 獲取用戶描述

* @return 描述

*/

public String getDescription();

/**

* 獲取用戶標識

* @return 用戶標識

*/

public Identity getId();

/**

* 獲取屬性

* @return 屬性值

*/

public Properties getProperties();

/**

* 獲取所屬組

* @return 組列表

*/

public Group[] getGroups() throws CantFoundIDException;

/**

* 獲取所有角色

* @return 角色數組

*/

public Role[] getRoles() throws CantFoundIDException;

/**

* 獲取用戶用作權限判斷的屬性

* @param prop 權限屬性

* @return 屬性值

*/

public Object getPermissionProp(String prop);

}

=======================AbstractUser===================================

package org.fswan.permission;

import java.util.HashMap;

import java.util.Properties;

import org.fswan.Identity;

import org.fswan.workflow.exception.IdentityMappingError;

/**

*

* 實現AbstractUser的類構造必須做的一些事

* 初始化變量description,name,group,id,prop,role,propMap

*/

public class AbstractUser implements User

{

/**

* 描述

*/

protected String description;

/**

* 名稱

*/

protected String name;

/**

* 所屬的組的標識

*/

protected Identity[] group;

/**

* 用戶標識

*/

protected Identity id;

/**

* 屬性

*/

protected Properties prop;

/**

* 角色

*/

protected Identity[] role;

/**

* 權限屬性存儲的位置

*/

protected HashMap propMap;

/* (non-Javadoc)

* @see org.fswan.permission.User#getDescription()

*/

public String getDescription()

{

return description;

}

/* (non-Javadoc)

* @see org.fswan.permission.User#getGroups()

*/

public Group[] getGroups()

{

Group[] groups = new Group[group.length];

for (int i = 0; i < groups.length; i++)

{

try

{

groups[i] = (Group) group[i].newInstance();

} catch (IdentityMappingError e)

{

e.printStackTrace();

}

}

return groups;

}

/* (non-Javadoc)

* @see org.fswan.permission.User#getId()

*/

public Identity getId()

{

return id;

}

/* (non-Javadoc)

* @see org.fswan.permission.User#getName()

*/

public String getName()

{

return name;

}

/* (non-Javadoc)

* @see org.fswan.permission.User#getProperties()

*/

public Properties getProperties()

{

return prop;

}

/* (non-Javadoc)

* @see org.fswan.permission.User#getRoles()

*/

public Role[] getRoles()

{

Role[] roles = new Role[role.length];

for (int i = 0; i < roles.length; i++)

{

try

{

roles[i] = (Role) role[i].newInstance();

} catch (IdentityMappingError e)

{

e.printStackTrace();

}

}

return roles;

}

public String toString()

{

String retStr = id.getIdName();

retStr += ":" + name;

retStr += " " + description + "\n";

retStr += "Group:";

Group[] groups = this.getGroups();

if (groups != null)

{

for (int i = 0; i < groups.length; i++)

{

if (groups[i] != null)

retStr += groups[i].getId().getIdName() + "\t";

}

}

Properties p = getProperties();

Object[] obj = p.keySet().toArray();

for (int i = 0; i < obj.length; i++)

{

retStr+=obj[i]+":"+p.getProperty(obj[i].toString())+"\n";

}

return retStr;

}

/* (non-Javadoc)

* @see org.fswan.permission.User#getPermissionProp(java.lang.String)

*/

public Object getPermissionProp(String prop)

{

return propMap.get(prop);

}

}

==============================UserImpl.java===========================

package org.fswan.permission;

import java.util.ArrayList;

import java.util.Properties;

import javax.xml.parsers.DocumentBuilderFactory;

import org.fswan.Identity;

import org.fswan.IdentityImpl;

import org.fswan.ImplementIdentity;

import org.fswan.ResourceLib;

import org.fswan.workflow.exception.IdentityMappingError;

import org.w3c.dom.Document;

import org.w3c.dom.Element;

import org.w3c.dom.NodeList;

public class XMLUser extends AbstractUser implements ImplementIdentity

{

/**

* XML中定義用戶的標簽

*/

public static final String USER = "User";

public Object newInstance(Identity id)

{

ArrayList sources = ResourceLib.getXmlResource();

for (int i = 0; i < sources.size(); i++)

{

try

{

Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(sources.get(i).toString());

NodeList nl = doc.getElementsByTagName(USER);

for (int j = 0; j < nl.getLength(); j++)

{

Element tempEl = (Element) nl.item(j);

String idStr = tempEl.getAttribute("id");

if (idStr != null && !idStr.equals(""))

{

if (idStr.equals(id.getIdName()))

{

this.id = new IdentityImpl(Identity.SWITCH, Identity.XMLUSER, idStr);

NodeList tempNl = tempEl.getElementsByTagName("Name");

name = tempNl.item(0).getChildNodes().item(0).getNodeValue();

tempNl = tempEl.getElementsByTagName("Description");

description = tempNl.item(0).getChildNodes().item(0).getNodeValue();

tempNl = tempEl.getElementsByTagName("ParentGroup");

Identity[] groups = new Identity[tempNl.getLength()];

for (int iGroup = 0; iGroup < groups.length; iGroup++)

{

Element tempEl2 = (Element) tempNl.item(iGroup);

String subType = tempEl.getAttribute("subType");

if(subType==null || subType.equals(""))subType = Identity.XMLGROUP;

groups[iGroup] = new IdentityImpl(Identity.GROUP, subType, tempEl2.getAttribute("id"));

}

this.group = groups;

tempNl = tempEl.getElementsByTagName("Role");

Identity[] roles = new Identity[tempNl.getLength()];

for (int iRole = 0; iRole < tempNl.getLength(); iRole++)

{

Element tempEl2 = (Element) tempNl.item(iRole);

String subType = tempEl.getAttribute("subType");

if(subType==null || subType.equals(""))subType = Identity.XMLROLE;

roles[iRole] = new IdentityImpl(Identity.ROLE, subType, tempEl2.getAttribute("id"));

}

this.role = roles;

this.prop = new Properties();

tempNl = tempEl.getElementsByTagName("Property");

if (tempNl != null)

for (int k = 0; k < tempNl.getLength(); k++)

{

Element tempElement = (Element) tempNl.item(k);

System.out.println(tempElement.getAttribute("name"));

this.prop.setProperty(tempElement.getAttribute("name"), tempElement.getAttribute("value"));

}

return this;

}

}

}

} catch (Exception e)

{

e.printStackTrace();

}

}

return null;

}

public static void main(String[] args)

{

try

{

ResourceLib.addResource("D:\\eclipse\\workspace\\workflow\\workflow.xml");

User u = (User) new IdentityImpl(Identity.USER, Identity.XMLUSER, "U01").newInstance();

System.out.println(u);

} catch (IdentityMappingError e)

{

e.printStackTrace();

}

}

}

========================XML格式=====================

<User id="U01">

<Name>Swan</Name>

<Description>方志文</Description>

<ParentGroup id="G01"/>

<Property name="SEX" value="male"/>

<Property name="AGE" value="20"/>

</User>

========================XML描述文件==================

<xs:complexType name="User">

<xs:annotation>

<xs:documentation>用戶名</xs:documentation>

</xs:annotation>

<xs:sequence>

<xs:element name="Name"/>

<xs:element name="Description"/>

<xs:element name="ParentGroup" type="Identity" minOccurs="0" maxOccurs="unbounded"/>

<xs:element name="Role" type="Identity" minOccurs="0" maxOccurs="unbounded"/>

<xs:element name="Property" minOccurs="0" maxOccurs="unbounded">

<xs:complexType>

<xs:attribute name="name" use="required"/>

<xs:attribute name="value" use="required"/>

</xs:complexType>

</xs:element>

</xs:sequence>

<xs:attribute name="id" use="required"/>

</xs:complexType>

=========================================================

==========================================================

==========================================================

權限組件之二(群組)

-------------------------

首先,我定義了一個群組接口,除了繼承用戶的方法以外還有兩個方法,getUsers,getSubGroup.代碼如后面所示.用戶除了各種不同的屬性以外還必須設置其角色以及所屬的群組.

然后定義一個AbstractGroup,他繼承了Group以及AbstractUser,并實現了Group接口定義的兩個方法.用戶只要根據實現情況繼承AbstractGroup把自己要定義的屬性進行處理即可.(因為每個系統的用戶都會有不同的屬性,所以留成抽象類供使用者自己擴展). 只要初始化變量description, name ,group ,id, prop,role,propMap,subGroup,user即可.

最后定義了一個類XMLGroup來實現具體的Group作隨包的一個Group供一般使用者使用.不建議直接使用XMLGroup,因為以后的版本可能會重寫該類.如果要使用的話可以把該類改名為自己的類即可.

這部分涉及到了一個ResourceLib類,該類中存是我自己定義的存儲各種資源配置用的類,可以直接使用.

======================Group.java===============================

package org.fswan.permission;

public interface Group extends User

{

/**

* 獲取組下所有的用戶

* @return 用戶數組

*/

public User[] getUsers();

/**

* 獲取組下屬的組

* @return 組的數組

*/

public Group[] getSubGroup();

}

=======================AbstractGroup===================================

package org.fswan.permission;

import org.fswan.Identity;

import org.fswan.workflow.exception.IdentityMappingError;

public class AbstractGroup extends AbstractUser implements Group

{

protected Identity[] subGroup;

protected Identity[] user;

/* (non-Javadoc)

* @see org.fswan.permission.Group#getSubGroup()

*/

public Group[] getSubGroup()

{

Group[] groups = new Group[subGroup.length];

for (int i = 0; i < groups.length; i++)

{

try

{

groups[i] = (Group)subGroup[i].newInstance();

} catch (IdentityMappingError e)

{

e.printStackTrace();

}

}

return groups;

}

/* (non-Javadoc)

* @see org.fswan.permission.Group#getUsers()

*/

public User[] getUsers()

{

User[] users = new User[user.length];

for (int i = 0; i < users.length; i++)

{

try

{

users[i] = (User)user[i].newInstance();

} catch (IdentityMappingError e)

{

e.printStackTrace();

}

}

return users;

}

public String toString()

{

String retStr = id.getIdName();

retStr +=":"+name;

retStr += " "+description;

return retStr;

}

}

==============================XMLGroup.java===========================

package org.fswan.permission;

import java.util.ArrayList;

import java.util.Properties;

import javax.xml.parsers.DocumentBuilderFactory;

import org.fswan.Identity;

import org.fswan.IdentityImpl;

import org.fswan.ImplementIdentity;

import org.fswan.ResourceLib;

import org.w3c.dom.Document;

import org.w3c.dom.Element;

import org.w3c.dom.NodeList;

public class XMLGroup extends AbstractGroup implements ImplementIdentity

{

/**

* XML中定義群組的標簽

*/

public static final String GROUP = "Group";

public Object newInstance(Identity id)

{

ArrayList sources = ResourceLib.getXmlResource();

for (int i = 0; i < sources.size(); i++)

{

try

{

Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(sources.get(i).toString());

NodeList nl = doc.getElementsByTagName(GROUP);

for (int j = 0; j < nl.getLength(); j++)

{

Element tempEl = (Element)nl.item(j);

String idStr = tempEl.getAttribute("id");

if(idStr!=null && !idStr.equals(""))

{

if(idStr.equals(id.getIdName()))

{

this.id = new IdentityImpl(Identity.SWITCH,Identity.XMLGROUP,idStr);

//加載名稱

NodeList tempNl = tempEl.getElementsByTagName("Name");

name = tempNl.item(0).getChildNodes().item(0).getNodeValue();

//加載描述

tempNl = tempEl.getElementsByTagName("Description");

description = tempNl.item(0).getChildNodes().item(0).getNodeValue();

//加載父群組

tempNl = tempEl.getElementsByTagName("ParentGroup");

Identity[] groups = new Identity[tempNl.getLength()];

for (int iGroup=0; iGroup < tempNl.getLength(); iGroup++)

{

tempEl = (Element)tempNl.item(iGroup);

groups[iGroup] = new IdentityImpl(Identity.GROUP,Identity.XMLGROUP,tempEl.getAttribute("id"));

}

this.subGroup = groups;

//加載角色

tempNl = tempEl.getElementsByTagName("Role");

Identity[] roles = new Identity[tempNl.getLength()];

for (int iRole=0; iRole < tempNl.getLength(); iRole++)

{

tempEl = (Element)tempNl.item(iRole);

roles[iRole] = new IdentityImpl(Identity.ROLE,Identity.XMLROLE,tempEl.getAttribute("id"));

}

this.role = roles;

//加載屬性

this.prop = new Properties();

tempNl = tempEl.getElementsByTagName("Property");

if(tempNl!=null)

for (int k = 0; k < tempNl.getLength(); k++)

{

Element tempElement = (Element)tempNl.item(k);

this.prop.setProperty(tempElement.getAttribute("name"),tempElement.getAttribute("value"));

}

//加載子群組

tempNl = tempEl.getElementsByTagName("SubGroup");

if (tempNl != null)

{

subGroup = new Identity[tempNl.getLength()];

for (int k = 0; k < subGroup.length; k++)

{

Element tempElement = (Element) tempNl.item(k);

subGroup[k] = new IdentityImpl(Identity.GROUP,Identity.XMLGROUP,tempElement.getAttribute("id"));

}

}

//加載用戶

tempNl = tempEl.getElementsByTagName("User");

if (tempNl != null)

{

user = new Identity[tempNl.getLength()];

for (int k = 0; k < subGroup.length; k++)

{

Element tempElement = (Element) tempNl.item(k);

user[k] = new IdentityImpl(Identity.USER,Identity.XMLUSER,tempElement.getAttribute("id"));

}

}

return this;

}

}

}

} catch (Exception e)

{

e.printStackTrace();

}

}

return null;

}

}

========================XML格式=====================

<Group id="G01">

<Name>系統部</Name>

<Description>系統部</Description>

</Group>

========================XML描述文件==================

<xs:complexType name="Group">

<xs:annotation>

<xs:documentation>群組</xs:documentation>

</xs:annotation>

<xs:complexContent>

<xs:extension base="User">

<xs:sequence>

<xs:element name="SubGroup" type="Identity" minOccurs="0" maxOccurs="unbounded"/>

<xs:element name="User" type="Identity" minOccurs="0" maxOccurs="unbounded"/>

</xs:sequence>

</xs:extension>

</xs:complexContent>

</xs:complexType>

================================================

====================================================

======================================================

權限組件之三(角色)

---------------------------------

首先,我定義了一個角色接口,可以從其中取出其的各種屬性.代碼如后面所示.

然后定義一個AbstractRole把Role共性的東西進行處理.所有的取屬性的方法都已實現.用戶只要根據實現情況繼承AbstractRole把自己要定義的屬性進行處理即可.(因為每個系統的用戶都會有不同的屬性,所以留成抽象類供使用者自己擴展). 只要初始化變量description, name ,id, prop,users(可能是群組), permissionMap即可.

最后定義了一個類XMLRole來實現具體的Role作隨包的一個Role供一般使用者使用.不建議直接使用XMLRole,因為以后的版本可能會重寫該類.如果要使用的話可以把該類改名為自己的類即可.

這部分涉及到了一個ResourceLib類,該類中存是我自己定義的存儲各種資源配置用的類,可以直接使用.

======================Role.java===============================

package org.fswan.permission;

import org.fswan.Identity;

import java.util.Properties;

import org.fswan.workflow.exception.CantFoundIDException;

public interface Role

{

/**

* 獲取角色ID

* @return

*/

public Identity getId();

/**

* 獲取角色的名稱

* @return 名稱

*/

public String getName();

/**

* 獲取角色的描述

* @return 描述

*/

public String getDescription();

/**

* 獲取角色的所有的用戶(組)

* @return 用戶

*/

public User[] getUsers() throws CantFoundIDException;

/**

* 角色的屬性

* @return 屬性值

*/

public Properties getProperties();

/**

* 獲取用戶用作權限判斷的屬性

* @param prop 權限屬性

* @return 屬性值

*/

public Object getPermissionProp(String prop);

}

=======================AbstractRole===================================

package org.fswan.permission;

import java.util.HashMap;

import java.util.Properties;

import org.fswan.Identity;

import org.fswan.workflow.exception.IdentityMappingError;

public class AbstractRole implements Role

{

/**

* 描述

*/

protected String description ;

/**

* 名稱

*/

protected String name;

/**

* 標識

*/

protected Identity id;

/**

* 屬性

*/

protected Properties prop;

/**

* 該角色所有用戶的標識

*/

protected Identity[] users;

/**

* 權限屬性表

*/

protected HashMap permissionMap;

/* (non-Javadoc)

* @see org.fswan.permission.Role#getDescription()

*/

public String getDescription()

{

return description;

}

/* (non-Javadoc)

* @see org.fswan.permission.Role#getId()

*/

public Identity getId()

{

return id;

}

/* (non-Javadoc)

* @see org.fswan.permission.Role#getName()

*/

public String getName()

{

return name;

}

/* (non-Javadoc)

* @see org.fswan.permission.Role#getProperties()

*/

public Properties getProperties()

{

return prop;

}

/* (non-Javadoc)

* @see org.fswan.permission.Role#getUsers()

*/

public User[] getUsers()

{

User[] retUser = new User[users.length];

for (int i = 0; i < retUser.length; i++)

{

try

{

retUser[i] = (User)users[i].newInstance();

} catch (IdentityMappingError e)

{

e.printStackTrace();

}

}

return retUser;

}

public String toString()

{

String retStr = id.getIdName();

retStr +=":"+name;

retStr += " "+description;

return retStr;

}

/* (non-Javadoc)

* @see org.fswan.permission.Role#getPermissionProp(java.lang.String)

*/

public Object getPermissionProp(String prop)

{

return permissionMap.get(prop);

}

}

==============================XMLRole.java===========================

/*

* Created on 2004-4-21

*

* To change the template for this generated file go to

* Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments

*/

package org.fswan.permission;

import java.util.ArrayList;

import java.util.Properties;

import javax.xml.parsers.DocumentBuilderFactory;

import org.fswan.Identity;

import org.fswan.IdentityImpl;

import org.fswan.ImplementIdentity;

import org.fswan.ResourceLib;

import org.w3c.dom.Document;

import org.w3c.dom.Element;

import org.w3c.dom.NodeList;

public class XMLRole extends AbstractRole implements ImplementIdentity

{

/**

* XML標簽用的字符串

*/

public static final String ROLE = "Role";

public Object newInstance(Identity id)

{

ArrayList sources = ResourceLib.getXmlResource();

for (int i = 0; i < sources.size(); i++)

{

try

{

Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(sources.get(i).toString());

NodeList nl = doc.getElementsByTagName(ROLE);

for (int j = 0; j < nl.getLength(); j++)

{

Element tempEl = (Element)nl.item(j);

String idStr = tempEl.getAttribute("id");

if(idStr!=null && !idStr.equals(""))

{

if(idStr.equals(id.getIdName()))

{

this.id = new IdentityImpl(Identity.SWITCH,Identity.XMLROLE,idStr);

NodeList tempNl = tempEl.getElementsByTagName("Name");

name = tempNl.item(0).getChildNodes().item(0).getNodeValue();

tempNl = tempEl.getElementsByTagName("Description");

description = tempNl.item(0).getChildNodes().item(0).getNodeValue();

this.prop = new Properties();

tempNl = tempEl.getElementsByTagName("Property");

if(tempNl!=null)

for (int k = 0; k < tempNl.getLength(); k++)

{

Element tempElement = (Element)tempNl.item(k);

this.prop.setProperty(tempElement.getAttribute("name"),tempElement.getAttribute("value"));

}

return this;

}

}

}

} catch (Exception e)

{

e.printStackTrace();

}

}

return null;

}

}

========================XML格式=====================

<Role id="R01">

<Name>系統管理員</Name>

<Description>系統管理員</Description>

</Role>

========================XML描述文件==================

<xs:complexType name="Role">

<xs:annotation>

<xs:documentation>角色名</xs:documentation>

</xs:annotation>

<xs:sequence>

<xs:element name="Name"/>

<xs:element name="Description"/>

<xs:element name="Property" minOccurs="0" maxOccurs="unbounded"/>

</xs:sequence>

<xs:attribute name="id" use="required"/>

</xs:complexType>

======================================================================

=======================================================================

=======================================================================

權限組件之四(規則)

---------------------------

定義好User,Group,Role了以后,下面我定義了權限判斷的規則.

首先定義Rule接口,見Rule.java.Rule只做一件事判斷User是否有權限.

然后我實現了一個Rule,見RuleImpl.java.

這部分涉及到了一個Input類,這個類是一個輸入的類,接口如Input.java.這個通過繼承該接口可以使用各種方式數據(HTTP,XML,SOAP……)作為輸入數據.

Permission為權限類,下面一篇會介紹.

======================Rule.java===============================

package org.fswan.permission;

import java.util.HashMap;

import org.fswan.Input;

/**

* 用來進行判斷的規則.

* 供Permission調用

*/

public interface Rule

{

public boolean pass(Permission permission,User user,HashMap oldData,Input input);

}

=======================RuleImpl===================================

package org.fswan.permission;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.Properties;

import org.fswan.Input;

/**

*

*/

public class RuleImpl implements Rule

{

/* (non-Javadoc)

* @see org.fswan.permission.Rule#pass(org.fswan.permission.Permission, org.fswan.permission.User, org.fswan.permission.Role, org.fswan.permission.Group, java.util.HashMap, org.fswan.Input)

*/

public boolean pass(Permission permission, User user, HashMap oldData, Input input)

{

try

{

Role[] roles = user.getRoles();

if (roles != null)

{

for (int i = 0; i < roles.length; i++)

{

if (hasPermission(permission, user, roles[i], oldData, input)) //有權限

return true;

}

}

Group[] groups = user.getGroups();

if (groups != null)

for (int i = 0; i < groups.length; i++)

{

if (pass(permission, groups[i], oldData, input))

return true;

}

return false;

} catch (Exception ex)

{

ex.printStackTrace();

}

return false;

}

/**

* 判斷用戶的某個角色是否有權限進行某操作

* @param permission 權限

* @param user 用戶

* @param role 角色

* @param oldData 數據

* @param input 輸入

* @return 是否有權限

*/

private boolean hasPermission(Permission permission, User user, Role role, HashMap oldData, Input input)

{

//如角色沒有該權限ID則無權限

if (role.getPermissionProp(permission.getPermissionName()) == null)

return false;

//如果權限還要判斷層別

if (permission.getPermissionItem() != null)

{

ArrayList item = permission.getPermissionItem();

boolean accept = true;

ArrayList roleItem = (ArrayList) role.getPermissionProp(permission.getPermissionName());

ttt : for (int i = 0; i < roleItem.size(); i++)

{

Properties p = (Properties) roleItem.get(i);

accept = true;

for (int j = 0; j < item.size(); j++)

{

if (p.getProperty(item.get(j).toString()) != null

&& p.getProperty(item.get(j).toString()).indexOf(oldData.get(item.get(j).toString()).toString())

!= -1) //如果無權限

continue ttt;

}

return true;

}

return false;

}

return true;

}

}

=============================Input.java=======================

package org.fswan;

/**

* @author 方志文

*

* 輸入數據的接口,作為主類的數據輸入式,

* 現可以從xml,HttpServletRequest和JSPUpload獲取數據

*

*/

public interface Input {

/**

* 獲取參數的值,如果無該參數則返回null,如果該參數對應多個值則返回其第一個值

* @param parameter 參數

* @return 值

*/

public String getParameter(String parameter);

/**

* 獲取參數的值列表

* @param parameter 參數

* @return 值

*/

public String[] getParameterValues(String parameter);

/**

* 獲取參數名的列表

* @return 所有的參數的名

*/

public String[] getParameterNames();

/**

* 獲取數據源

* @return 數據源

*/

public Object getSource();

/**

* 設置參數,如果已存在該參數,則原來的作廢

* @param parameter 參數

* @param value 值

*/

public void setParameter(String parameter,String value);

/**

* 設置參數,如果已存在該參數,則把原來的作廢

* @param parameter 參數

* @param values 值

*/

public void setParameter(String parameter,String[] values);

/**

* 添加參數,如果已存在該參數,則把該值添加到原值后成數組

* @param parameter 參數

* @param value 值

*/

public void addParameter(String parameter,String value);

/**

* 添加參數(多個值),如果已存在該參數,則把該值添加到原值后成數組

* @param parameter 參數

* @param values 值

*/

public void addParameter(String parameter,String[] values);

}

============================================================

===============================================================

===============================================================

權限組件五(權限)(完)

----------------------------

最后,我定義了一個Permission類把所有的元素連接起來形成一個完整權限判斷組件。代碼如下。用戶繼承該類時要完兩個方法getDenyRule,getAcceptRule即可。

當我們進行權限判斷時只要調用hasPermission(User user,HashMap oldData,Input input)即可。其后三個參數分別為用戶,數據,輸入。用戶為在判斷的人,數據為原有數據,比較進行更新操作時,oldData為老數據,input在前一部分有介紹,為一個通用的輸入方式。比WEB輸入Post或Get方式等,可以轉換成一個Input類,也可以手動新建一個Input.為操作以及其數據的集合。

在Permission類中進行了DenyRule和AcceptRule的判斷,只要有一個DenyRule規則符合要求,則認為該用戶無權限進行操作,如果用戶的沒被DenyRule排除則進行AcceptRule的判斷,只要有一個規則符合要求則認為該用戶有權限。

因為本人比較懶所以Permission的實現還沒有寫出一個通用的。

綜上所述,使用此權限組件要進行以下幾項工作:

1、 編寫User的實現。

2、 編寫Group的實現。

3、 編寫Role的實現。

4、 編寫Permission的實現。(過段時間我會擺個通用的上來)

5、 編寫N個Rule(同你的系統要進行權限判斷相對應)。

6、 在程序中調用Permission.hasPermission判斷。

======================Permission.java===============================

package org.fswan.permission;

import java.util.ArrayList;

import java.util.HashMap;

import org.fswan.Input;

/**

* 權限判斷類

*/

public abstract class Permission

{

public String permission;

public String subPermission;

protected ArrayList prop;

public boolean hasPermission(User user,HashMap oldData,Input input)

{

Rule[] rules = getDenyRule();

boolean accept = true;

for (int i = 0; i < rules.length; i++)

{

if(!rules[i].pass(this,user,oldData,input))

{

accept = false;

break;

}

}

if(accept)return false;

rules = getAcceptRule();

for (int i = 0; i < rules.length; i++)

{

if(!rules[i].pass(this,user,oldData,input))

return false;

}

return true;

}

public String getPermissionName()

{

if(subPermission==null)return permission;

return permission+":"+subPermission;

}

public ArrayList getPermissionItem()

{

return prop;

}

public abstract Rule[] getDenyRule();

public abstract Rule[] getAcceptRule();

}

==================================================

==================================================

==================================================

權限組件所缺的文件

原意是給大家看一下結構,沒想大家都那么關心,我現在把所有的代碼貼上來,謝謝大家關心.

唉,BLOG好煩啊,無法直接上傳文件要一個一個貼

================ResourceLib.java ============
package org.fswan;

import java.util.ArrayList;
import java.util.Properties;

/**
* 用來存儲通用的XML配置文件位置和數據庫連接屬性.
* 作為org.fswan里所有的包中類的基礎配置文件.
*/
public class ResourceLib
{
/**
* 驅動的字符串
*/
public static final String DRIVER = "Driver";
/**
* 數據庫連接字符串
*/
public static final String URL = "URL";
/**
* 用戶
*/
public static final String USER = "User";
/**
* 密碼
*/
public static final String PASSWORD = "Password";
/**
* 所有的XML配置文件的存儲位置,存儲的對象為URL
*/
private static ArrayList resource = new ArrayList();
/**
* 存儲所有的數據庫配置.
* 所有的數據庫存儲位置格式為:
* 對象為Properties對象
* 而properties對象里包含:
* {@link #DRIVER DRIVER},{@link #URL URL},{@link #USER USER},{@link #PASSWORD PASSWORD},{@link #VIEW VIEW},{@link #TYPE TYPE}六個屬性分別對應
* 數據庫的驅動,邊接字符串,用戶名,密碼,視圖,類型
* 或者
* {@link #JNDI JNDI},{@link #VIEW VIEW},{@link #TYPE TYPE}
* JNDI名,視圖,類型
* 類型是以下的一個
* {@link #WORKFLOW WORKFLOW}
* {@link #BRAND BRAND}
* {@link #STATUS STATUS}
* {@link #SWITCH SWITCHER}
* {@link #WORKUNIT WORKUNIT}
* {@link #USER USER}
*/
private static ArrayList prop = new ArrayList();
/**
* 獲取所有的XML資源
* @return XML資源泉
*/
public static ArrayList getXmlResource()
{
return resource;
}
/**
* 獲取所有的數據庫連接屬性
* @return 數據庫鏈接屬性
*/
public static ArrayList getConnection()
{
return prop;
}
/**
* 增加XML資源
* @param source XML資源
*/
public static void addResource(String source)
{
synchronized(resource)
{
resource.add(source);
}
}
/**
* 增加數據庫鏈接屬性
* @param pro 數據庫鏈接屬性
*/
public static void addDataProperty(Properties pro)
{
synchronized(prop)
{
prop.add(pro);
}
}
}

==============Input.java============
/*
* Created on 2003-11-20
*
* Create By 方志文
* email:fswan@yeah.net
*/
package org.fswan;

/**
* @author 方志文
*
* 輸入數據的接口,作為主類的數據輸入式,
* 現可以從xml,HttpServletRequest和JSPUpload獲取數據
*
*/
public interface Input {
/**
* 獲取參數的值,如果無該參數則返回null,如果該參數對應多個值則返回其第一個值
* @param parameter 參數
* @return 值
*/
public String getParameter(String parameter);
/**
* 獲取參數的值列表
* @param parameter 參數
* @return 值
*/
public String[] getParameterValues(String parameter);
/**
* 獲取參數名的列表
* @return 所有的參數的名
*/
public String[] getParameterNames();
/**
* 獲取數據源
* @return 數據源
*/
public Object getSource();
/**
* 設置參數,如果已存在該參數,則原來的作廢
* @param parameter 參數
* @param value 值
*/
public void setParameter(String parameter,String value);
/**
* 設置參數,如果已存在該參數,則把原來的作廢
* @param parameter 參數
* @param values 值
*/
public void setParameter(String parameter,String[] values);
/**
* 添加參數,如果已存在該參數,則把該值添加到原值后成數組
* @param parameter 參數
* @param value 值
*/
public void addParameter(String parameter,String value);
/**
* 添加參數(多個值),如果已存在該參數,則把該值添加到原值后成數組
* @param parameter 參數
* @param values 值
*/
public void addParameter(String parameter,String[] values);
}
================ManualInput.java ==============
package org.fswan;

public class ManualInput extends AbstractInput
{
/* (non-Javadoc)
* @see org.fswan.Input#getSource()
*/
public Object getSource()
{
return null;
}

}
===================Identity.java==========
package org.fswan;

import org.fswan.workflow.exception.IdentityMappingError;

/**
* @author Administrator
* 這個接是一個標識,用來唯一標識所有的工作流,狀態,切換開關,分枝操作
*/
public interface Identity
{
/**
* 工作流的標識
*/
public static final int WORKFLOW = 0;
/**
* 分枝操作的標識
*/
public static final int BRAND = 1;
/**
* 狀態的標識
*/
public static final int STATUS =2;
/**
* 切換開關的標識
*/
public static final int SWITCH = 3;
/**
* 用戶的標識
*/
public static final int USER = 4;
/**
* 工作單元
*/
public static final int WORKUNIT = 5;
/**
* 角色
*/
public static final int ROLE = 6;
/**
* 群組
*/
public static final int GROUP = 7;

public static final int VIEWCLASS = 255;

public static final String XMLWORKFLOW = "XMLWorkFlow";
public static final String XMLBRAND = "XMLBrand";
public static final String XMLSWITCHER = "XMLSwitcher";
public static final String XMLSTATUS = "XMLStatus";
public static final String XMLWORKUNIT = "XMLWorkUnit";
public static final String DBWORKFLOW = "DBWorkFlow";
public static final String DBBRAND = "DBBrand";
public static final String DBSWITCHER = "DBSwitcher";
public static final String DBSTATUS = "DBStatus";
public static final String DBWORKUNIT = "DBWorkUnit";
public static final String XMLUSER = "XMLUser";
public static final String XMLGROUP = "XMLGroup";
public static final String XMLROLE = "XMLRole";

/**
* 獲取標識的類型
* 是以下常量中的一個
* {@link #WORKFLOW WORKFLOW}
* {@link #BRAND BRAND}
* {@link #STATUS STATUS}
* {@link #SWITCH SWITCH}
* {@link #USER USER}
* @return 標識的類型
*/
public int getIdType();
/**
* 獲取標識的名稱
* @return 標識的名稱
*/
public String getIdName();
/**
* 返回該Identity的子類型,該子類型是給newInstance使用的
* @return 子類型
*/
public String getSubType();
/**
* 通過ID生成實例
* @return 實例
* @throws IdentityMappingError 找不到生器異常
*/
public Object newInstance() throws IdentityMappingError;
}
=============IdentityImpl.java===============
package org.fswan;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Hashtable;

import org.fswan.workflow.exception.IdentityMapHadExist;
import org.fswan.workflow.exception.IdentityMappingError;

/**
* 唯一標識符類.
* 由唯一標識符可以調用相應的類來生成相對應的接口生成相對應的實例
* 不同種類標識符生成相對應的實例的類在{@link map}中進行映射定義.
* 可調用靜態方法register進行注冊.
*/
public class IdentityImpl implements Identity
{
private String name;
private int type;
private String subType;
/**
* 從ID到類的映射表
*/
private static Hashtable map = new Hashtable();
public IdentityImpl(int type,String subType,String name)
{
this.type = type;
this.subType=subType;
this.name = name;
}
public IdentityImpl genIdentity(int type)
{
SimpleDateFormat f = new SimpleDateFormat("yyyyMMddHHmmssSSS");
String name = f.format(new Date());
return new IdentityImpl(type,"",name);
}
/* (non-Javadoc)
* @see org.fswan.Identity#getIdName()
*/
public String getIdName()
{
return name;
}

/* (non-Javadoc)
* @see org.fswan.Identity#getIdType()
*/
public int getIdType()
{
return type;
}
public String getSubType()
{
return subType;
}

public String toString()
{
return "["+type+":"+name+"]";
}
public boolean equals(Object obj)
{
if(obj instanceof Identity)
{
return this.getIdType()==((Identity)obj).getIdType()
&& getIdName().equals(((Identity)obj).getIdName());
}
return false;
}
/**
* 查找相應對的對象
* @return 實例化后的對象
* @throws IdentityMappingError 映射實現不了,
* 可能是因為注冊的類不存在或者無法實例化該類,或該類不是ImplementIdentity
*/
public Object newInstance() throws IdentityMappingError
{
try
{
if(map.get(subType)==null)return null;
ImplementIdentity ids = (ImplementIdentity)Class.forName(map.get(subType).toString()).newInstance();
return ids.newInstance(this);
} catch (InstantiationException e)
{
e.printStackTrace();
} catch (IllegalAccessException e)
{
e.printStackTrace();
} catch (ClassNotFoundException e)
{
e.printStackTrace();
}
throw new IdentityMappingError();
}
/**
* 注冊標識種類到生成實例類的映射
* @param type 類型
* @param obj 相對應的類名
* @throws IdentityMapHadExist 異常,(該類型已注冊)
*/
public static void register(String subType,String obj) throws IdentityMapHadExist
{
if(map.containsKey(subType)) throw new IdentityMapHadExist(subType);
map.put(subType,obj);
}
static
{
try
{
IdentityImpl.register(Identity.DBBRAND,"org.fswan.workflow.DBWrokFlow");
} catch (IdentityMapHadExist e)
{
e.printStackTrace();
}
try
{
IdentityImpl.register(Identity.DBSTATUS,"org.fswan.workflow.DBStatus");
} catch (IdentityMapHadExist e)
{
e.printStackTrace();
}
try
{
IdentityImpl.register(Identity.DBSWITCHER,"org.fswan.workflow.DBSwitcher");
} catch (IdentityMapHadExist e)
{
e.printStackTrace();
}
try
{
IdentityImpl.register(Identity.DBWORKFLOW,"org.fswan.workflow.DBWrokFlow");
} catch (IdentityMapHadExist e)
{
e.printStackTrace();
}
try
{
IdentityImpl.register(Identity.DBWORKUNIT,"org.fswan.workflow.DBWorkUnit");
} catch (IdentityMapHadExist e)
{
e.printStackTrace();
}
try
{
IdentityImpl.register(Identity.XMLBRAND,"org.fswan.workflow.XMLBrand");
} catch (IdentityMapHadExist e)
{
e.printStackTrace();
}
try
{
IdentityImpl.register(Identity.XMLGROUP,"org.fswan.permission.XMLGroup");
} catch (IdentityMapHadExist e)
{
e.printStackTrace();
}
try
{
IdentityImpl.register(Identity.XMLROLE,"org.fswan.permission.XMLRole");
} catch (IdentityMapHadExist e)
{
e.printStackTrace();
}
try
{
IdentityImpl.register(Identity.XMLSTATUS,"org.fswan.workflow.XMLStatus");
} catch (IdentityMapHadExist e)
{
e.printStackTrace();
}
try
{
IdentityImpl.register(Identity.XMLSWITCHER,"org.fswan.workflow.XMLSwitcher");
} catch (IdentityMapHadExist e)
{
e.printStackTrace();
}
try
{
IdentityImpl.register(Identity.XMLUSER,"org.fswan.permission.XMLUser");
} catch (IdentityMapHadExist e)
{
e.printStackTrace();
}
try
{
IdentityImpl.register(Identity.XMLWORKFLOW,"org.fswan.workflow.XMLWorkFlow");
} catch (IdentityMapHadExist e)
{
e.printStackTrace();
}
try
{
IdentityImpl.register(Identity.XMLWORKUNIT,"org.fswan.workflow.XMLWorkUnit");
} catch (IdentityMapHadExist e)
{
e.printStackTrace();
}

}
}
==================ImplementIdentity.java=============
package org.fswan;

/**
* @author swan
* 通過ID實例化相應的對象.
* 當用戶自己實現User,Role,Group,Brand等對象時,通過ID來查找相對應的對象,
* 在類IdentityImpl對象中根據注冊各種Identity類型對應的InstanceIdentity對象
* 來實例化對象.
* 注意:該接口的子類的構造方法一定是PUBLIC且不帶任何參數.
*/
public interface ImplementIdentity
{
/**
* 實例化ID相對對應的對象.
* @param identity 要實例化的對象的ID
* @return 對象
*/
public Object newInstance(Identity identity);
}
===========CantFoundIDException.java-==============
package org.fswan.workflow.exception;

import org.fswan.Identity;

/**
* @author Administrator
*
* To change the template for this generated type comment go to
* Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
*/
public class CantFoundIDException extends Exception
{
public CantFoundIDException(Identity id)
{
super("Can't Found ID:["+id.getIdType()+":"+id.getIdName()+"]");
}
}
==================IdentityMapHadExist.java============
package org.fswan.workflow.exception;

/**
* @author swan
*
* To change the template for this generated type comment go to
* Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
*/
public class IdentityMapHadExist extends Exception
{
public IdentityMapHadExist(String subType)
{
super("Mapping Had Exist:"+subType);
}
}
==================IdentityMappingError.java============
package org.fswan.workflow.exception;

/**
* @author swan
*
* To change the template for this generated type comment go to
* Window&gt;Preferences&gt;Java&gt;Code Generation&gt;Code and Comments
*/
public class IdentityMappingError extends Exception
{
public IdentityMappingError()
{
super("The Mapping Class is not InstanceIdentity.");
}
}
=================TypeCastException.java ============
package org.fswan.workflow.exception;

import org.fswan.db.Field;

/**
* 類型轉換異常,當從字符串轉成特定類型出錯時拋出
*/
public class TypeCastException extends Exception
{
/**
* 構造函數
* @param field 字段
* @param str 字符串值
*/
public TypeCastException(Field field,String str)
{
super(str+" cast to "+field + " Error");
}
}

思路很好!!!!!!!!!

author: EdwarddotNet

前言:
權限往往是一個極其復雜的問題,但也可簡單表述為這樣的邏輯表達式:判斷“Who對What(Which)進行How的操作”的邏輯表達式是否為真。針對不同的應用,需要根據項目的實際情況和具體架構,在維護性、靈活性、完整性等N多個方案之間比較權衡,選擇符合的方案。
目標:
直觀,因為系統最終會由最終用戶來維護,權限分配的直觀和容易理解,顯得比較重要,系統不辭勞苦的實現了組的繼承,除了功能的必須,更主要的就是因為它足夠直觀。
簡單,包括概念數量上的簡單和意義上的簡單還有功能上的簡單。想用一個權限系統解決所有的權限問題是不現實的。設計中將常常變化的“定制”特點比較強的部分判斷為業務邏輯,而將常常相同的“通用”特點比較強的部分判斷為權限邏輯就是基于這樣的思路。
擴展,采用可繼承在擴展上的困難。的Group概念在支持權限以組方式定義的同時有效避免了重定義時
現狀:
對于在企業環境中的訪問控制方法,一般有三種:
1.自主型訪問控制方法。目前在我國的大多數的信息系統中的訪問控制模塊中基本是借助于自主型訪問控制方法中的訪問控制列表(ACLs)。
2.強制型訪問控制方法。用于多層次安全級別的軍事應用。
3.基于角色的訪問控制方法(RBAC)。是目前公認的解決大型企業的統一資源訪問控制的有效方法。其顯著的兩大特征是:1.減小授權管理的復雜性,降低管理開銷。2.靈活地支持企業的安全策略,并對企業的變化有很大的伸縮性。
名詞:
粗粒度:表示類別級,即僅考慮對象的類別(the type of object),不考慮對象的某個特
定實例。比如,用戶管理中,創建、刪除,對所有的用戶都一視同仁,并不區分操作的具體對象實例。
細粒度:表示實例級,即需要考慮具體對象的實例(the instance of object),當然,細
粒度是在考慮粗粒度的對象類別之后才再考慮特定實例。比如,合同管理中,列表、刪除,需要區分該合同實例是否為當前用戶所創建。
原則:
權限邏輯配合業務邏輯。即權限系統以為業務邏輯提供服務為目標。相當多細粒度的權限問題因其極其獨特而不具通用意義,它們也能被理解為是“業務邏輯”的一部分。比如,要求:“合同資源只能被它的創建者刪除,與創建者同組的用戶可以修改,所有的用戶能夠瀏覽”。這既可以認為是一個細粒度的權限問題,也可以認為是一個業務邏輯問題。在這里它是業務邏輯問題,在整個權限系統的架構設計之中不予過多考慮。當然,權限系統的架構也必須要能支持這樣的控制判斷。或者說,系統提供足夠多但不是完全的控制能力。即,設計原則歸結為:“系統只提供粗粒度的權限,細粒度的權限被認為是業務邏輯的職責”。
需要再次強調的是,這里表述的權限系統僅是一個“不完全”的權限系統,即,它不提供所有關于權限的問題的解決方法。它提供一個基礎,并解決那些具有“共性”的(或者說粗粒度的)部分。在這個基礎之上,根據“業務邏輯”的獨特權限需求,編碼實現剩余部分(或者說細粒度的)部分,才算完整。回到權限的問題公式,通用的設計僅解決了Who+What+How 的問題,其他的權限問題留給業務邏輯解決。
概念:
Who:權限的擁用者或主體(Principal、User、Group、Role、Actor等等)
What:權限針對的對象或資源(Resource、Class)。
How:具體的權限(Privilege, 正向授權與負向授權)。
Role:是角色,擁有一定數量的權限。
Operator:操作。表明對What的How 操作。
說明:
User:與 Role 相關,用戶僅僅是純粹的用戶,權限是被分離出去了的。User是不能與 Privilege 直接相關的,User 要擁有對某種資源的權限,必須通過Role去關聯。解決 Who 的問題。
Resource:就是系統的資源,比如部門新聞,文檔等各種可以被提供給用戶訪問的對象。資源可以反向包含自身,即樹狀結構,每一個資源節點可以與若干指定權限類別相關可定義是否將其權限應用于子節點。
Privilege:是Resource Related的權限。就是指,這個權限是綁定在特定的資源實例上的。比如說部門新聞的發布權限,叫做"部門新聞發布權限"。這就表明,該Privilege是一個發布權限,而且是針對部門新聞這種資源的一種發布權限。Privilege是由Creator在做開發時就確定的。權限,包括系統定義權限和用戶自定義權限用戶自定義權限之間可以指定排斥和包含關系(如:讀取,修改,管理三個權限,管理 權限 包含 前兩種權限)。Privilege 如"刪除" 是一個抽象的名詞,當它不與任何具體的 Object 或 Resource 綁定在一起時是沒有任何意義的。拿新聞發布來說,發布是一種權限,但是只說發布它是毫無意義的。因為不知道發布可以操作的對象是什么。只有當發布與新聞結合在一起時,才會產生真正的 Privilege。這就是 Privilege Instance。權限系統根據需求的不同可以延伸生很多不同的版本。
Role:是粗粒度和細粒度(業務邏輯)的接口,一個基于粗粒度控制的權限框架軟件,對外的接口應該是Role,具體業務實現可以直接繼承或拓展豐富Role的內容,Role不是如同User或Group的具體實體,它是接口概念,抽象的通稱。
Group:用戶組,權限分配的單位與載體。權限不考慮分配給特定的用戶。組可以包括組(以實現權限的繼承)。組可以包含用戶,組內用戶繼承組的權限。Group要實現繼承。即在創建時必須要指定該Group的Parent是什么Group。在粗粒度控制上,可以認為,只要某用戶直接或者間接的屬于某個Group那么它就具備這個Group的所有操作許可。細粒度控制上,在業務邏輯的判斷中,User僅應關注其直接屬于的Group,用來判斷是否“同組” 。Group是可繼承的,對于一個分級的權限實現,某個Group通過“繼承”就已經直接獲得了其父Group所擁有的所有“權限集合”,對這個Group而言,需要與權限建立直接關聯的,僅是它比起其父Group需要“擴展”的那部分權限。子組繼承父組的所有權限,規則來得更簡單,同時意味著管理更容易。為了更進一步實現權限的繼承,最直接的就是在Group上引入“父子關系”。
User與Group是多對多的關系。即一個User可以屬于多個Group之中,一個Group可以包括多個User。子Group與父Group是多對一的關系。Operator某種意義上類似于Resource + Privilege概念,但這里的Resource僅包括Resource Type不表示Resource Instance。Group 可以直接映射組織結構,Role 可以直接映射組織結構中的業務角色,比較直觀,而且也足夠靈活。Role對系統的貢獻實質上就是提供了一個比較粗顆粒的分配單位。
Group與Operator是多對多的關系。各概念的關系圖示如下:
解釋:
Operator的定義包括了Resource Type和Method概念。即,What和How的概念。之所以將What和How綁定在一起作為一個Operator概念而不是分開建模再建立關聯,這是因為很多的How對于某What才有意義。比如,發布操作對新聞對象才有意義,對用戶對象則沒有意義。
How本身的意義也有所不同,具體來說,對于每一個What可以定義N種操作。比如,對于合同這類對象,可以定義創建操作、提交操作、檢查沖突操作等。可以認為,How概念對應于每一個商業方法。其中,與具體用戶身份相關的操作既可以定義在操作的業務邏輯之中,也可以定義在操作級別。比如,創建者的瀏覽視圖與普通用戶的瀏覽視圖要求內容不同。既可以在外部定義兩個操作方法,也可以在一個操作方法的內部根據具體邏輯進行處理。具體應用哪一種方式應依據實際情況進行處理。
這樣的架構,應能在易于理解和管理的情況下,滿足絕大部分粗粒度權限控制的功能需要。但是除了粗粒度權限,系統中必然還會包括無數對具體Instance的細粒度權限。這些問題,被留給業務邏輯來解決,這樣的考慮基于以下兩點:
一方面,細粒度的權限判斷必須要在資源上建模權限分配的支持信息才可能得以實現。比如,如果要求創建者和普通用戶看到不同的信息內容,那么,資源本身應該有其創建者的信息。另一方面,細粒度的權限常常具有相當大的業務邏輯相關性。對不同的業務邏輯,常常意味著完全不同的權限判定原則和策略。相比之下,粗粒度的權限更具通用性,將其實現為一個架構,更有重用價值;而將細粒度的權限判斷實現為一個架構級別的東西就顯得繁瑣,而且不是那么的有必要,用定制的代碼來實現就更簡潔,更靈活。
所以細粒度控制應該在底層解決,Resource在實例化的時候,必需指定Owner和GroupPrivilege在對Resource進行操作時也必然會確定約束類型:究竟是OwnerOK還是GroupOK還是AllOK。Group應和Role嚴格分離User和Group是多對多的關系,Group只用于對用戶分類,不包含任何Role的意義;Role只授予User,而不是Group。如果用戶需要還沒有的多種Privilege的組合,必須新增Role。Privilege必須能夠訪問Resource,同時帶User參數,這樣權限控制就完備了。
思想:
權限系統的核心由以下三部分構成:1.創造權限,2.分配權限,3.使用權限,然后,系統各部分的主要參與者對照如下:1.創造權限 - Creator創造,2.分配權限 - Administrator 分配,3.使用權限 - User:
1. Creator 創造 Privilege, Creator 在設計和實現系統時會劃分,一個子系統或稱為模塊,應該有哪些權限。這里完成的是 Privilege 與 Resource 的對象聲明,并沒有真正將 Privilege 與具體Resource 實例聯系在一起,形成Operator。
2. Administrator 指定 Privilege 與 Resource Instance 的關聯。在這一步, 權限真正與資源實例聯系到了一起, 產生了Operator(Privilege Instance)。Administrator利用Operator這個基本元素,來創造他理想中的權限模型。如,創建角色,創建用戶組,給用戶組分配用戶,將用戶組與角色關聯等等...這些操作都是由 Administrator 來完成的。
3. User 使用 Administrator 分配給的權限去使用各個子系統。Administrator 是用戶,在他的心目中有一個比較適合他管理和維護的權限模型。于是,程序員只要回答一個問題,就是什么權限可以訪問什么資源,也就是前面說的 Operator。程序員提供 Operator 就意味著給系統穿上了盔甲。Administrator 就可以按照他的意愿來建立他所希望的權限框架可以自行增加,刪除,管理Resource和Privilege之間關系。可以自行設定用戶User和角色Role的對應關系。(如果將 Creator看作是 Basic 的發明者, Administrator 就是 Basic 的使用者,他可以做一些腳本式的編程) Operator是這個系統中最關鍵的部分,它是一個紐帶,一個系在Programmer,Administrator,User之間的紐帶。
用一個功能模塊來舉例子。
一.建立角色功能并做分配:
1.如果現在要做一個員工管理的模塊(即Resources),這個模塊有三個功能,分別是:增加,修改,刪除。給這三個功能各自分配一個ID,這個ID叫做功能代號:
Emp_addEmp,Emp_deleteEmp,Emp_updateEmp。
2.建立一個角色(Role),把上面的功能代碼加到這個角色擁有的權限中,并保存到數據庫中。角色包括系統管理員,測試人員等。
3.建立一個員工的賬號,并把一種或幾種角色賦給這個員工。比如說這個員工既可以是公司管理人員,也可以是測試人員等。這樣他登錄到系統中將會只看到他擁有權限的那些模塊。
二.把身份信息加到Session中。
登錄時,先到數據庫中查找是否存在這個員工,如果存在,再根據員工的sn查找員工的權限信息,把員工所有的權限信息都入到一個Hashmap中,比如就把上面的Emp_addEmp等放到這個Hashmap中。然后把Hashmap保存在一個UserInfoBean中。最后把這個UserInfoBean放到Session中,這樣在整個程序的運行過程中,系統隨時都可以取得這個用戶的身份信息。
三.根據用戶的權限做出不同的顯示。
可以對比當前員工的權限和給這個菜單分配的“功能ID”判斷當前用戶是否有打開這個菜單的權限。例如:如果保存員工權限的Hashmap中沒有這三個ID的任何一個,那這個菜單就不會顯示,如果員工的Hashmap中有任何一個ID,那這個菜單都會顯示。
對于一個新聞系統(Resouce),假設它有這樣的功能(Privilege):查看,發布,刪除,修改;假設對于刪除,有"新聞系統管理者只能刪除一月前發布的,而超級管理員可刪除所有的這樣的限制,這屬于業務邏輯(Business logic),而不屬于用戶權限范圍。也就是說權限負責有沒有刪除的Permission,至于能刪除哪些內容應該根據UserRole or UserGroup來決定(當然給UserRole or UserGroup分配權限時就應該包含上面兩條業務邏輯)。
一個用戶可以擁有多種角色,但同一時刻用戶只能用一種角色進入系統。角色的劃分方法可以根據實際情況劃分,按部門或機構進行劃分的,至于角色擁有多少權限,這就看系統管理員賦給他多少的權限了。用戶—角色—權限的關鍵是角色。用戶登錄時是以用戶和角色兩種屬性進行登錄的(因為一個用戶可以擁有多種角色,但同一時刻只能扮演一種角色),根據角色得到用戶的權限,登錄后進行初始化。這其中的技巧是同一時刻某一用戶只能用一種角色進行登錄。
針對不同的“角色”動態的建立不同的組,每個項目建立一個單獨的Group,對于新的項目,建立新的 Group 即可。在權限判斷部分,應在商業方法上予以控制。比如:不同用戶的“操作能力”是不同的(粗粒度的控制應能滿足要求),不同用戶的“可視區域”是不同的(體現在對被操作的對象的權限數據,是否允許當前用戶訪問,這需要對業務數據建模的時候考慮權限控制需要)。
擴展性:
有了用戶/權限管理的基本框架,Who(User/Group)的概念是不會經常需要擴展的。變化的可能是系統中引入新的 What (新的Resource類型)或者新的How(新的操作方式)。那在三個基本概念中,僅在Permission上進行擴展是不夠的。這樣的設計中Permission實質上解決了How 的問題,即表示了“怎樣”的操作。那么這個“怎樣”是在哪一個層次上的定義呢?將Permission定義在“商業方法”級別比較合適。比如,發布、購買、取消。每一個商業方法可以意味著用戶進行的一個“動作”。定義在商業邏輯的層次上,一方面保證了數據訪問代碼的“純潔性”,另一方面在功能上也是“足夠”的。也就是說,對更低層次,能自由的訪問數據,對更高層次,也能比較精細的控制權限。
確定了Permission定義的合適層次,更進一步,能夠發現Permission實際上還隱含了What的概念。也就是說,對于What的How操作才會是一個完整的Operator。比如,“發布”操作,隱含了“信息”的“發布”概念,而對于“商品”而言發布操作是沒有意義的。同樣的,“購買”操作,隱含了“商品”的“購買”概念。這里的綁定還體現在大量通用的同名的操作上,比如,需要區分“商品的刪除”與“信息的刪除”這兩個同名為“刪除”的不同操作。
提供權限系統的擴展能力是在Operator (Resource + Permission)的概念上進行擴展。Proxy 模式是一個非常合適的實現方式。實現大致如下:在業務邏輯層(EJB Session Facade [Stateful SessionBean]中),取得該商業方法的Methodname,再根據Classname和 Methodname 檢索Operator 數據,然后依據這個Operator信息和Stateful中保存的User信息判斷當前用戶是否具備該方法的操作權限。
應用在 EJB 模式下,可以定義一個很明確的 Business層次,而一個Business 可能意味著不同的視圖,當多個視圖都對應于一個業務邏輯的時候,比如,Swing Client以及 Jsp Client 訪問的是同一個 EJB 實現的 Business。在 Business 層上應用權限較能提供集中的控制能力。實際上,如果權限系統提供了查詢能力,那么會發現,在視圖層次已經可以不去理解權限,它只需要根據查詢結果控制界面就可以了。
靈活性:
Group和Role,只是一種輔助實現的手段,不是必需的。如果系統的Role很多,逐個授權違背了“簡單,方便”的目的,那就引入Group,將權限相同的Role組成一個Group進行集中授權。Role也一樣,是某一類Operator的集合,是為了簡化針對多個Operator的操作。
Role把具體的用戶和組從權限中解放出來。一個用戶可以承擔不同的角色,從而實現授權的靈活性。當然,Group也可以實現類似的功能。但實際業務中,Group劃分多以行政組織結構或業務功能劃分;如果為了權限管理強行將一個用戶加入不同的組,會導致管理的復雜性。
Domain的應用。為了授權更靈活,可以將Where或者Scope抽象出來,稱之為Domain,真正的授權是在Domain的范圍內進行,具體的Resource將分屬于不同的Domain。比如:一個新聞機構有國內與國外兩大分支,兩大分支內又都有不同的資源(體育類、生活類、時事政治類)。假如所有國內新聞的權限規則都是一樣的,所有國外新聞的權限規則也相同。則可以建立兩個域,分別授權,然后只要將各類新聞與不同的域關聯,受域上的權限控制,從而使之簡化。
權限系統還應該考慮將功能性的授權與資源性的授權分開。很多系統都只有對系統中的數據(資源)的維護有權限控制,但沒有對系統功能的權限控制。
權限系統最好是可以分層管理而不是集中管理。大多客戶希望不同的部門能且僅能管理其部門內部的事務,而不是什么都需要一個集中的Administrator或Administrators組來管理。雖然你可以將不同部門的人都加入Administrators組,但他們的權限過大,可以管理整個系統資源而不是該部門資源。
正向授權與負向授權:正向授權在開始時假定主體沒有任何權限,然后根據需要授予權限,適合于權限要求嚴格的系統。負向授權在開始時假定主體有所有權限,然后將某些特殊權限收回。
權限計算策略:系統中User,Group,Role都可以授權,權限可以有正負向之分,在計算用戶的凈權限時定義一套策略。
系統中應該有一個集中管理權限的AccessService,負責權限的維護(業務管理員、安全管理模塊)與使用(最終用戶、各功能模塊),該AccessService在實現時要同時考慮一般權限與特殊權限。雖然在具體實現上可以有很多,比如用Proxy模式,但應該使這些Proxy依賴于AccessService。各模塊功能中調用AccessService來檢查是否有相應的權限。所以說,權限管理不是安全管理模塊自己一個人的事情,而是與系統各功能模塊都有關系。每個功能模塊的開發人員都應該熟悉安全管理模塊,當然,也要從業務上熟悉本模塊的安全規則。
技術實現:
1.表單式認證,這是常用的,但用戶到達一個不被授權訪問的資源時,Web容器就發
出一個html頁面,要求輸入用戶名和密碼。
2.一個基于Servlet Sign in/Sign out來集中處理所有的Request,缺點是必須由應用程序自己來處理。
3.用Filter防止用戶訪問一些未被授權的資源,Filter會截取所有Request/Response,
然后放置一個驗證通過的標識在用戶的Session中,然后Filter每次依靠這個標識來決定是否放行Response。
這個模式分為:
Gatekeeper :采取Filter或統一Servlet的方式。
Authenticator: 在Web中使用JAAS自己來實現。
用戶資格存儲LDAP或數據庫:
1. Gatekeeper攔截檢查每個到達受保護的資源。首先檢查這個用戶是否有已經創建
好的Login Session,如果沒有,Gatekeeper 檢查是否有一個全局的和Authenticator相關的session?
2. 如果沒有全局的session,這個用戶被導向到Authenticator的Sign-on 頁面,
要求提供用戶名和密碼。
3. Authenticator接受用戶名和密碼,通過用戶的資格系統驗證用戶。
4. 如果驗證成功,Authenticator將創建一個全局Login session,并且導向Gatekeeper
來為這個用戶在他的web應用中創建一個Login Session。
5. Authenticator和Gatekeepers聯合分享Cookie,或者使用Tokens在Query字符里。

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/bndxgae/archive/2006/08/01/1006821.aspx

轉載于:https://www.cnblogs.com/hsapphire/archive/2010/05/20/1739774.html

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的权限管理的设计方法的全部內容,希望文章能夠幫你解決所遇到的問題。

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

国产色视频一区二区三区 | 国产精品怡红院永久免费 | 亚洲综合久久一区二区 | av无码不卡在线观看免费 | 亚洲色欲久久久综合网东京热 | 又大又黄又粗又爽的免费视频 | 领导边摸边吃奶边做爽在线观看 | 国产精品资源一区二区 | 纯爱无遮挡h肉动漫在线播放 | 中文字幕色婷婷在线视频 | 国产乱子伦视频在线播放 | 国内精品人妻无码久久久影院蜜桃 | 亚洲欧美国产精品专区久久 | 国产激情无码一区二区app | 亚洲日韩中文字幕在线播放 | 国产亚洲精品久久久ai换 | www国产精品内射老师 | 国产人妻精品一区二区三区不卡 | 天天躁夜夜躁狠狠是什么心态 | 精品国产麻豆免费人成网站 | 任你躁国产自任一区二区三区 | 久久精品女人天堂av免费观看 | 欧美性猛交xxxx富婆 | 亚洲无人区午夜福利码高清完整版 | 又大又紧又粉嫩18p少妇 | 老熟妇仑乱视频一区二区 | 久久久久久国产精品无码下载 | 一二三四社区在线中文视频 | 国产亚洲精品精品国产亚洲综合 | 午夜男女很黄的视频 | 久久久精品456亚洲影院 | 激情国产av做激情国产爱 | 丰满人妻精品国产99aⅴ | a片免费视频在线观看 | 日韩精品无码一区二区中文字幕 | 1000部夫妻午夜免费 | 好屌草这里只有精品 | 小sao货水好多真紧h无码视频 | 国产特级毛片aaaaaaa高清 | 亚洲精品国产精品乱码视色 | 无码帝国www无码专区色综合 | 亲嘴扒胸摸屁股激烈网站 | 帮老师解开蕾丝奶罩吸乳网站 | 久久久久成人片免费观看蜜芽 | 国产亚洲日韩欧美另类第八页 | 300部国产真实乱 | а天堂中文在线官网 | 日韩欧美中文字幕在线三区 | 亚洲精品无码国产 | 76少妇精品导航 | 国产猛烈高潮尖叫视频免费 | 成人免费视频在线观看 | 免费无码一区二区三区蜜桃大 | 十八禁真人啪啪免费网站 | av无码不卡在线观看免费 | 日本xxxx色视频在线观看免费 | 久久人人爽人人人人片 | 国产超级va在线观看视频 | 亚洲精品国产精品乱码不卡 | 国产真人无遮挡作爱免费视频 | 国产亚洲人成a在线v网站 | 日本护士xxxxhd少妇 | 激情亚洲一区国产精品 | 日韩av激情在线观看 | 国产香蕉尹人视频在线 | 久久天天躁狠狠躁夜夜免费观看 | 欧美人与牲动交xxxx | 亚洲欧美色中文字幕在线 | 97se亚洲精品一区 | 高潮毛片无遮挡高清免费 | 亚洲欧洲无卡二区视頻 | 麻花豆传媒剧国产免费mv在线 | 国产精品理论片在线观看 | 国产亚洲美女精品久久久2020 | 精品夜夜澡人妻无码av蜜桃 | 国产精品久久精品三级 | 巨爆乳无码视频在线观看 | 国产电影无码午夜在线播放 | 十八禁真人啪啪免费网站 | 亚洲精品国偷拍自产在线观看蜜桃 | 精品无码国产自产拍在线观看蜜 | 宝宝好涨水快流出来免费视频 | v一区无码内射国产 | 国产人妻人伦精品1国产丝袜 | 中文字幕无码日韩欧毛 | 亚洲熟熟妇xxxx | 无码乱肉视频免费大全合集 | 亚洲国产精品久久人人爱 | 福利一区二区三区视频在线观看 | 2020久久香蕉国产线看观看 | 55夜色66夜色国产精品视频 | 日韩精品无码一区二区中文字幕 | 亚洲一区二区三区在线观看网站 | 久久久久久久女国产乱让韩 | 欧美阿v高清资源不卡在线播放 | 亚洲精品国产a久久久久久 | 双乳奶水饱满少妇呻吟 | 国产成人一区二区三区在线观看 | 99riav国产精品视频 | 中文字幕乱码人妻无码久久 | 性生交片免费无码看人 | 久久国产自偷自偷免费一区调 | 无码乱肉视频免费大全合集 | 精品无人国产偷自产在线 | 日韩精品成人一区二区三区 | 亚洲国产高清在线观看视频 | 久久综合给合久久狠狠狠97色 | 最近中文2019字幕第二页 | 国产香蕉尹人综合在线观看 | 日本xxxx色视频在线观看免费 | 日本高清一区免费中文视频 | 精品国产国产综合精品 | 波多野结衣av一区二区全免费观看 | 东京热男人av天堂 | 国产深夜福利视频在线 | 亚洲国产精品久久久久久 | 一本色道婷婷久久欧美 | 国产后入清纯学生妹 | 大地资源网第二页免费观看 | 日韩无套无码精品 | 波多野结衣一区二区三区av免费 | 欧美日韩久久久精品a片 | 中文字幕乱码人妻二区三区 | 中文毛片无遮挡高清免费 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 亚洲精品久久久久avwww潮水 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 国产香蕉尹人视频在线 | 午夜无码区在线观看 | 99精品久久毛片a片 | 欧洲vodafone精品性 | 久久综合九色综合97网 | 又大又黄又粗又爽的免费视频 | 中文毛片无遮挡高清免费 | 国产精品二区一区二区aⅴ污介绍 | 久久久久av无码免费网 | 水蜜桃亚洲一二三四在线 | 亚洲国产精品成人久久蜜臀 | 国产午夜亚洲精品不卡下载 | 99国产精品白浆在线观看免费 | 九九在线中文字幕无码 | 亚洲a无码综合a国产av中文 | 中文字幕无码热在线视频 | 国产福利视频一区二区 | 乱码午夜-极国产极内射 | 精品成在人线av无码免费看 | 久久久成人毛片无码 | 日本xxxx色视频在线观看免费 | 国产精品久久久久无码av色戒 | 婷婷六月久久综合丁香 | 丰满少妇女裸体bbw | 国产内射爽爽大片视频社区在线 | 香蕉久久久久久av成人 | 无码国产乱人伦偷精品视频 | 亚洲gv猛男gv无码男同 | 色婷婷av一区二区三区之红樱桃 | 人妻体内射精一区二区三四 | 日日摸天天摸爽爽狠狠97 | 一区二区传媒有限公司 | 亚洲精品无码国产 | 欧美国产亚洲日韩在线二区 | 亚洲精品国产品国语在线观看 | 久久久久久久久888 | 亚洲精品无码国产 | 亚洲乱码中文字幕在线 | 亚欧洲精品在线视频免费观看 | 无套内谢的新婚少妇国语播放 | 无码精品国产va在线观看dvd | 精品人妻人人做人人爽夜夜爽 | 精品日本一区二区三区在线观看 | 日韩人妻无码中文字幕视频 | 无码中文字幕色专区 | 18精品久久久无码午夜福利 | 亚洲一区二区三区香蕉 | 激情亚洲一区国产精品 | 中文字幕色婷婷在线视频 | 欧美丰满熟妇xxxx性ppx人交 | 人人澡人人透人人爽 | 好屌草这里只有精品 | а√天堂www在线天堂小说 | 亚洲精品久久久久久久久久久 | 麻豆精产国品 | 色妞www精品免费视频 | 亚洲s码欧洲m码国产av | 亚洲精品一区二区三区在线观看 | 国产亚洲美女精品久久久2020 | 日韩精品a片一区二区三区妖精 | 天天拍夜夜添久久精品大 | 亚洲色欲色欲天天天www | 欧美亚洲国产一区二区三区 | 国产精华av午夜在线观看 | 免费乱码人妻系列无码专区 | 无码帝国www无码专区色综合 | 日本欧美一区二区三区乱码 | 亚洲精品一区二区三区婷婷月 | 亚洲一区二区三区香蕉 | 国内精品久久久久久中文字幕 | 美女黄网站人色视频免费国产 | 国产精品沙发午睡系列 | 狠狠综合久久久久综合网 | 国产一区二区三区四区五区加勒比 | 国产精品无套呻吟在线 | 久久久久免费看成人影片 | 大乳丰满人妻中文字幕日本 | 午夜嘿嘿嘿影院 | 久精品国产欧美亚洲色aⅴ大片 | 久久午夜夜伦鲁鲁片无码免费 | 女人被男人躁得好爽免费视频 | 麻豆果冻传媒2021精品传媒一区下载 | 国精产品一品二品国精品69xx | 装睡被陌生人摸出水好爽 | 97资源共享在线视频 | 一本久道久久综合狠狠爱 | 成人欧美一区二区三区 | 亚洲啪av永久无码精品放毛片 | 青青久在线视频免费观看 | 久久无码专区国产精品s | 日韩精品一区二区av在线 | 国产麻豆精品一区二区三区v视界 | 精品成在人线av无码免费看 | a片在线免费观看 | а√资源新版在线天堂 | 日本乱偷人妻中文字幕 | 国产97色在线 | 免 | 久久人人爽人人人人片 | av在线亚洲欧洲日产一区二区 | 天天拍夜夜添久久精品 | 久久午夜夜伦鲁鲁片无码免费 | 日本精品久久久久中文字幕 | 国产午夜亚洲精品不卡 | 西西人体www44rt大胆高清 | 美女毛片一区二区三区四区 | 国内少妇偷人精品视频免费 | 久久人人爽人人爽人人片av高清 | 亚洲乱码国产乱码精品精 | 丰满人妻一区二区三区免费视频 | 国产亚洲美女精品久久久2020 | 亚洲精品午夜国产va久久成人 | 清纯唯美经典一区二区 | 国产精品无套呻吟在线 | 极品嫩模高潮叫床 | 色婷婷香蕉在线一区二区 | 亚洲精品无码人妻无码 | 天堂亚洲免费视频 | 性欧美熟妇videofreesex | 精品久久久中文字幕人妻 | 天堂а√在线中文在线 | 人人妻人人澡人人爽欧美一区九九 | 永久黄网站色视频免费直播 | 亚洲国产av精品一区二区蜜芽 | 俄罗斯老熟妇色xxxx | 俺去俺来也在线www色官网 | 天天躁夜夜躁狠狠是什么心态 | 国产精品国产自线拍免费软件 | 亚无码乱人伦一区二区 | 性欧美大战久久久久久久 | 无码人妻av免费一区二区三区 | 日本www一道久久久免费榴莲 | 97资源共享在线视频 | 蜜桃无码一区二区三区 | 国产精品沙发午睡系列 | 帮老师解开蕾丝奶罩吸乳网站 | 国语自产偷拍精品视频偷 | av人摸人人人澡人人超碰下载 | 久久精品99久久香蕉国产色戒 | 十八禁视频网站在线观看 | 国精产品一品二品国精品69xx | 国产亚洲tv在线观看 | 精品无码国产自产拍在线观看蜜 | 人妻少妇精品无码专区动漫 | 亚洲成av人片天堂网无码】 | 国产精品无码成人午夜电影 | 成人女人看片免费视频放人 | 国语精品一区二区三区 | 极品嫩模高潮叫床 | 国产精品久久久久无码av色戒 | 亚洲国产午夜精品理论片 | 亚洲 另类 在线 欧美 制服 | 久久精品女人的天堂av | 午夜福利试看120秒体验区 | 欧美性猛交内射兽交老熟妇 | 欧美日本日韩 | 亚洲综合在线一区二区三区 | 荫蒂被男人添的好舒服爽免费视频 | 精品无码av一区二区三区 | 精品成人av一区二区三区 | www一区二区www免费 | 狠狠色噜噜狠狠狠狠7777米奇 | 色五月五月丁香亚洲综合网 | 在线а√天堂中文官网 | 欧美日韩人成综合在线播放 | 国产特级毛片aaaaaaa高清 | 欧美刺激性大交 | 高潮喷水的毛片 | 亚洲国产一区二区三区在线观看 | 久久国产36精品色熟妇 | 国产午夜手机精彩视频 | 在教室伦流澡到高潮hnp视频 | 日本在线高清不卡免费播放 | 亚洲一区二区三区国产精华液 | 夜夜影院未满十八勿进 | 精品国产国产综合精品 | 久久久久av无码免费网 | 无套内射视频囯产 | 丝袜 中出 制服 人妻 美腿 | 欧美国产日产一区二区 | 美女极度色诱视频国产 | 人人爽人人澡人人人妻 | 无码乱肉视频免费大全合集 | 天下第一社区视频www日本 | 亚洲国产精品美女久久久久 | 天天躁夜夜躁狠狠是什么心态 | 欧美精品免费观看二区 | 欧美国产日韩亚洲中文 | 日日天干夜夜狠狠爱 | 在线观看国产午夜福利片 | 樱花草在线社区www | 成人av无码一区二区三区 | 久久无码中文字幕免费影院蜜桃 | 特黄特色大片免费播放器图片 | 亚洲国产精品久久人人爱 | 少妇久久久久久人妻无码 | 亚洲码国产精品高潮在线 | 欧美变态另类xxxx | 日产精品99久久久久久 | 天堂无码人妻精品一区二区三区 | 一个人看的www免费视频在线观看 | 亚洲熟女一区二区三区 | 国产免费久久久久久无码 | 国产午夜无码精品免费看 | 最近中文2019字幕第二页 | 全黄性性激高免费视频 | 一二三四在线观看免费视频 | 日产精品99久久久久久 | 少妇被粗大的猛进出69影院 | 丰满岳乱妇在线观看中字无码 | 蜜桃无码一区二区三区 | 色婷婷欧美在线播放内射 | 亚洲欧美国产精品专区久久 | 亚洲人交乣女bbw | 性欧美熟妇videofreesex | 给我免费的视频在线观看 | 婷婷综合久久中文字幕蜜桃三电影 | 激情内射亚州一区二区三区爱妻 | 精品国产成人一区二区三区 | 久久久久久久女国产乱让韩 | 日本熟妇人妻xxxxx人hd | 久久精品女人的天堂av | 亚洲综合无码久久精品综合 | 国精品人妻无码一区二区三区蜜柚 | 国产乱人偷精品人妻a片 | 欧美丰满熟妇xxxx性ppx人交 | 无码人妻出轨黑人中文字幕 | 日本一区二区更新不卡 | 日本免费一区二区三区最新 | 少妇被黑人到高潮喷出白浆 | 国产在线精品一区二区三区直播 | 黑人大群体交免费视频 | 黑人大群体交免费视频 | 国产精品久久久久久亚洲影视内衣 | 呦交小u女精品视频 | 国产内射老熟女aaaa | 日本丰满护士爆乳xxxx | 99久久精品国产一区二区蜜芽 | 亚洲国产av精品一区二区蜜芽 | 中文精品无码中文字幕无码专区 | 日本丰满熟妇videos | 日本熟妇人妻xxxxx人hd | 中文亚洲成a人片在线观看 | 国产成人精品久久亚洲高清不卡 | 大肉大捧一进一出视频出来呀 | 最新国产麻豆aⅴ精品无码 | 色一情一乱一伦一视频免费看 | 亚洲欧美综合区丁香五月小说 | 99久久人妻精品免费一区 | 亚洲精品无码人妻无码 | 国产免费观看黄av片 | 国产免费久久久久久无码 | 国产做国产爱免费视频 | aⅴ在线视频男人的天堂 | 国精产品一区二区三区 | 又大又硬又黄的免费视频 | 久久久精品456亚洲影院 | 国产超碰人人爽人人做人人添 | 日本熟妇大屁股人妻 | 丝袜 中出 制服 人妻 美腿 | 一本大道伊人av久久综合 | 成人片黄网站色大片免费观看 | 2020久久超碰国产精品最新 | 97人妻精品一区二区三区 | 久久无码中文字幕免费影院蜜桃 | 人妻少妇精品无码专区二区 | 精品无人区无码乱码毛片国产 | 亚洲色www成人永久网址 | 99精品无人区乱码1区2区3区 | 国产综合在线观看 | 亚洲欧美日韩成人高清在线一区 | 亚洲综合久久一区二区 | 久久精品国产精品国产精品污 | 久9re热视频这里只有精品 | 欧美变态另类xxxx | 久久人人爽人人爽人人片ⅴ | 欧美性猛交xxxx富婆 | 国产精品鲁鲁鲁 | 日韩精品无码免费一区二区三区 | 精品熟女少妇av免费观看 | 一本大道久久东京热无码av | 色欲综合久久中文字幕网 | 日日碰狠狠躁久久躁蜜桃 | 天堂无码人妻精品一区二区三区 | 亚洲自偷自拍另类第1页 | 欧美成人午夜精品久久久 | 久久aⅴ免费观看 | 宝宝好涨水快流出来免费视频 | 国产真实乱对白精彩久久 | 玩弄少妇高潮ⅹxxxyw | 久在线观看福利视频 | 成人试看120秒体验区 | 亚洲呦女专区 | 内射欧美老妇wbb | 亚洲精品一区二区三区在线 | 久久人人97超碰a片精品 | 麻豆果冻传媒2021精品传媒一区下载 | 久久天天躁夜夜躁狠狠 | 最近的中文字幕在线看视频 | 亚洲精品中文字幕乱码 | 久久99久久99精品中文字幕 | 特大黑人娇小亚洲女 | 亚洲娇小与黑人巨大交 | 国产精品无码一区二区桃花视频 | 暴力强奷在线播放无码 | 无码人妻av免费一区二区三区 | 日本一卡二卡不卡视频查询 | av在线亚洲欧洲日产一区二区 | 国产美女极度色诱视频www | 国产深夜福利视频在线 | 婷婷丁香五月天综合东京热 | 97夜夜澡人人双人人人喊 | 色欲人妻aaaaaaa无码 | 女人和拘做爰正片视频 | 少妇性l交大片欧洲热妇乱xxx | 精品久久综合1区2区3区激情 | 久久亚洲中文字幕精品一区 | 狂野欧美性猛xxxx乱大交 | 熟女少妇人妻中文字幕 | 国产内射爽爽大片视频社区在线 | 图片区 小说区 区 亚洲五月 | 九九热爱视频精品 | 免费观看的无遮挡av | 无码精品人妻一区二区三区av | 天堂а√在线地址中文在线 | 1000部啪啪未满十八勿入下载 | 少妇激情av一区二区 | 久久aⅴ免费观看 | 亚洲中文字幕av在天堂 | 99视频精品全部免费免费观看 | 欧美性猛交xxxx富婆 | 国产成人无码av在线影院 | 荫蒂添的好舒服视频囗交 | 99久久精品国产一区二区蜜芽 | 国产精品.xx视频.xxtv | 精品欧洲av无码一区二区三区 | 激情内射日本一区二区三区 | 对白脏话肉麻粗话av | 小泽玛莉亚一区二区视频在线 | 国产精品无码mv在线观看 | 国产高清不卡无码视频 | 国产猛烈高潮尖叫视频免费 | 国产精品嫩草久久久久 | 野狼第一精品社区 | 亚洲精品无码国产 | 欧美性猛交xxxx富婆 | 国产农村乱对白刺激视频 | 内射欧美老妇wbb | 99久久精品无码一区二区毛片 | 亚洲精品成人福利网站 | 婷婷丁香六月激情综合啪 | 乌克兰少妇xxxx做受 | 精品偷拍一区二区三区在线看 | 久久97精品久久久久久久不卡 | 国语精品一区二区三区 | 无码国产色欲xxxxx视频 | 麻花豆传媒剧国产免费mv在线 | 国产午夜亚洲精品不卡下载 | 18黄暴禁片在线观看 | 亚洲中文字幕av在天堂 | 久久久久人妻一区精品色欧美 | 国产人成高清在线视频99最全资源 | 欧美性色19p | 国产亚av手机在线观看 | 国产午夜手机精彩视频 | 久久99久久99精品中文字幕 | 国产在线一区二区三区四区五区 | 97无码免费人妻超级碰碰夜夜 | 一本一道久久综合久久 | 精品欧美一区二区三区久久久 | 日韩在线不卡免费视频一区 | 亚洲中文字幕成人无码 | √8天堂资源地址中文在线 | 成人性做爰aaa片免费看不忠 | 亚洲自偷自偷在线制服 | 日日天日日夜日日摸 | 无码人妻黑人中文字幕 | 自拍偷自拍亚洲精品10p | 人人超人人超碰超国产 | 亚洲欧美国产精品专区久久 | 亚洲欧美国产精品久久 | 亚洲成av人影院在线观看 | 欧美国产日韩亚洲中文 | 国产精品亚洲一区二区三区喷水 | 中文字幕乱码亚洲无线三区 | 天干天干啦夜天干天2017 | 国产成人精品久久亚洲高清不卡 | 国产亚洲欧美在线专区 | 久久国产劲爆∧v内射 | 亚洲国产精品无码一区二区三区 | 国产成人精品优优av | 台湾无码一区二区 | 粗大的内捧猛烈进出视频 | 亚洲精品国产精品乱码视色 | 性做久久久久久久免费看 | 久久午夜夜伦鲁鲁片无码免费 | 久久国产精品精品国产色婷婷 | 日韩精品一区二区av在线 | 日韩精品无码一区二区中文字幕 | 国产人妻精品一区二区三区不卡 | 少妇的肉体aa片免费 | 无遮挡国产高潮视频免费观看 | 丰满人妻翻云覆雨呻吟视频 | 欧美亚洲日韩国产人成在线播放 | 精品无码av一区二区三区 | 在线欧美精品一区二区三区 | 欧美日韩视频无码一区二区三 | 性欧美牲交xxxxx视频 | 99久久精品午夜一区二区 | 色五月丁香五月综合五月 | 乌克兰少妇性做爰 | 国内精品久久久久久中文字幕 | 波多野结衣乳巨码无在线观看 | 欧美人与动性行为视频 | 久久这里只有精品视频9 | 亚无码乱人伦一区二区 | 乱中年女人伦av三区 | 粗大的内捧猛烈进出视频 | 成人无码视频在线观看网站 | 青草视频在线播放 | 人妻天天爽夜夜爽一区二区 | 97人妻精品一区二区三区 | 久久亚洲国产成人精品性色 | 97夜夜澡人人双人人人喊 | 综合激情五月综合激情五月激情1 | 狠狠噜狠狠狠狠丁香五月 | 在线精品亚洲一区二区 | 无码帝国www无码专区色综合 | 又粗又大又硬又长又爽 | 欧美日韩视频无码一区二区三 | 久久综合色之久久综合 | 中文字幕亚洲情99在线 | 国产精品高潮呻吟av久久 | 日本熟妇乱子伦xxxx | 丰满岳乱妇在线观看中字无码 | 国产熟妇高潮叫床视频播放 | 在线成人www免费观看视频 | 久久人人爽人人爽人人片ⅴ | 青青草原综合久久大伊人精品 | 久久天天躁狠狠躁夜夜免费观看 | 亚洲第一网站男人都懂 | av无码不卡在线观看免费 | 久久精品国产精品国产精品污 | 成在人线av无码免观看麻豆 | 漂亮人妻洗澡被公强 日日躁 | 中文字幕 亚洲精品 第1页 | 日本精品久久久久中文字幕 | 无码成人精品区在线观看 | 蜜桃臀无码内射一区二区三区 | 九九久久精品国产免费看小说 | 丰满肥臀大屁股熟妇激情视频 | 国产99久久精品一区二区 | 国产福利视频一区二区 | 欧美老熟妇乱xxxxx | 国产午夜福利100集发布 | 精品国产一区二区三区四区 | 鲁一鲁av2019在线 | 性欧美疯狂xxxxbbbb | 老熟女重囗味hdxx69 | 久久久久久a亚洲欧洲av冫 | 人妻天天爽夜夜爽一区二区 | 亚洲色在线无码国产精品不卡 | 国产精品亚洲五月天高清 | 婷婷丁香五月天综合东京热 | 免费中文字幕日韩欧美 | 亚洲人交乣女bbw | 欧美精品免费观看二区 | 久久97精品久久久久久久不卡 | 少妇性l交大片 | 亚洲综合无码久久精品综合 | 丰满诱人的人妻3 | 人妻插b视频一区二区三区 | 日韩亚洲欧美精品综合 | 麻豆国产人妻欲求不满谁演的 | 国产激情无码一区二区 | 亚洲精品中文字幕乱码 | 久久久精品国产sm最大网站 | 内射后入在线观看一区 | 国产精品久免费的黄网站 | 国产人妻精品一区二区三区 | 人妻少妇精品久久 | 国产人妖乱国产精品人妖 | 国产在线无码精品电影网 | 亚洲一区二区三区偷拍女厕 | 国产免费久久精品国产传媒 | 无码任你躁久久久久久久 | 牲欲强的熟妇农村老妇女视频 | 国产一区二区三区四区五区加勒比 | 免费无码av一区二区 | 国产熟女一区二区三区四区五区 | 荫蒂被男人添的好舒服爽免费视频 | 精品无人国产偷自产在线 | 国产精品沙发午睡系列 | 99久久久国产精品无码免费 | 国产suv精品一区二区五 | 欧美国产亚洲日韩在线二区 | 爱做久久久久久 | 日韩无码专区 | 日本爽爽爽爽爽爽在线观看免 | 色综合久久88色综合天天 | 5858s亚洲色大成网站www | 97久久精品无码一区二区 | 久久无码专区国产精品s | 久久无码中文字幕免费影院蜜桃 | 四虎国产精品一区二区 | √天堂资源地址中文在线 | 国产区女主播在线观看 | 成人毛片一区二区 | 无码午夜成人1000部免费视频 | 亚洲男人av香蕉爽爽爽爽 | 丰满护士巨好爽好大乳 | 日本爽爽爽爽爽爽在线观看免 | 国产精品多人p群无码 | 人妻天天爽夜夜爽一区二区 | 人人妻人人澡人人爽欧美一区 | 久久精品人人做人人综合 | 无码av免费一区二区三区试看 | 一本久道久久综合狠狠爱 | 中文字幕人妻丝袜二区 | 亚洲国产精品久久久天堂 | 国产在线精品一区二区高清不卡 | 无码人妻精品一区二区三区下载 | 日韩欧美中文字幕公布 | 国产另类ts人妖一区二区 | 中文字幕无码av波多野吉衣 | 一区二区三区高清视频一 | 久久久久久久人妻无码中文字幕爆 | 东京一本一道一二三区 | 国产亚洲人成a在线v网站 | 2019nv天堂香蕉在线观看 | 无码人妻精品一区二区三区下载 | 欧美成人免费全部网站 | 99久久久无码国产aaa精品 | 国语精品一区二区三区 | 在线播放亚洲第一字幕 | 男人的天堂2018无码 | 无遮无挡爽爽免费视频 | 亚洲国产欧美国产综合一区 | 青青青手机频在线观看 | 亚洲gv猛男gv无码男同 | 亚洲综合在线一区二区三区 | 精品午夜福利在线观看 | 18无码粉嫩小泬无套在线观看 | 国产精品二区一区二区aⅴ污介绍 | 三上悠亚人妻中文字幕在线 | 国产真实夫妇视频 | 丰满人妻一区二区三区免费视频 | 人妻互换免费中文字幕 | 久久综合香蕉国产蜜臀av | 欧美zoozzooz性欧美 | 成人片黄网站色大片免费观看 | 中文字幕乱码人妻二区三区 | 丝袜足控一区二区三区 | 国产福利视频一区二区 | 亚洲 a v无 码免 费 成 人 a v | 在线观看国产午夜福利片 | 未满小14洗澡无码视频网站 | 午夜无码区在线观看 | 国产高清av在线播放 | 丰满岳乱妇在线观看中字无码 | 亚洲人交乣女bbw | 激情综合激情五月俺也去 | 亚洲中文字幕无码一久久区 | 亚洲国产精华液网站w | 国产欧美精品一区二区三区 | 国产精品va在线观看无码 | 亚洲日本在线电影 | 亚洲精品一区国产 | 装睡被陌生人摸出水好爽 | 日本精品人妻无码免费大全 | 人妻少妇精品无码专区二区 | 亚洲 a v无 码免 费 成 人 a v | 日本丰满护士爆乳xxxx | 亚洲成a人片在线观看无码 | 国产无av码在线观看 | 久久综合给合久久狠狠狠97色 | 曰韩少妇内射免费播放 | 欧洲熟妇色 欧美 | 亚洲の无码国产の无码步美 | 久久天天躁狠狠躁夜夜免费观看 | 日本xxxx色视频在线观看免费 | 色诱久久久久综合网ywww | 久久亚洲中文字幕无码 | 精品人妻人人做人人爽夜夜爽 | 亚洲中文字幕乱码av波多ji | 亚洲色大成网站www国产 | 自拍偷自拍亚洲精品被多人伦好爽 | 18无码粉嫩小泬无套在线观看 | 99久久无码一区人妻 | 亚洲欧美色中文字幕在线 | 奇米影视7777久久精品人人爽 | 精品国产精品久久一区免费式 | 亚洲精品中文字幕乱码 | 亚洲国产精品毛片av不卡在线 | 秋霞成人午夜鲁丝一区二区三区 | 99久久久国产精品无码免费 | 亚洲熟妇色xxxxx欧美老妇 | 高清国产亚洲精品自在久久 | 一本大道伊人av久久综合 | 波多野结衣乳巨码无在线观看 | 国内精品久久久久久中文字幕 | 久久精品国产精品国产精品污 | 亚洲乱码国产乱码精品精 | 亚洲第一无码av无码专区 | 欧美性猛交内射兽交老熟妇 | 内射白嫩少妇超碰 | 国产精品亚洲а∨无码播放麻豆 | 日本精品人妻无码免费大全 | 少妇一晚三次一区二区三区 | 性啪啪chinese东北女人 | 四虎4hu永久免费 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 在线视频网站www色 | 亚洲人成网站色7799 | 久久久久免费看成人影片 | 露脸叫床粗话东北少妇 | 国产精品视频免费播放 | 亚洲综合久久一区二区 | 日韩亚洲欧美中文高清在线 | 精品成在人线av无码免费看 | 一本久道久久综合狠狠爱 | 久久无码专区国产精品s | 人妻少妇精品视频专区 | 免费网站看v片在线18禁无码 | 九九在线中文字幕无码 | 人妻与老人中文字幕 | 国产真人无遮挡作爱免费视频 | 在线播放亚洲第一字幕 | 在线播放亚洲第一字幕 | 黑人巨大精品欧美一区二区 | 日本一区二区三区免费播放 | 51国偷自产一区二区三区 | 丝袜美腿亚洲一区二区 | 影音先锋中文字幕无码 | av无码久久久久不卡免费网站 | 久久亚洲精品成人无码 | 男女作爱免费网站 | 免费无码一区二区三区蜜桃大 | 国产av无码专区亚洲a∨毛片 | 奇米影视888欧美在线观看 | 无码播放一区二区三区 | 久久无码专区国产精品s | 国产午夜亚洲精品不卡下载 | 日本爽爽爽爽爽爽在线观看免 | 少妇愉情理伦片bd | 欧美人与牲动交xxxx | 综合网日日天干夜夜久久 | 亚洲成av人片在线观看无码不卡 | 亚洲第一无码av无码专区 | 夜夜躁日日躁狠狠久久av | 国产精品美女久久久网av | 国产午夜亚洲精品不卡下载 | 国内揄拍国内精品人妻 | 无码av免费一区二区三区试看 | 学生妹亚洲一区二区 | 熟妇人妻无乱码中文字幕 | 色综合久久久无码网中文 | 国产精品igao视频网 | 久久婷婷五月综合色国产香蕉 | 狠狠色噜噜狠狠狠7777奇米 | 欧美野外疯狂做受xxxx高潮 | 性欧美熟妇videofreesex | 亚洲男人av天堂午夜在 | 一本大道久久东京热无码av | 亚洲国产精品久久久天堂 | 国产精品丝袜黑色高跟鞋 | 狂野欧美激情性xxxx | 午夜理论片yy44880影院 | 性色av无码免费一区二区三区 | 亚洲精品一区二区三区大桥未久 | 人人妻人人澡人人爽欧美精品 | 内射白嫩少妇超碰 | 亚洲男女内射在线播放 | 亚洲啪av永久无码精品放毛片 | 国产亚洲美女精品久久久2020 | 高潮毛片无遮挡高清免费视频 | 国产色视频一区二区三区 | 天天摸天天透天天添 | 久久久久国色av免费观看性色 | 97夜夜澡人人爽人人喊中国片 | 精品成在人线av无码免费看 | 色五月丁香五月综合五月 | 欧美第一黄网免费网站 | 图片区 小说区 区 亚洲五月 | 国产激情无码一区二区 | 久久 国产 尿 小便 嘘嘘 | 亚洲熟女一区二区三区 | 亚洲成色www久久网站 | 中国大陆精品视频xxxx | 亚洲理论电影在线观看 | 无码人妻丰满熟妇区毛片18 | 日本大香伊一区二区三区 | 一本大道久久东京热无码av | 两性色午夜视频免费播放 | 久久99精品国产.久久久久 | 亚洲综合在线一区二区三区 | 一二三四在线观看免费视频 | 在线а√天堂中文官网 | 亚洲精品国偷拍自产在线麻豆 | 国产午夜亚洲精品不卡 | 成人aaa片一区国产精品 | 欧美丰满熟妇xxxx性ppx人交 | 四虎4hu永久免费 | 十八禁真人啪啪免费网站 | 女高中生第一次破苞av | 国产精品免费大片 | 日本www一道久久久免费榴莲 | 亚洲日本va午夜在线电影 | 熟女俱乐部五十路六十路av | 亚洲 激情 小说 另类 欧美 | 亚洲色www成人永久网址 | 99久久人妻精品免费二区 | 老头边吃奶边弄进去呻吟 | 亚洲综合伊人久久大杳蕉 | 国产成人无码区免费内射一片色欲 | 日日碰狠狠躁久久躁蜜桃 | 国产在线无码精品电影网 | 亚洲色无码一区二区三区 | 樱花草在线播放免费中文 | 无码播放一区二区三区 | 国产无遮挡又黄又爽又色 | 天天av天天av天天透 | 亚洲自偷自偷在线制服 | 国产一区二区不卡老阿姨 | 麻豆国产人妻欲求不满谁演的 | 老子影院午夜伦不卡 | 亚洲成色www久久网站 | 日日噜噜噜噜夜夜爽亚洲精品 | 波多野结衣高清一区二区三区 | 蜜臀aⅴ国产精品久久久国产老师 | 免费无码的av片在线观看 | 麻豆国产97在线 | 欧洲 | 欧美成人家庭影院 | 国产人妻精品一区二区三区不卡 | 亚洲国产综合无码一区 | 曰韩无码二三区中文字幕 | 国产精品久久久av久久久 | 婷婷综合久久中文字幕蜜桃三电影 | 高潮毛片无遮挡高清免费 | 在线精品亚洲一区二区 | 未满成年国产在线观看 | 爆乳一区二区三区无码 | 欧美熟妇另类久久久久久多毛 | 国产精品亚洲а∨无码播放麻豆 | 欧美丰满熟妇xxxx性ppx人交 | 无码人妻丰满熟妇区毛片18 | 精品成人av一区二区三区 | 草草网站影院白丝内射 | 国产精品亚洲а∨无码播放麻豆 | 久久视频在线观看精品 | 98国产精品综合一区二区三区 | 欧洲欧美人成视频在线 | 亚洲综合色区中文字幕 | 日日碰狠狠躁久久躁蜜桃 | 偷窥村妇洗澡毛毛多 | 男女下面进入的视频免费午夜 | 99久久久国产精品无码免费 | 激情综合激情五月俺也去 | 精品无码国产一区二区三区av | 国产精品免费大片 | 久久精品无码一区二区三区 | 久久99精品国产麻豆 | 国产精品亚洲专区无码不卡 | 久久99精品久久久久婷婷 | 日本一卡二卡不卡视频查询 | 欧美老妇交乱视频在线观看 | 特级做a爰片毛片免费69 | 波多野结衣av在线观看 | 日本又色又爽又黄的a片18禁 | 夜精品a片一区二区三区无码白浆 | 99久久99久久免费精品蜜桃 | 狂野欧美激情性xxxx | 国产精品无码一区二区三区不卡 | 天堂无码人妻精品一区二区三区 | 婷婷五月综合缴情在线视频 | 两性色午夜视频免费播放 | av人摸人人人澡人人超碰下载 | 国产精品美女久久久久av爽李琼 | 性生交片免费无码看人 | 亚洲熟妇色xxxxx欧美老妇y | 国产激情无码一区二区 | 欧洲熟妇色 欧美 | 久久人妻内射无码一区三区 | 曰韩无码二三区中文字幕 | 啦啦啦www在线观看免费视频 | 中文字幕中文有码在线 | 国语精品一区二区三区 | v一区无码内射国产 | 亚洲国产精品毛片av不卡在线 | 国产精品高潮呻吟av久久 | 久久这里只有精品视频9 | 国产人妻人伦精品1国产丝袜 | 欧美成人午夜精品久久久 | 熟妇人妻无乱码中文字幕 | 欧美三级不卡在线观看 | 99精品视频在线观看免费 | 无码午夜成人1000部免费视频 | 大胆欧美熟妇xx | 中文字幕av无码一区二区三区电影 | 黄网在线观看免费网站 | 中文字幕日产无线码一区 | 精品aⅴ一区二区三区 | 两性色午夜免费视频 | 蜜桃视频韩日免费播放 | 蜜桃视频韩日免费播放 | 国产精品亚洲综合色区韩国 | 国产一区二区不卡老阿姨 | 在线a亚洲视频播放在线观看 | 国产艳妇av在线观看果冻传媒 | 国产va免费精品观看 | 鲁大师影院在线观看 | 特大黑人娇小亚洲女 | 狂野欧美性猛xxxx乱大交 | 国产av人人夜夜澡人人爽麻豆 | 欧美精品无码一区二区三区 | 亚洲精品一区国产 | 久久精品一区二区三区四区 | 狠狠综合久久久久综合网 | 黑人巨大精品欧美黑寡妇 | 99视频精品全部免费免费观看 | 在教室伦流澡到高潮hnp视频 | av在线亚洲欧洲日产一区二区 | 欧美日本日韩 | 亚洲精品一区二区三区婷婷月 | 亚洲无人区午夜福利码高清完整版 | 久久久久久a亚洲欧洲av冫 | 国产激情一区二区三区 | 亚洲人亚洲人成电影网站色 | 国产明星裸体无码xxxx视频 | 日本丰满护士爆乳xxxx | 久久人人爽人人爽人人片ⅴ | 精品人人妻人人澡人人爽人人 | 日韩精品久久久肉伦网站 | 国产精品理论片在线观看 | 台湾无码一区二区 | 国产内射老熟女aaaa | 色婷婷av一区二区三区之红樱桃 | 亚洲欧美精品伊人久久 | 男女猛烈xx00免费视频试看 | 亚洲精品久久久久久一区二区 | 一个人看的www免费视频在线观看 | 丰满人妻翻云覆雨呻吟视频 | 久热国产vs视频在线观看 | 欧美乱妇无乱码大黄a片 | 亚洲国产欧美日韩精品一区二区三区 | 丁香花在线影院观看在线播放 | 国产成人无码午夜视频在线观看 | 熟妇人妻无乱码中文字幕 | 欧洲美熟女乱又伦 | 亚洲色欲色欲欲www在线 | 中文字幕无码热在线视频 | a片在线免费观看 | 国产欧美精品一区二区三区 | 亚洲经典千人经典日产 | 日本va欧美va欧美va精品 | 日韩少妇内射免费播放 | 99riav国产精品视频 | 又紧又大又爽精品一区二区 | 成人无码精品1区2区3区免费看 | 国产精品亚洲专区无码不卡 | 国产成人精品视频ⅴa片软件竹菊 | 亚洲自偷自拍另类第1页 | 免费男性肉肉影院 | 99久久婷婷国产综合精品青草免费 | 久久精品国产日本波多野结衣 | 亚洲色欲色欲欲www在线 | 国产真实乱对白精彩久久 | 亚洲va中文字幕无码久久不卡 | 狠狠色色综合网站 | 牲欲强的熟妇农村老妇女 | 色偷偷av老熟女 久久精品人妻少妇一区二区三区 | 国产精品无码一区二区三区不卡 | 欧美第一黄网免费网站 | 久久人人爽人人人人片 | 中文字幕无码热在线视频 | 无码帝国www无码专区色综合 | 国产无遮挡又黄又爽又色 | 成 人影片 免费观看 | 精品久久久无码中文字幕 | 亚洲国产高清在线观看视频 | 精品国产一区二区三区四区 | 76少妇精品导航 | 久久精品人妻少妇一区二区三区 | 亚洲小说图区综合在线 | 中文字幕人妻无码一夲道 | 国产一精品一av一免费 | 综合激情五月综合激情五月激情1 | 亚洲乱码中文字幕在线 | 国产热a欧美热a在线视频 | 亚洲欧美日韩综合久久久 | 日日橹狠狠爱欧美视频 | 国产成人人人97超碰超爽8 | 久久熟妇人妻午夜寂寞影院 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 亚洲中文无码av永久不收费 | 女人被爽到呻吟gif动态图视看 | 97人妻精品一区二区三区 | 久久99国产综合精品 | 性欧美牲交在线视频 | 亚洲中文字幕无码一久久区 | 爆乳一区二区三区无码 | 国产精品久久久久7777 | 成人一区二区免费视频 | 乌克兰少妇性做爰 | 激情人妻另类人妻伦 | 亚洲综合无码久久精品综合 | 精品久久久无码中文字幕 | 蜜桃av抽搐高潮一区二区 | 亚洲色大成网站www | 特黄特色大片免费播放器图片 | 丰满护士巨好爽好大乳 | 亚洲午夜久久久影院 | 亚洲色大成网站www国产 | 三上悠亚人妻中文字幕在线 | 少妇高潮一区二区三区99 | 一本久久伊人热热精品中文字幕 | 日韩精品无码一本二本三本色 | 最近的中文字幕在线看视频 | a在线亚洲男人的天堂 | 欧美日韩在线亚洲综合国产人 | 国产午夜无码视频在线观看 | 伊人久久婷婷五月综合97色 | 无码av最新清无码专区吞精 | 国产高清av在线播放 | 乱中年女人伦av三区 | 国产精品理论片在线观看 | 色妞www精品免费视频 | 午夜熟女插插xx免费视频 | 国产人妻大战黑人第1集 | 四虎影视成人永久免费观看视频 | 亚洲欧美综合区丁香五月小说 | 精品厕所偷拍各类美女tp嘘嘘 | 狠狠色噜噜狠狠狠狠7777米奇 | 国产精品久久国产精品99 | 99久久精品国产一区二区蜜芽 | 国精产品一区二区三区 | 国产sm调教视频在线观看 | 久久婷婷五月综合色国产香蕉 | 亚洲成a人片在线观看无码3d | 大屁股大乳丰满人妻 | 高潮喷水的毛片 | 国产莉萝无码av在线播放 | 99精品无人区乱码1区2区3区 | 国产亚洲tv在线观看 | 亚洲男女内射在线播放 | 国产激情精品一区二区三区 | 思思久久99热只有频精品66 | 影音先锋中文字幕无码 | 日韩亚洲欧美精品综合 | 国产sm调教视频在线观看 | 人妻aⅴ无码一区二区三区 | 国内精品一区二区三区不卡 | 亚洲色无码一区二区三区 | 欧美激情一区二区三区成人 | 蜜桃无码一区二区三区 | 无码人妻av免费一区二区三区 | 成人性做爰aaa片免费看 | 亚洲综合伊人久久大杳蕉 | 一二三四社区在线中文视频 | 乱人伦人妻中文字幕无码久久网 | 欧洲精品码一区二区三区免费看 | 日日摸天天摸爽爽狠狠97 | 国产亚洲视频中文字幕97精品 | 2019午夜福利不卡片在线 | 久久综合九色综合欧美狠狠 | 色婷婷综合中文久久一本 | 狠狠色噜噜狠狠狠狠7777米奇 | 无码人妻丰满熟妇区毛片18 | 日韩欧美群交p片內射中文 | 亚洲色偷偷男人的天堂 | a国产一区二区免费入口 | 国产人妻人伦精品1国产丝袜 | 久久久精品欧美一区二区免费 | 日本一区二区三区免费高清 | 精品久久久中文字幕人妻 | 国产精品手机免费 | 欧美性生交xxxxx久久久 | 牲欲强的熟妇农村老妇女视频 | 小sao货水好多真紧h无码视频 | 国产一精品一av一免费 | 久久久久国色av免费观看性色 | 51国偷自产一区二区三区 | 中文字幕乱码中文乱码51精品 | 国产精品亚洲а∨无码播放麻豆 | 亚无码乱人伦一区二区 | 国产在线一区二区三区四区五区 | 国产又爽又黄又刺激的视频 | 夜夜夜高潮夜夜爽夜夜爰爰 | 久久无码中文字幕免费影院蜜桃 | 无套内谢老熟女 | 国精品人妻无码一区二区三区蜜柚 | 内射白嫩少妇超碰 | 国产人妻人伦精品1国产丝袜 | 亚洲日韩精品欧美一区二区 | 97无码免费人妻超级碰碰夜夜 | 久久人人爽人人爽人人片av高清 | 久久久成人毛片无码 | 中文毛片无遮挡高清免费 | 国产人妻精品午夜福利免费 | 日韩无套无码精品 | 亚洲成av人影院在线观看 | 国产午夜福利100集发布 | 日日橹狠狠爱欧美视频 | 97精品国产97久久久久久免费 | www国产精品内射老师 | 国产精品久久久久久久影院 | 国产精品人人爽人人做我的可爱 | 国产香蕉尹人综合在线观看 | 国产免费无码一区二区视频 | 国产内射爽爽大片视频社区在线 | 国产69精品久久久久app下载 | 国产精品久久久久久无码 | 人人妻人人藻人人爽欧美一区 | 丰满肥臀大屁股熟妇激情视频 | 国产成人无码午夜视频在线观看 | 日韩精品无码一本二本三本色 | 人妻少妇被猛烈进入中文字幕 | 成人无码视频免费播放 | 亚洲综合久久一区二区 | 亚洲国产精品无码久久久久高潮 | 日日麻批免费40分钟无码 | 荫蒂被男人添的好舒服爽免费视频 | 中文字幕乱码人妻二区三区 | 久青草影院在线观看国产 | 国产精品久久久久久亚洲毛片 | 亚洲综合无码久久精品综合 | 国产精品久久国产三级国 | 少妇无码av无码专区在线观看 | 中文字幕中文有码在线 | 欧美性猛交xxxx富婆 | 日韩少妇内射免费播放 | 麻豆国产97在线 | 欧洲 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 亚洲大尺度无码无码专区 | 成人性做爰aaa片免费看 | 国产精品人妻一区二区三区四 | 国产热a欧美热a在线视频 | 久久久精品国产sm最大网站 | 中文字幕无码视频专区 | 亚洲第一网站男人都懂 | 日本一区二区三区免费播放 | 国产莉萝无码av在线播放 | 夫妻免费无码v看片 | 99久久人妻精品免费二区 | 亚洲精品一区二区三区在线观看 | 小鲜肉自慰网站xnxx | 成人亚洲精品久久久久软件 | 国精品人妻无码一区二区三区蜜柚 | 国产一区二区不卡老阿姨 | 成人片黄网站色大片免费观看 | 丝袜人妻一区二区三区 | 青春草在线视频免费观看 | 色偷偷人人澡人人爽人人模 | 性开放的女人aaa片 | 国产精品久久久久久久9999 | 欧美一区二区三区视频在线观看 | 日日摸天天摸爽爽狠狠97 | 亚洲综合在线一区二区三区 | 精品国产一区二区三区av 性色 | 午夜丰满少妇性开放视频 | 国产又粗又硬又大爽黄老大爷视 | 久久人人爽人人爽人人片av高清 | 三上悠亚人妻中文字幕在线 | 无码人妻精品一区二区三区下载 | 精品久久久久久人妻无码中文字幕 | 精品少妇爆乳无码av无码专区 | 在线成人www免费观看视频 | 国产sm调教视频在线观看 | 曰本女人与公拘交酡免费视频 | 国产精品久久久久久久影院 | 一区二区三区高清视频一 | 久青草影院在线观看国产 | 亚洲天堂2017无码中文 | 久久综合香蕉国产蜜臀av | 亚洲国产综合无码一区 | 精品久久久久久人妻无码中文字幕 | 一本久道久久综合婷婷五月 | 妺妺窝人体色www在线小说 | 日韩 欧美 动漫 国产 制服 | 亚无码乱人伦一区二区 | 亚洲国产欧美在线成人 | 色五月五月丁香亚洲综合网 | 久久精品国产99精品亚洲 | 国产一区二区不卡老阿姨 | 荫蒂被男人添的好舒服爽免费视频 | 亚洲日本在线电影 | 欧美日韩综合一区二区三区 | 日日天干夜夜狠狠爱 | 日韩在线不卡免费视频一区 | 一区二区传媒有限公司 | 亚洲午夜久久久影院 | 久久国产精品萌白酱免费 | 老熟女重囗味hdxx69 | 久久精品国产99精品亚洲 | 中文字幕乱码人妻无码久久 | 国产乱人偷精品人妻a片 | 又大又硬又黄的免费视频 | 老头边吃奶边弄进去呻吟 | 伊人色综合久久天天小片 | 亚洲色欲久久久综合网东京热 | 人妻少妇被猛烈进入中文字幕 | 日本欧美一区二区三区乱码 | 亚洲精品成a人在线观看 | 精品偷自拍另类在线观看 | 5858s亚洲色大成网站www | 亚洲中文字幕成人无码 | 免费看少妇作爱视频 | 图片小说视频一区二区 | 亚洲色大成网站www国产 | 中文字幕av无码一区二区三区电影 | 精品国产福利一区二区 | 成人女人看片免费视频放人 | 综合激情五月综合激情五月激情1 | 性色欲网站人妻丰满中文久久不卡 | 欧美zoozzooz性欧美 | 无码成人精品区在线观看 | 暴力强奷在线播放无码 | 兔费看少妇性l交大片免费 | 欧美精品一区二区精品久久 | 伊人久久大香线蕉午夜 | 久久久av男人的天堂 | 大地资源中文第3页 | 欧美国产亚洲日韩在线二区 | 成人aaa片一区国产精品 | 中文精品久久久久人妻不卡 | 欧美亚洲日韩国产人成在线播放 | 天天综合网天天综合色 | 午夜时刻免费入口 | 在线精品国产一区二区三区 | 性生交大片免费看女人按摩摩 | 亚洲自偷自拍另类第1页 | 无码精品国产va在线观看dvd | 国产精品99爱免费视频 | 中文字幕+乱码+中文字幕一区 | 无码播放一区二区三区 | 亚洲精品综合五月久久小说 | 亚洲国产精品毛片av不卡在线 | 欧美喷潮久久久xxxxx | 中文字幕av无码一区二区三区电影 | 色爱情人网站 | аⅴ资源天堂资源库在线 | 无码人妻丰满熟妇区五十路百度 | 欧美人妻一区二区三区 | 高潮毛片无遮挡高清免费 | 成人免费视频视频在线观看 免费 | www一区二区www免费 | 澳门永久av免费网站 | 图片区 小说区 区 亚洲五月 | 真人与拘做受免费视频一 | 扒开双腿吃奶呻吟做受视频 | 少妇性l交大片 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 狠狠噜狠狠狠狠丁香五月 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 亚洲a无码综合a国产av中文 | 波多野结衣av在线观看 | 99久久久无码国产aaa精品 | 亚洲中文字幕成人无码 | 婷婷综合久久中文字幕蜜桃三电影 | 扒开双腿吃奶呻吟做受视频 | 日日摸日日碰夜夜爽av | 麻豆蜜桃av蜜臀av色欲av | 乱码av麻豆丝袜熟女系列 | 国产女主播喷水视频在线观看 | 久久久久免费精品国产 | 最近的中文字幕在线看视频 | 国产69精品久久久久app下载 | 扒开双腿疯狂进出爽爽爽视频 | 男女性色大片免费网站 | 狠狠躁日日躁夜夜躁2020 | 欧美日韩人成综合在线播放 | 国产sm调教视频在线观看 | 狂野欧美性猛xxxx乱大交 | 人人爽人人澡人人高潮 | 无码精品国产va在线观看dvd | 亚洲日韩av片在线观看 | 亚洲欧美精品aaaaaa片 | 欧美性猛交xxxx富婆 | 国产精品香蕉在线观看 | 欧美乱妇无乱码大黄a片 | 久久久久se色偷偷亚洲精品av | 人妻少妇精品视频专区 | 国产色xx群视频射精 | 色妞www精品免费视频 | 国产精品18久久久久久麻辣 | 久久久久久九九精品久 | 国产精品高潮呻吟av久久 | 国产9 9在线 | 中文 | 水蜜桃色314在线观看 | 国产综合色产在线精品 | 永久免费观看国产裸体美女 | 最新版天堂资源中文官网 | 欧美三级a做爰在线观看 | 成 人影片 免费观看 | 亚洲成av人影院在线观看 | 亚洲 激情 小说 另类 欧美 | 中文毛片无遮挡高清免费 | 色综合视频一区二区三区 | 国产成人久久精品流白浆 | 国产亚洲tv在线观看 | 亚洲男女内射在线播放 | 男人的天堂av网站 | а天堂中文在线官网 | 亚洲欧美中文字幕5发布 | 大地资源网第二页免费观看 | 欧美 日韩 亚洲 在线 | 国产网红无码精品视频 | 人妻无码久久精品人妻 | 丰满妇女强制高潮18xxxx | 国产成人综合美国十次 | 少妇性荡欲午夜性开放视频剧场 | 偷窥村妇洗澡毛毛多 | 亚洲熟妇色xxxxx亚洲 | 少妇的肉体aa片免费 | 鲁鲁鲁爽爽爽在线视频观看 | 野外少妇愉情中文字幕 | 国产小呦泬泬99精品 | 无码成人精品区在线观看 | 久久99精品久久久久久动态图 | 黑森林福利视频导航 | 牛和人交xxxx欧美 | а天堂中文在线官网 | 精品国产乱码久久久久乱码 | 狠狠色噜噜狠狠狠7777奇米 | 7777奇米四色成人眼影 | 亚洲欧洲日本综合aⅴ在线 | 国产成人久久精品流白浆 | 精品厕所偷拍各类美女tp嘘嘘 | 樱花草在线社区www | 久久精品国产精品国产精品污 | 正在播放老肥熟妇露脸 | 天干天干啦夜天干天2017 | 国产香蕉97碰碰久久人人 | 蜜桃av抽搐高潮一区二区 | 未满小14洗澡无码视频网站 | 精品国产国产综合精品 | 国产精品18久久久久久麻辣 | 99久久精品国产一区二区蜜芽 | 无码福利日韩神码福利片 | 日日天干夜夜狠狠爱 | 国产极品美女高潮无套在线观看 | 国产无遮挡又黄又爽免费视频 | 日韩无套无码精品 | 亚洲啪av永久无码精品放毛片 | 色欲人妻aaaaaaa无码 | 日韩人妻无码一区二区三区久久99 | 红桃av一区二区三区在线无码av | 亚洲中文字幕在线无码一区二区 | 国产手机在线αⅴ片无码观看 | 波多野结衣 黑人 | 奇米影视7777久久精品 | 国产午夜亚洲精品不卡 | 国内精品九九久久久精品 | 国产亚洲日韩欧美另类第八页 | 无套内谢老熟女 | 久久久久久久女国产乱让韩 | 久久午夜无码鲁丝片 | 精品日本一区二区三区在线观看 | 麻豆国产丝袜白领秘书在线观看 | 中文无码伦av中文字幕 | 久久99精品久久久久婷婷 | 久久精品成人欧美大片 | 亚洲精品一区二区三区婷婷月 | 久久这里只有精品视频9 | 男女超爽视频免费播放 | 国产精品无码一区二区桃花视频 | 欧美日本精品一区二区三区 | 亚洲国产欧美在线成人 | 国内少妇偷人精品视频 | a国产一区二区免费入口 | 国产高清av在线播放 | 成人亚洲精品久久久久软件 | 免费人成在线视频无码 | 成年美女黄网站色大免费全看 | 伊在人天堂亚洲香蕉精品区 | 亚洲欧美日韩国产精品一区二区 | 国产精品无码永久免费888 | 一区二区三区乱码在线 | 欧洲 | 成人欧美一区二区三区黑人 | 日韩精品一区二区av在线 | 色欲人妻aaaaaaa无码 | 无码福利日韩神码福利片 | 人妻aⅴ无码一区二区三区 | 人妻少妇精品久久 | 国内精品九九久久久精品 | 97久久国产亚洲精品超碰热 | 久久精品视频在线看15 | 人妻少妇被猛烈进入中文字幕 | 大地资源中文第3页 | 熟女体下毛毛黑森林 | 国产成人综合美国十次 | 国产成人一区二区三区别 | 久久天天躁狠狠躁夜夜免费观看 | 在线观看免费人成视频 | 欧美老妇交乱视频在线观看 | 亚洲精品一区国产 | 女人色极品影院 | 国产成人精品视频ⅴa片软件竹菊 | 成人无码影片精品久久久 | 亚洲成av人综合在线观看 | 亚洲欧美国产精品久久 | 秋霞成人午夜鲁丝一区二区三区 | 纯爱无遮挡h肉动漫在线播放 | 国产成人无码av在线影院 | 亚洲国产高清在线观看视频 | 网友自拍区视频精品 | 无码精品国产va在线观看dvd | 欧美激情一区二区三区成人 | 天天躁日日躁狠狠躁免费麻豆 | 国产亚洲精品久久久久久久 | 岛国片人妻三上悠亚 | 久久国内精品自在自线 | 国产人妻精品一区二区三区 | 久久精品国产一区二区三区 | 亚洲大尺度无码无码专区 | 欧美精品免费观看二区 | 国产欧美精品一区二区三区 | 女人被男人爽到呻吟的视频 | 免费人成在线视频无码 | 麻豆成人精品国产免费 | 丝袜 中出 制服 人妻 美腿 | 99久久亚洲精品无码毛片 | 国产一精品一av一免费 | 免费无码av一区二区 | 欧美激情内射喷水高潮 | 正在播放老肥熟妇露脸 | 国产精品鲁鲁鲁 | 亚洲国产综合无码一区 | 香蕉久久久久久av成人 | 精品国产麻豆免费人成网站 | 亚洲日韩中文字幕在线播放 | 亚洲国产精品久久久久久 | 欧美黑人巨大xxxxx | 麻豆果冻传媒2021精品传媒一区下载 | 亚洲日韩av片在线观看 | 国产成人久久精品流白浆 | 国产成人人人97超碰超爽8 | 国产精品美女久久久网av | 久久 国产 尿 小便 嘘嘘 | 日韩欧美群交p片內射中文 | 欧美怡红院免费全部视频 | 亚洲色偷偷男人的天堂 | 国产乱人偷精品人妻a片 | 高清国产亚洲精品自在久久 | 极品嫩模高潮叫床 | 午夜成人1000部免费视频 | 18禁止看的免费污网站 | 国产一区二区三区日韩精品 | 日本va欧美va欧美va精品 | 国产成人无码午夜视频在线观看 | 国产精品高潮呻吟av久久4虎 | a片在线免费观看 | 亚洲第一无码av无码专区 | 1000部啪啪未满十八勿入下载 | 天下第一社区视频www日本 | 麻豆国产丝袜白领秘书在线观看 | 性啪啪chinese东北女人 | 国产偷国产偷精品高清尤物 | 国产精品毛片一区二区 | 午夜成人1000部免费视频 | 男女爱爱好爽视频免费看 | www一区二区www免费 | 99久久久无码国产精品免费 | 亚洲精品久久久久久久久久久 | 国产亚洲美女精品久久久2020 | 无码成人精品区在线观看 | 精品厕所偷拍各类美女tp嘘嘘 | 一本久道久久综合婷婷五月 | 国产熟妇高潮叫床视频播放 | 精品偷拍一区二区三区在线看 | 亚洲精品中文字幕乱码 | 国产精品理论片在线观看 | 特大黑人娇小亚洲女 | 中文无码伦av中文字幕 | 一区二区三区乱码在线 | 欧洲 | 中文字幕中文有码在线 | 黑人粗大猛烈进出高潮视频 | 国产人妻精品一区二区三区不卡 | 久久亚洲中文字幕精品一区 | 国产一区二区不卡老阿姨 | 狠狠色噜噜狠狠狠狠7777米奇 | 77777熟女视频在线观看 а天堂中文在线官网 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 天堂а√在线中文在线 | 麻豆蜜桃av蜜臀av色欲av | 波多野结衣乳巨码无在线观看 | 少妇性俱乐部纵欲狂欢电影 | 亚洲小说图区综合在线 | 中文字幕乱码中文乱码51精品 | 国产午夜无码精品免费看 | 狠狠亚洲超碰狼人久久 | 国产精品无码久久av | 久久精品中文闷骚内射 | 日本www一道久久久免费榴莲 | 性生交大片免费看女人按摩摩 | 一本加勒比波多野结衣 | 亚洲综合色区中文字幕 | 无码人妻丰满熟妇区五十路百度 | 国产亚av手机在线观看 | 日本乱偷人妻中文字幕 | 中文字幕精品av一区二区五区 | 欧美性生交xxxxx久久久 | 国产色xx群视频射精 | 一本精品99久久精品77 | 国内揄拍国内精品人妻 | 自拍偷自拍亚洲精品10p | 窝窝午夜理论片影院 | 欧洲vodafone精品性 | 久久zyz资源站无码中文动漫 | √天堂资源地址中文在线 | 日本大乳高潮视频在线观看 | 麻豆av传媒蜜桃天美传媒 | 国产尤物精品视频 | 成人一在线视频日韩国产 | 强辱丰满人妻hd中文字幕 | 国产又爽又黄又刺激的视频 | 久久成人a毛片免费观看网站 | 强辱丰满人妻hd中文字幕 | 久久99精品久久久久久动态图 | 国产婷婷色一区二区三区在线 | 天天躁日日躁狠狠躁免费麻豆 | 综合激情五月综合激情五月激情1 | 欧美丰满熟妇xxxx性ppx人交 | 中文字幕乱码亚洲无线三区 | 久久精品国产精品国产精品污 | 国产麻豆精品精东影业av网站 | 国产精品igao视频网 | 久久97精品久久久久久久不卡 | 无码乱肉视频免费大全合集 | 熟妇人妻中文av无码 | 内射爽无广熟女亚洲 | 日日橹狠狠爱欧美视频 | 亚洲大尺度无码无码专区 | 精品午夜福利在线观看 | 久久国产精品精品国产色婷婷 | 偷窥日本少妇撒尿chinese | 国产美女精品一区二区三区 | 午夜免费福利小电影 | 在线欧美精品一区二区三区 | 2020最新国产自产精品 | 久久五月精品中文字幕 | 精品乱码久久久久久久 | 亚洲一区二区三区含羞草 | 精品午夜福利在线观看 | 波多野结衣aⅴ在线 | 国产亚洲tv在线观看 | 99er热精品视频 | 国产免费久久久久久无码 | 久久精品国产99精品亚洲 | 亚洲狠狠色丁香婷婷综合 | 熟妇人妻中文av无码 | 中文字幕精品av一区二区五区 | 国产亚洲精品久久久久久国模美 | 亚洲综合无码久久精品综合 | 男人和女人高潮免费网站 | 欧美激情一区二区三区成人 | 给我免费的视频在线观看 | 女人被爽到呻吟gif动态图视看 | 国产麻豆精品精东影业av网站 | 精品国产一区二区三区av 性色 | 色婷婷综合激情综在线播放 | 最近免费中文字幕中文高清百度 | 扒开双腿吃奶呻吟做受视频 | 亚洲一区二区三区四区 | 精品国产一区av天美传媒 | 青青青手机频在线观看 | 欧美人妻一区二区三区 | 久久婷婷五月综合色国产香蕉 | 国产偷国产偷精品高清尤物 | 初尝人妻少妇中文字幕 | 中文字幕人成乱码熟女app | 久久久久久九九精品久 | 亚洲日本一区二区三区在线 | 九九热爱视频精品 | 精品国产福利一区二区 | 老子影院午夜伦不卡 | 日本在线高清不卡免费播放 | aⅴ亚洲 日韩 色 图网站 播放 | 欧美熟妇另类久久久久久多毛 | 无码任你躁久久久久久久 | 国产精品国产自线拍免费软件 | 最新国产乱人伦偷精品免费网站 | 99精品无人区乱码1区2区3区 | 亚洲欧美中文字幕5发布 | 亚洲中文字幕无码中字 | 东京一本一道一二三区 | 国产精品办公室沙发 | 婷婷综合久久中文字幕蜜桃三电影 | 亚洲日韩精品欧美一区二区 | 成人无码视频在线观看网站 | 欧美亚洲国产一区二区三区 | 亚洲成av人片天堂网无码】 | 成年女人永久免费看片 | 亲嘴扒胸摸屁股激烈网站 | 国产无遮挡又黄又爽又色 | 久久精品人妻少妇一区二区三区 | 国产精品对白交换视频 | 国产做国产爱免费视频 | 国产欧美亚洲精品a | www国产亚洲精品久久久日本 | 亚洲s码欧洲m码国产av | 台湾无码一区二区 | 日产精品99久久久久久 | 欧美性生交xxxxx久久久 | 亚洲爆乳无码专区 | 国产精品久久久久7777 | 亚洲一区二区三区含羞草 | 国产日产欧产精品精品app | 六月丁香婷婷色狠狠久久 | 老熟妇仑乱视频一区二区 | 亚洲综合另类小说色区 | 午夜嘿嘿嘿影院 | 乌克兰少妇性做爰 | 久久天天躁夜夜躁狠狠 | 国产9 9在线 | 中文 | 亚洲精品国产精品乱码不卡 | 小泽玛莉亚一区二区视频在线 | 波多野结衣一区二区三区av免费 | 亚洲成a人一区二区三区 | 人妻无码αv中文字幕久久琪琪布 | 波多野结衣一区二区三区av免费 | 国产莉萝无码av在线播放 | 人人妻人人澡人人爽欧美精品 | 久久精品女人的天堂av | 中文字幕无码日韩专区 | 四虎国产精品免费久久 | 鲁鲁鲁爽爽爽在线视频观看 | 日韩人妻无码中文字幕视频 | 亚洲日本一区二区三区在线 | 久久成人a毛片免费观看网站 | 国产三级精品三级男人的天堂 | 日本一区二区更新不卡 | 国内精品久久毛片一区二区 | 无人区乱码一区二区三区 | 两性色午夜免费视频 | 久久人妻内射无码一区三区 | 中文字幕人妻无码一区二区三区 | 欧美xxxx黑人又粗又长 | 欧美人与善在线com | 永久免费观看美女裸体的网站 | 欧美xxxx黑人又粗又长 | 亚洲男人av香蕉爽爽爽爽 | 无码人妻精品一区二区三区不卡 | 成人毛片一区二区 | 久久这里只有精品视频9 | 中文毛片无遮挡高清免费 | 好爽又高潮了毛片免费下载 | 日日麻批免费40分钟无码 | 久久精品人人做人人综合 | 亚洲国产高清在线观看视频 |