3atv精品不卡视频,97人人超碰国产精品最新,中文字幕av一区二区三区人妻少妇,久久久精品波多野结衣,日韩一区二区三区精品

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

[shiro] - 怎样使用shiro?

發(fā)布時(shí)間:2025/7/14 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [shiro] - 怎样使用shiro? 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?shiro是什么?

Shiro是apache旗下的一個(gè)開(kāi)源框架, 它將軟件系統(tǒng)的安全認(rèn)證相關(guān)的功能抽取出來(lái), 實(shí)現(xiàn)用戶(hù)身份認(rèn)證, 權(quán)限授權(quán), 加密, 會(huì)話管理等功能, 組成一個(gè)通用的安全認(rèn)證框架.

為什么用它?

使用shiro就可以非常快速地完成認(rèn)證,授權(quán)等功能的開(kāi)發(fā),降低系統(tǒng)成本時(shí)間.

shiro使用廣泛,shiro可以運(yùn)行在web應(yīng)用,非web應(yīng)用,集群分布式應(yīng)用中越來(lái)越多的用戶(hù)開(kāi)始使用shiro。

模塊組成

Subject

Subject即主體,外部應(yīng)用與subject進(jìn)行交互,subject記錄了當(dāng)前操作用戶(hù),將用戶(hù)的概念理解為當(dāng)前操作的主體,可能是一個(gè)通過(guò)瀏覽器請(qǐng)求的用戶(hù),也可能是一個(gè)運(yùn)行的程序.

Subject在shiro中是一個(gè)接口,接口中定義了很多認(rèn)證授權(quán)相關(guān)的方法,外部程序通過(guò)subject進(jìn)行認(rèn)證授權(quán),而subject是通過(guò)SecurityManager安全管理器進(jìn)行認(rèn)證授權(quán).

SecurityManager

SecurityManager即安全管理器,對(duì)全部的subject進(jìn)行安全管理,它是shiro的核心,負(fù)責(zé)對(duì)所有subject進(jìn)行安全管理, 通過(guò)SecurityManager可以完成subject的認(rèn)證,授權(quán)等,

實(shí)質(zhì)上SecurityManager是通過(guò)Authenticator進(jìn)行認(rèn)證,通過(guò)Authorizer進(jìn)行授權(quán),通過(guò)SessionManager進(jìn)行會(huì)話管理等.

SecurityManager是一個(gè)接口,繼承了Authenticator,Authorizer,SessionManager這三個(gè)接口.

Authenticator

Authenticator即認(rèn)證器,對(duì)用戶(hù)身份進(jìn)行認(rèn)證,Authenticator是一個(gè)接口,shiro提供ModularRealmAuthenticator實(shí)現(xiàn)類(lèi),通過(guò)ModularRealmAuthenticator基本上可以滿足

大多數(shù)需求, 也可以自定義認(rèn)證器.

Authorizer

Authorizer即授權(quán)器,用戶(hù)通過(guò)認(rèn)證器認(rèn)證通過(guò),在訪問(wèn)功能時(shí)需要通過(guò)授權(quán)器判斷用戶(hù)是否有此功能的操作權(quán)限.

Realm

Realm即領(lǐng)域,相當(dāng)于datasource數(shù)據(jù)源,securityManager進(jìn)行安全認(rèn)證需要通過(guò)Realm獲取用戶(hù)權(quán)限數(shù)據(jù),比如: 如果用戶(hù)身份數(shù)據(jù)在數(shù)據(jù)庫(kù)那么realm就需要從

數(shù)據(jù)庫(kù)獲取用戶(hù)身份信息.

注意: 不要把realm理解成只是從數(shù)據(jù)源取數(shù)據(jù), 在realm中還有認(rèn)證權(quán)限校驗(yàn)的相關(guān)的代碼.

sessionManager

sessionManager即會(huì)話管理,shiro框架定義了一套會(huì)話管理, 它不依賴(lài)web容器的session, 所以shiro可以使用在非web應(yīng)用上,也可以將分布式應(yīng)用的會(huì)話集中

在一點(diǎn)管理,此特性可使它實(shí)現(xiàn)單點(diǎn)登錄.

SessionDAO

SessionDAO即會(huì)話dao,使對(duì)session會(huì)話操作的一套接口, 比如要將session存儲(chǔ)到數(shù)據(jù)庫(kù), 可以通過(guò)jdbc將會(huì)話存儲(chǔ)到數(shù)據(jù)庫(kù).

CacheManager

CacheManager即緩存管理,將用戶(hù)權(quán)限數(shù)據(jù)存儲(chǔ)在緩存,這樣可以提高性能.

Cryptography

Cryptography即密碼管理,shiro提供了一套加密/解密的組件,方便開(kāi)發(fā). 比如提供常用的散列, 加/解密等功能.

?

下面這個(gè)表是某系統(tǒng)的所有可操控菜單的數(shù)據(jù),存儲(chǔ)了對(duì)應(yīng)的訪問(wèn)路徑.

下面的是角色表:表名了哪個(gè)id干什么事,比如id為4時(shí),是只能使用采購(gòu)員的事情,而不能修改管理員密碼的.因?yàn)槟鞘窍到y(tǒng)管理員的操作.(1)

下面這個(gè)表是角色操控菜單表: 即哪些角色(id)操作哪些菜單menu(id)

?跟左側(cè)的id自增無(wú)關(guān),我們查看menu_id對(duì)應(yīng)的role_id. 這兩張表(menu,role)在上面都已經(jīng)存在了,即表示通過(guò)這個(gè)role-menu表進(jìn)行哪個(gè)角色可操作哪些菜單的設(shè)定.

菜單menu表中有對(duì)應(yīng)的url, 將可以訪問(wèn)的角色進(jìn)行放行,否則進(jìn)行攔截. (在前端頁(yè)面直接不予顯示)

?

下面是用戶(hù)表,沒(méi)有什么奇特的地方,我們?cè)跈?quán)限中將使用到它們的id

下面這個(gè)是比較關(guān)鍵的用戶(hù)角色表,該表定義了哪個(gè)用戶(hù)它屬于什么角色.可以看到有的用戶(hù)分飾多角,比如上面表的主管王大錘分飾了role(2,4,5){主管,采購(gòu)員,銷(xiāo)售經(jīng)理}

而王大錘可以操作哪些菜單?通過(guò)t-role-menu就可以查看到了.具體菜單是在哪些路徑呢?通過(guò)再查詢(xún)t_menu就可以獲取url字段了

?

?

相關(guān)博客1

相關(guān)博客2

相關(guān)博客3

?

|

|

?

新建一個(gè)springboot項(xiàng)目,引入shiro依賴(lài)

<!--shiro權(quán)限--><dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-core</artifactId><version>1.4.0</version></dependency><!--shiro權(quán)限--><dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-spring</artifactId><version>1.4.0</version></dependency>

shiro相關(guān)博客

shiro相關(guān)博客

shiro論壇

github相關(guān)demo

?

簡(jiǎn)單實(shí)用shiro

新建project

需要導(dǎo)入shiro-all的jar包

創(chuàng)建的shiro.ini為shiro的配置文件

shiro.ini內(nèi)容:

#定義用戶(hù) [users] #用戶(hù)名 zhang3 密碼是 12345, 角色是 admin zhang3 = 12345, admin #用戶(hù)名 li4 密碼是 abcde, 角色是 產(chǎn)品經(jīng)理 li4 = abcde,productManager #定義角色 [roles] #管理員什么都能做 admin = * #產(chǎn)品經(jīng)理只能做產(chǎn)品管理 productManager = addProduct,deleteProduct,editProduct,updateProduct,listProduct #訂單經(jīng)理只能做訂單管理 orderManager = addOrder,deleteOrder,editOrder,updateOrder,listOrder

用戶(hù)實(shí)體:

package com.how2java;public class User {private String name;private String password;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}}

測(cè)試類(lèi):

package com.how2java;import java.util.ArrayList; import java.util.List;import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.UsernamePasswordToken; import org.apache.shiro.config.IniSecurityManagerFactory; import org.apache.shiro.mgt.SecurityManager; import org.apache.shiro.subject.Subject; import org.apache.shiro.util.Factory;public class TestShiro {public static void main(String[] args) {//用戶(hù)們User zhang3 = new User();zhang3.setName("zhang3");zhang3.setPassword("12345");User li4 = new User();li4.setName("li4");li4.setPassword("abcde");User wang5 = new User();wang5.setName("wang5");wang5.setPassword("wrongpassword");List<User> users = new ArrayList<>();users.add(zhang3);users.add(li4);users.add(wang5); //角色們String roleAdmin = "admin";String roleProductManager ="productManager";List<String> roles = new ArrayList<>();roles.add(roleAdmin);roles.add(roleProductManager);//權(quán)限們String permitAddProduct = "addProduct";String permitAddOrder = "addOrder";List<String> permits = new ArrayList<>();permits.add(permitAddProduct);permits.add(permitAddOrder);//登陸每個(gè)用戶(hù)for (User user : users) {if(login(user)) System.out.printf("%s \t成功登陸,用的密碼是 %s\t %n",user.getName(),user.getPassword());else System.out.printf("%s \t成功失敗,用的密碼是 %s\t %n",user.getName(),user.getPassword());}System.out.println("-------how2j 分割線------");//判斷能夠登錄的用戶(hù)是否擁有某個(gè)角色for (User user : users) {for (String role : roles) {if(login(user)) {if(hasRole(user, role)) System.out.printf("%s\t 擁有角色: %s\t%n",user.getName(),role);elseSystem.out.printf("%s\t 不擁有角色: %s\t%n",user.getName(),role);}} }System.out.println("-------how2j 分割線------");//判斷能夠登錄的用戶(hù),是否擁有某種權(quán)限for (User user : users) {for (String permit : permits) {if(login(user)) {if(isPermitted(user, permit)) System.out.printf("%s\t 擁有權(quán)限: %s\t%n",user.getName(),permit);elseSystem.out.printf("%s\t 不擁有權(quán)限: %s\t%n",user.getName(),permit);}} }}private static boolean hasRole(User user, String role) {Subject subject = getSubject(user);return subject.hasRole(role);}private static boolean isPermitted(User user, String permit) {Subject subject = getSubject(user);return subject.isPermitted(permit);}private static Subject getSubject(User user) {//加載配置文件,并獲取工廠Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");//獲取安全管理者實(shí)例SecurityManager sm = factory.getInstance();//將安全管理者放入全局對(duì)象 SecurityUtils.setSecurityManager(sm);//全局對(duì)象通過(guò)安全管理者生成Subject對(duì)象Subject subject = SecurityUtils.getSubject();return subject;}private static boolean login(User user) {Subject subject= getSubject(user);//如果已經(jīng)登錄過(guò)了,退出if(subject.isAuthenticated())subject.logout();//封裝用戶(hù)的數(shù)據(jù)UsernamePasswordToken token = new UsernamePasswordToken(user.getName(), user.getPassword());try {//將用戶(hù)的數(shù)據(jù)token 最終傳遞到Realm中進(jìn)行對(duì)比 subject.login(token);} catch (AuthenticationException e) {//驗(yàn)證錯(cuò)誤return false;} return subject.isAuthenticated();}}

測(cè)試輸出:

zhang3 成功登陸,用的密碼是 12345 li4 成功登陸,用的密碼是 abcde wang5 成功失敗,用的密碼是 wrongpassword -------how2j 分割線------ zhang3 擁有角色: admin zhang3 不擁有角色: productManager li4 不擁有角色: admin li4 擁有角色: productManager -------how2j 分割線------ zhang3 擁有權(quán)限: addProduct zhang3 擁有權(quán)限: addOrder li4 擁有權(quán)限: addProduct li4 不擁有權(quán)限: addOrder

|

|

在上面的shiro簡(jiǎn)單測(cè)試后,可以通過(guò)輸出查看到shiro究竟是用來(lái)做什么的.

但是在實(shí)際工作中,我們都會(huì)把權(quán)限相關(guān)的內(nèi)容放在數(shù)據(jù)庫(kù)中,所以本知識(shí)點(diǎn)講解如何放在數(shù)據(jù)庫(kù)里來(lái)跑shiro.

[RBAC概念] : RBAC是當(dāng)下權(quán)限系統(tǒng)的設(shè)計(jì)基礎(chǔ),同時(shí)有兩種解釋:

一 : Role-Based Access Control , 基于角色的訪問(wèn)控制, 即,你要能夠刪除產(chǎn)品,那么當(dāng)前用戶(hù)就必須擁有產(chǎn)品經(jīng)理這個(gè)角色

二 : Resource-Based Access Control , 基于資源的訪問(wèn)控制, 即,你要能夠刪除產(chǎn)品,那么當(dāng)前用戶(hù)就必須擁有刪除產(chǎn)品這樣的權(quán)限

基于角色的權(quán)限訪問(wèn)控制(Role-Based Access Control) 作為傳統(tǒng)的訪問(wèn)控制(自主訪問(wèn),強(qiáng)制訪問(wèn))的有前景的代替受到廣泛的關(guān)注.

在RBAC中,權(quán)限與角色相關(guān)聯(lián), 用戶(hù)通過(guò)成為適當(dāng)角色的成員而得到這些角色的權(quán)限. 這就極大地簡(jiǎn)化了權(quán)限的管理.

在一個(gè)組織中, 角色就是為了完成各種工作而創(chuàng)造, 用戶(hù)則依據(jù)它的責(zé)任和資格來(lái)被指派相應(yīng)的角色,用戶(hù)可以很容器地從一個(gè)角色

被派到另一個(gè)角色. 角色可依新的需求和系統(tǒng)的合并而賦予新的權(quán)限, 而權(quán)限也可根據(jù)需要而從某角色中回收. 角色與角色的關(guān)系

可以建立起來(lái)以囊括更廣泛的客觀情況.

[表結(jié)構(gòu)] : 基于RBAC概念, 就會(huì)存在3張基礎(chǔ)表: 用戶(hù),角色,權(quán)限, 以及2張中間表來(lái)建立用戶(hù)與角色的多對(duì)多關(guān)系, 角色與權(quán)限的多對(duì)多關(guān)系.

用戶(hù)與權(quán)限之間也是多對(duì)多關(guān)系,但是是通過(guò)角色間接建立的.

: 補(bǔ)充多對(duì)多概念: 用戶(hù)和角色是多對(duì)多,即表示:

一個(gè)用戶(hù)可以有多種角色,一個(gè)角色也可以賦予多個(gè)用戶(hù).

一個(gè)角色可以包含多種權(quán)限,一種權(quán)限也可以賦予多個(gè)角色.

建立shiro數(shù)據(jù)庫(kù): 內(nèi)含權(quán)限5表 (用戶(hù),角色,權(quán)限,用戶(hù)角色,角色權(quán)限)

DROP DATABASE IF EXISTS shiro; CREATE DATABASE shiro DEFAULT CHARACTER SET utf8; USE shiro;drop table if exists user; drop table if exists role; drop table if exists permission; drop table if exists user_role; drop table if exists role_permission;create table user (id bigint auto_increment,name varchar(100),password varchar(100),constraint pk_users primary key(id) ) charset=utf8 ENGINE=InnoDB;create table role (id bigint auto_increment,name varchar(100),constraint pk_roles primary key(id) ) charset=utf8 ENGINE=InnoDB;create table permission (id bigint auto_increment,name varchar(100),constraint pk_permissions primary key(id) ) charset=utf8 ENGINE=InnoDB;create table user_role (uid bigint,rid bigint,constraint pk_users_roles primary key(uid, rid) ) charset=utf8 ENGINE=InnoDB;create table role_permission (rid bigint,pid bigint,constraint pk_roles_permissions primary key(rid, pid) ) charset=utf8 ENGINE=InnoDB;

之后基于shiro.ini文件,插入一樣的用戶(hù),角色和權(quán)限數(shù)據(jù).

INSERT INTO `permission` VALUES (1,'addProduct'); INSERT INTO `permission` VALUES (2,'deleteProduct'); INSERT INTO `permission` VALUES (3,'editProduct'); INSERT INTO `permission` VALUES (4,'updateProduct'); INSERT INTO `permission` VALUES (5,'listProduct'); INSERT INTO `permission` VALUES (6,'addOrder'); INSERT INTO `permission` VALUES (7,'deleteOrder'); INSERT INTO `permission` VALUES (8,'editOrder'); INSERT INTO `permission` VALUES (9,'updateOrder'); INSERT INTO `permission` VALUES (10,'listOrder'); INSERT INTO `role` VALUES (1,'admin'); INSERT INTO `role` VALUES (2,'productManager'); INSERT INTO `role` VALUES (3,'orderManager'); INSERT INTO `role_permission` VALUES (1,1); INSERT INTO `role_permission` VALUES (1,2); INSERT INTO `role_permission` VALUES (1,3); INSERT INTO `role_permission` VALUES (1,4); INSERT INTO `role_permission` VALUES (1,5); INSERT INTO `role_permission` VALUES (1,6); INSERT INTO `role_permission` VALUES (1,7); INSERT INTO `role_permission` VALUES (1,8); INSERT INTO `role_permission` VALUES (1,9); INSERT INTO `role_permission` VALUES (1,10); INSERT INTO `role_permission` VALUES (2,1); INSERT INTO `role_permission` VALUES (2,2); INSERT INTO `role_permission` VALUES (2,3); INSERT INTO `role_permission` VALUES (2,4); INSERT INTO `role_permission` VALUES (2,5); INSERT INTO `role_permission` VALUES (3,6); INSERT INTO `role_permission` VALUES (3,7); INSERT INTO `role_permission` VALUES (3,8); INSERT INTO `role_permission` VALUES (3,9); INSERT INTO `role_permission` VALUES (3,10); INSERT INTO `user` VALUES (1,'zhang3','12345'); INSERT INTO `user` VALUES (2,'li4','abcde'); INSERT INTO `user_role` VALUES (1,1); INSERT INTO `user_role` VALUES (2,2);

在原有的User類(lèi)上加一個(gè)id字段,方便數(shù)據(jù)庫(kù)操作.

設(shè)置一個(gè)Dao層:

package com.how2java;import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.HashSet; import java.util.Set;public class DAO {public DAO() {try {Class.forName("com.mysql.jdbc.Driver");} catch (ClassNotFoundException e) {e.printStackTrace();}}public Connection getConnection() throws SQLException {return DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/shiro?characterEncoding=UTF-8", "root","yoursqlpassword");}public String getPassword(String userName) {String sql = "select password from user where name = ?";try (Connection c = getConnection(); PreparedStatement ps = c.prepareStatement(sql);) {ps.setString(1, userName);ResultSet rs = ps.executeQuery();if (rs.next())return rs.getString("password");} catch (SQLException e) {e.printStackTrace();}return null;}public Set<String> listRoles(String userName) {Set<String> roles = new HashSet<>();String sql = "select r.name from user u "+ "left join user_role ur on u.id = ur.uid "+ "left join Role r on r.id = ur.rid "+ "where u.name = ?";try (Connection c = getConnection(); PreparedStatement ps = c.prepareStatement(sql);) {ps.setString(1, userName);ResultSet rs = ps.executeQuery();while (rs.next()) {roles.add(rs.getString(1));}} catch (SQLException e) {e.printStackTrace();}return roles;}public Set<String> listPermissions(String userName) {Set<String> permissions = new HashSet<>();String sql = "select p.name from user u "+"left join user_role ru on u.id = ru.uid "+"left join role r on r.id = ru.rid "+"left join role_permission rp on r.id = rp.rid "+"left join permission p on p.id = rp.pid "+"where u.name =?";try (Connection c = getConnection(); PreparedStatement ps = c.prepareStatement(sql);) {ps.setString(1, userName);ResultSet rs = ps.executeQuery();while (rs.next()) {permissions.add(rs.getString(1));}} catch (SQLException e) {e.printStackTrace();}return permissions;}public static void main(String[] args) {System.out.println(new DAO().listRoles("zhang3"));System.out.println(new DAO().listRoles("li4"));System.out.println(new DAO().listPermissions("zhang3"));System.out.println(new DAO().listPermissions("li4"));} }

Dao的主方法測(cè)試:

[admin] [productManager] [editOrder, addProduct, updateProduct, listProduct, listOrder, addOrder, updateOrder, deleteOrder, deleteProduct, editProduct] [addProduct, updateProduct, listProduct, deleteProduct, editProduct]

可以看到zhang3的Roles為admin,li4的為productManager,zhang3的權(quán)限為editOrder.../ li4的權(quán)限為addProduct......

其中搜索用戶(hù)角色時(shí)進(jìn)行3表聯(lián)查:

String sql = "select r.name from user u "+ "left join user_role ur on u.id = ur.uid "+ "left join Role r on r.id = ur.rid "+ "where u.name = ?";

這里都使用了左連接,曾經(jīng)有個(gè)面試官問(wèn)我inner join和outer join的區(qū)別我沒(méi)答上來(lái). 這里有篇博客整理得不錯(cuò). 注意是outer join

下面查到的編輯訂單,添加商品,更新商品等一系列操作權(quán)限集合通過(guò)5表聯(lián)查查詢(xún):

String sql = "select p.name from user u "+"left join user_role ru on u.id = ru.uid "+"left join role r on r.id = ru.rid "+"left join role_permission rp on r.id = rp.rid "+"left join permission p on p.id = rp.pid "+"where u.name =?";

其實(shí)這里如果牽扯到表過(guò)多,要做個(gè)小樣測(cè)試,進(jìn)行記錄:

上圖使用了戰(zhàn)德臣老師的關(guān)系代表達(dá)式.如果多個(gè)表關(guān)系復(fù)雜時(shí)可以通過(guò)代數(shù)式清晰地展示出來(lái).

[Realm概念] : 在Shiro中存在Realm這個(gè)概念,Realm這個(gè)單詞翻譯為 域, 其實(shí)是非常難以理解的.

域 是什么? 和權(quán)限有什么關(guān)系? 這個(gè)單詞挺讓人費(fèi)解.

Realm 在 Shiro 里到底扮演什么角色呢?

當(dāng)應(yīng)用程序向Shiro提供了賬號(hào)和密碼之后,Shiro就會(huì)問(wèn)Realm這個(gè)賬號(hào)密碼是否對(duì), 如果對(duì)的話,其所對(duì)應(yīng)的用戶(hù)擁有哪些角色,哪些權(quán)限.

所以Realm是什么? 其實(shí)就是個(gè)中介, Realm得到了Shiro給的用戶(hù)和密碼后, 有可能去找ini文件,就像之前的shiro.ini,也可以去找數(shù)據(jù)庫(kù),

就如同上面Dao查詢(xún)信息.

Realm就是干這個(gè)用的,它才是真正進(jìn)行用戶(hù)認(rèn)證和授權(quán)的關(guān)鍵地方.

再看另一個(gè)類(lèi):

DatabaseRealm 它就是用來(lái)通過(guò)數(shù)據(jù)庫(kù)驗(yàn)證用戶(hù),和相關(guān)授權(quán)的類(lèi).

兩個(gè)方法分別做驗(yàn)證和授權(quán):

doGetAuthenticationInfo(), doGetAuthorizationInfo()

package com.how2java;import java.util.Set;import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.AuthenticationInfo; import org.apache.shiro.authc.AuthenticationToken; import org.apache.shiro.authc.SimpleAuthenticationInfo; import org.apache.shiro.authc.UsernamePasswordToken; import org.apache.shiro.authz.AuthorizationInfo; import org.apache.shiro.authz.SimpleAuthorizationInfo; import org.apache.shiro.realm.AuthorizingRealm; import org.apache.shiro.subject.PrincipalCollection;public class DatabaseRealm extends AuthorizingRealm {@Overrideprotected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {//能進(jìn)入到這里,表示賬號(hào)已經(jīng)通過(guò)驗(yàn)證了String userName =(String) principalCollection.getPrimaryPrincipal();//通過(guò)DAO獲取角色和權(quán)限Set<String> permissions = new DAO().listPermissions(userName);Set<String> roles = new DAO().listRoles(userName);//授權(quán)對(duì)象SimpleAuthorizationInfo s = new SimpleAuthorizationInfo();//把通過(guò)DAO獲取到的角色和權(quán)限放進(jìn)去 s.setStringPermissions(permissions);s.setRoles(roles);return s;}@Overrideprotected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {//獲取賬號(hào)密碼UsernamePasswordToken t = (UsernamePasswordToken) token;String userName= token.getPrincipal().toString();String password= new String( t.getPassword());//獲取數(shù)據(jù)庫(kù)中的密碼String passwordInDB = new DAO().getPassword(userName);//如果為空就是賬號(hào)不存在,如果不相同就是密碼錯(cuò)誤,但是都拋出AuthenticationException,而不是拋出具體錯(cuò)誤原因,免得給破解者提供幫助信息if(null==passwordInDB || !passwordInDB.equals(password)) throw new AuthenticationException();//認(rèn)證信息里存放賬號(hào)密碼, getName() 是當(dāng)前Realm的繼承方法,通常返回當(dāng)前類(lèi)名 :databaseRealmSimpleAuthenticationInfo a = new SimpleAuthenticationInfo(userName,password,getName());return a;}}

注: DatabaseRealm這個(gè)類(lèi),用戶(hù)提供,但是不由用戶(hù)自己調(diào)用, 而是由Shiro去調(diào)用,就像Servlet的doPost方法,是被Tomcat調(diào)用一樣.

那么Shiro怎么找到這個(gè)Realm呢? 那么需要修改shiro.ini

[main] databaseRealm=com.how2java.DatabaseRealm securityManager.realms=$databaseRealm

[JdbcRealm]?

Shiro提供了一個(gè)JdbcRealm, 它會(huì)默認(rèn)去尋找 users, roles, permissions 三張表做類(lèi)似于 Dao 中的查詢(xún).

但是這里沒(méi)有使用,因?yàn)閷?shí)際工作通常都會(huì)有更復(fù)雜的權(quán)限需要,以上3個(gè)表不夠用. JdbcRealm又封裝得太嚴(yán)實(shí)了.

[md5加密]

在之前,用戶(hù)密碼都是明文的,這樣有巨大的風(fēng)險(xiǎn),一旦泄露,就不好了.

所以,通常都會(huì)采用非對(duì)稱(chēng)加密,什么是非對(duì)稱(chēng)呢?就是不可逆的,而md5就是這樣的一個(gè)算法(在之前接觸到的微信平臺(tái)開(kāi)發(fā)與支付中同樣也會(huì)用到)

如TestEncryption

package com.how2java;import org.apache.shiro.crypto.hash.Md5Hash;public class TestEncryption {public static void main(String[] args) {String password = "123";String encodedPassword = new Md5Hash(password).toString();System.out.println(encodedPassword);} }

123字符串通過(guò)md5加密后得到字符串202CB962AC59075B964B07152D234B70

這個(gè)字符串,卻無(wú)法通過(guò)計(jì)算,反過(guò)來(lái)得到源密碼 123

這個(gè)加密后的字符串就存在數(shù)據(jù)庫(kù)里了, 下次用戶(hù)再登錄,輸入密碼123, 同樣用md5加密后, 再和這個(gè)字符串一比較, 就知道密碼是否正確了.

如此這樣,既能保證用戶(hù)密碼校驗(yàn)的功能, 又能保證不暴露密碼.

但是md5加密又有一些缺陷:

1.如果A的密碼是123, B的也是123, 那么md5的值是一樣的, 那么通過(guò)比較加密后的字符串, 我就可以反推過(guò)來(lái), 原來(lái)你的密碼也是123.

2.與上述相同,雖然md5不可逆,但是可以進(jìn)行窮舉法暴力破解. 為了解決這個(gè)問(wèn)題,引入了鹽的概念, 鹽是什么呢? 比如炒菜,直接使用md5,

就是對(duì)食材(源密碼)進(jìn)行炒菜,因?yàn)槭巢氖且粯拥?所以炒出來(lái)的味道都一樣,可是如果加了不同分量的鹽,那么即便食材一樣,炒出來(lái)的味道就

不一樣了.

所以,雖然每次123md5之后的密文都是202CB962AC59075B964B07152D234B70, 但是我加上鹽,即123+隨機(jī)數(shù),那么md5的值就不一樣了~

這個(gè)隨機(jī)數(shù),就是鹽,而這個(gè)隨機(jī)數(shù)也會(huì)在數(shù)據(jù)庫(kù)里保存下來(lái),每個(gè)不同的用戶(hù),隨機(jī)數(shù)也是不一樣的.

再就是加密次數(shù),加密一次是202CB962AC59075B964B07152D234B70,我也可以加密兩次,就是另一個(gè)數(shù)了,而黑客即便是拿到了加密后的密碼,

如果不知道到底加密了多少次,也是很難辦的.

package com.how2java;import org.apache.shiro.crypto.SecureRandomNumberGenerator; import org.apache.shiro.crypto.hash.SimpleHash;public class TestEncryption {public static void main(String[] args) {String password = "123";String salt = new SecureRandomNumberGenerator().nextBytes().toString();int times = 2;String algorithmName = "md5";String encodedPassword = new SimpleHash(algorithmName,password,salt,times).toString();System.out.printf("原始密碼是 %s , 鹽是: %s, 運(yùn)算次數(shù)是: %d, 運(yùn)算出來(lái)的密文是:%s ",password,salt,times,encodedPassword);} }

運(yùn)行這些代碼:得到輸出:

原始密碼是 123 , 鹽是: Qf7STdEccXZtFkAujUDwSA==, 運(yùn)算次數(shù)是: 2, 運(yùn)算出來(lái)的密文是:e020da0e276e9f4f30f520fb3a225935 原始密碼是 123 , 鹽是: OlYiWbzKmyccksMQLMOcPg==, 運(yùn)算次數(shù)是: 2, 運(yùn)算出來(lái)的密文是:236d91c0a2e9d2ecb77e60f0d4050fef 原始密碼是 123 , 鹽是: 75MZpCeMIgf0F/v+RnCsSA==, 運(yùn)算次數(shù)是: 2, 運(yùn)算出來(lái)的密文是:46d77dc05d2fa0e48035ceed4333079f

像上面得到了鹽的加密(作者比喻比較形象),這樣的字符串基本很難推算出來(lái),從而加大了破譯密碼的難度.

而使用的生成隨機(jī)鹽的方法也是Shiro自帶的工具類(lèi).new SecureRandomNumberGenerator().nextBytes().toString();

[數(shù)據(jù)庫(kù)調(diào)整] : 有了以上基礎(chǔ),那么就可以開(kāi)始在原來(lái)的教程里加入對(duì)加密的支持了. 在開(kāi)始之前, 要修改一下user表,

加上鹽字段: salt. 因?yàn)辂}是隨機(jī)數(shù),得保留下來(lái), 如果不知道鹽是多少, 我們也就沒(méi)法判斷密碼是否正確了.

?

alert table user add (salt varchar(100));

?

package com.how2java;import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.UsernamePasswordToken; import org.apache.shiro.config.IniSecurityManagerFactory; import org.apache.shiro.mgt.SecurityManager; import org.apache.shiro.subject.Subject; import org.apache.shiro.util.Factory;public class TestShiro {public static void main(String[] args) {//這里要釋放注釋,先注冊(cè)一個(gè)用戶(hù)new DAO().createUser("tom", "123");User user = new User();user.setName("tom");user.setPassword("123");if(login(user)) System.out.println("登錄成功");elseSystem.out.println("登錄失敗");}private static boolean hasRole(User user, String role) {Subject subject = getSubject(user);return subject.hasRole(role);}private static boolean isPermitted(User user, String permit) {Subject subject = getSubject(user);return subject.isPermitted(permit);}private static Subject getSubject(User user) {//加載配置文件,并獲取工廠Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");//獲取安全管理者實(shí)例SecurityManager sm = factory.getInstance();//將安全管理者放入全局對(duì)象 SecurityUtils.setSecurityManager(sm);//全局對(duì)象通過(guò)安全管理者生成Subject對(duì)象Subject subject = SecurityUtils.getSubject();return subject;}private static boolean login(User user) {Subject subject= getSubject(user);//如果已經(jīng)登錄過(guò)了,退出if(subject.isAuthenticated())subject.logout();//封裝用戶(hù)的數(shù)據(jù)UsernamePasswordToken token = new UsernamePasswordToken(user.getName(), user.getPassword());try {//將用戶(hù)的數(shù)據(jù)token 最終傳遞到Realm中進(jìn)行對(duì)比 subject.login(token);} catch (AuthenticationException e) {//驗(yàn)證錯(cuò)誤return false;} return subject.isAuthenticated();}}

通過(guò)上述代碼,先注冊(cè)了一個(gè)用戶(hù),然后進(jìn)行登錄驗(yàn)證

在Dao中,增加了兩個(gè)方法 createUser, getUser

package com.how2java;import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.HashSet; import java.util.Set;import org.apache.shiro.crypto.SecureRandomNumberGenerator; import org.apache.shiro.crypto.hash.SimpleHash;public class DAO {public DAO() {try {Class.forName("com.mysql.jdbc.Driver");} catch (ClassNotFoundException e) {e.printStackTrace();}}public Connection getConnection() throws SQLException {return DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/shiro?characterEncoding=UTF-8", "root","yourpassword");}public String createUser(String name, String password) {String sql = "insert into user values(null,?,?,?)";String salt = new SecureRandomNumberGenerator().nextBytes().toString(); //鹽量隨機(jī)String encodedPassword= new SimpleHash("md5",password,salt,2).toString();try (Connection c = getConnection(); PreparedStatement ps = c.prepareStatement(sql);) {ps.setString(1, name);ps.setString(2, encodedPassword);ps.setString(3, salt);ps.execute();} catch (SQLException e) {e.printStackTrace();}return null; }public String getPassword(String userName) {String sql = "select password from user where name = ?";try (Connection c = getConnection(); PreparedStatement ps = c.prepareStatement(sql);) {ps.setString(1, userName);ResultSet rs = ps.executeQuery();if (rs.next())return rs.getString("password");} catch (SQLException e) {e.printStackTrace();}return null;}public User getUser(String userName) {User user = null;String sql = "select * from user where name = ?";try (Connection c = getConnection(); PreparedStatement ps = c.prepareStatement(sql);) {ps.setString(1, userName);ResultSet rs = ps.executeQuery();if (rs.next()) {user = new User();user.setId(rs.getInt("id"));user.setName(rs.getString("name"));user.setPassword(rs.getString("password"));user.setSalt(rs.getString("salt"));}} catch (SQLException e) {e.printStackTrace();}return user;}public Set<String> listRoles(String userName) {Set<String> roles = new HashSet<>();String sql = "select r.name from user u "+ "left join user_role ur on u.id = ur.uid "+ "left join Role r on r.id = ur.rid "+ "where u.name = ?";try (Connection c = getConnection(); PreparedStatement ps = c.prepareStatement(sql);) {ps.setString(1, userName);ResultSet rs = ps.executeQuery();while (rs.next()) {roles.add(rs.getString(1));}} catch (SQLException e) {e.printStackTrace();}return roles;}public Set<String> listPermissions(String userName) {Set<String> permissions = new HashSet<>();String sql = "select p.name from user u "+"left join user_role ru on u.id = ru.uid "+"left join role r on r.id = ru.rid "+"left join role_permission rp on r.id = rp.rid "+"left join permission p on p.id = rp.pid "+"where u.name =?";try (Connection c = getConnection(); PreparedStatement ps = c.prepareStatement(sql);) {ps.setString(1, userName);ResultSet rs = ps.executeQuery();while (rs.next()) {permissions.add(rs.getString(1));}} catch (SQLException e) {e.printStackTrace();}return permissions;} }

繼而修改DatabaseRealm,把用戶(hù)通過(guò)UsernamePasswordToken傳進(jìn)來(lái)的密碼,以及數(shù)據(jù)庫(kù)里取出來(lái)的salt進(jìn)行加密,加密之后再與數(shù)據(jù)庫(kù)里的

密文進(jìn)行比較,判斷用戶(hù)是否能夠通過(guò)驗(yàn)證.

package com.how2java;import java.util.Set;import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.AuthenticationInfo; import org.apache.shiro.authc.AuthenticationToken; import org.apache.shiro.authc.SimpleAuthenticationInfo; import org.apache.shiro.authc.UsernamePasswordToken; import org.apache.shiro.authz.AuthorizationInfo; import org.apache.shiro.authz.SimpleAuthorizationInfo; import org.apache.shiro.crypto.hash.SimpleHash; import org.apache.shiro.realm.AuthorizingRealm; import org.apache.shiro.subject.PrincipalCollection; import org.apache.shiro.util.ByteSource;public class DatabaseRealm extends AuthorizingRealm {@Overrideprotected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {//能進(jìn)入到這里,表示賬號(hào)已經(jīng)通過(guò)驗(yàn)證了String userName =(String) principalCollection.getPrimaryPrincipal();//通過(guò)DAO獲取角色和權(quán)限Set<String> permissions = new DAO().listPermissions(userName);Set<String> roles = new DAO().listRoles(userName);//授權(quán)對(duì)象SimpleAuthorizationInfo s = new SimpleAuthorizationInfo();//把通過(guò)DAO獲取到的角色和權(quán)限放進(jìn)去 s.setStringPermissions(permissions);s.setRoles(roles);return s;}@Overrideprotected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {//獲取賬號(hào)密碼UsernamePasswordToken t = (UsernamePasswordToken) token;String userName= token.getPrincipal().toString();String password =new String(t.getPassword());//獲取數(shù)據(jù)庫(kù)中的密碼 User user = new DAO().getUser(userName);String passwordInDB = user.getPassword();String salt = user.getSalt();String passwordEncoded = new SimpleHash("md5",password,salt,2).toString();if(null==user || !passwordEncoded.equals(passwordInDB))throw new AuthenticationException();//認(rèn)證信息里存放賬號(hào)密碼, getName() 是當(dāng)前Realm的繼承方法,通常返回當(dāng)前類(lèi)名 :databaseRealmSimpleAuthenticationInfo a = new SimpleAuthenticationInfo(userName,password,getName());return a;}}

通過(guò)剛才的增加新用戶(hù):

可以看到tom的密碼加密了,它的鹽在后面

另一個(gè)做法的DatabaseRealm中只是提供了密文和鹽,具體操作:

修改shiro.ini :

為DatabaseRealm指定credentialsMatcher, 其中就指定了算法是md5, 次數(shù)為2, storedCredentialsHexEncoded這個(gè)表示計(jì)算之后以密文為16進(jìn)制.

這樣Shiro就拿著在subject.log()時(shí)傳入的UsernamePasswordToken中的源密碼,數(shù)據(jù)庫(kù)里的密文和鹽,以及配置文件里指定的算法參數(shù),

自己去進(jìn)行相關(guān)匹配了.

以下是shiro.ini

[main] credentialsMatcher=org.apache.shiro.authc.credential.HashedCredentialsMatcher credentialsMatcher.hashAlgorithmName=md5 credentialsMatcher.hashIterations=2 credentialsMatcher.storedCredentialsHexEncoded=truedatabaseRealm=com.how2java.DatabaseRealm databaseRealm.credentialsMatcher=$credentialsMatcher securityManager.realms=$databaseRealm

好了,除了能看到md5加密和隨機(jī)鹽,shiro.ini馬上就不會(huì)用到了,所以上面的也不用太在意,可以查看下storedCredentialsHexEncoded,不過(guò)接下來(lái)接入jsp頁(yè)面查看下shiro的再實(shí)際點(diǎn)的作用.

既然是Web項(xiàng)目,那還是配置下web.xml :

<web-app><listener><listener-class>org.apache.shiro.web.env.EnvironmentLoaderListener</listener-class></listener><context-param><param-name>shiroEnvironmentClass</param-name><param-value>org.apache.shiro.web.env.IniWebEnvironment</param-value><!-- 默認(rèn)先從/WEB-INF/shiro.ini,如果沒(méi)有找classpath:shiro.ini --></context-param><context-param><param-name>shiroConfigLocations</param-name><param-value>classpath:shiro.ini</param-value></context-param><filter><filter-name>shiroFilter</filter-name><filter-class>org.apache.shiro.web.servlet.ShiroFilter</filter-class></filter><filter-mapping><filter-name>shiroFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping> </web-app>

這里有個(gè)Filter的DEMO,Filter說(shuō)白了就是當(dāng)調(diào)用一個(gè)url時(shí)之前要有一道關(guān)口,這個(gè)關(guān)口就是Filter.

其它的如User,DAO,DatabaseRealm都和之前的沒(méi)啥區(qū)別.

這里有一個(gè)Servlet

package com.how2java;import java.io.IOException;import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.UsernamePasswordToken; import org.apache.shiro.session.Session; import org.apache.shiro.subject.Subject;@WebServlet(name = "loginServlet", urlPatterns = "/login") public class LoginServlet extends HttpServlet { protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String name = req.getParameter("name"); String password = req.getParameter("password"); Subject subject = SecurityUtils.getSubject(); UsernamePasswordToken token = new UsernamePasswordToken(name, password); try { subject.login(token);Session session=subject.getSession();session.setAttribute("subject", subject);resp.sendRedirect("");} catch (AuthenticationException e) { req.setAttribute("error", "驗(yàn)證失敗"); req.getRequestDispatcher("login.jsp").forward(req, resp); } } }

LoginServlet映射路徑/login的訪問(wèn).

獲取賬號(hào)和密碼,然后組成UsernamePasswordToken對(duì)象,扔給Shiro進(jìn)行判斷, 如果判斷不報(bào)錯(cuò), 即表示成功, 客戶(hù)端跳轉(zhuǎn)到根目錄,

否則返回login.jsp,并帶上錯(cuò)誤信息

登錄成功之后還會(huì)把subject放在shiro的session對(duì)象里, shiro的這個(gè)session和httpsession是串通好了的, 所以在這里放了, 它會(huì)自動(dòng)放在

httpsession里,它們之間是同步的. 可以看到這里登錄成功后,將用戶(hù)名和密碼通過(guò)Shiro的UsernamePasswordToken包裝為一個(gè)token對(duì)象

之后通過(guò)login方法進(jìn)行用戶(hù)登錄,如果沒(méi)有異常則表示用戶(hù)名密碼正確, resp響應(yīng)到了"",(并不是index.jsp,或mian.jsp不知道為什么)

下面是shiro.ini,之后到springboot應(yīng)該不用配置了

[main] #使用數(shù)據(jù)庫(kù)進(jìn)行驗(yàn)證和授權(quán) databaseRealm=com.how2java.DatabaseRealm securityManager.realms=$databaseRealm#當(dāng)訪問(wèn)需要驗(yàn)證的頁(yè)面,但是又沒(méi)有驗(yàn)證的情況下,跳轉(zhuǎn)到login.jsp authc.loginUrl=/login.jsp #當(dāng)訪問(wèn)需要角色的頁(yè)面,但是又不擁有這個(gè)角色的情況下,跳轉(zhuǎn)到noroles.jsp roles.unauthorizedUrl=/noRoles.jsp #當(dāng)訪問(wèn)需要權(quán)限的頁(yè)面,但是又不擁有這個(gè)權(quán)限的情況下,跳轉(zhuǎn)到noperms.jsp perms.unauthorizedUrl=/noPerms.jsp#users,roles和perms都通過(guò)前面知識(shí)點(diǎn)的數(shù)據(jù)庫(kù)配置了 [users] #urls用來(lái)指定哪些資源需要什么對(duì)應(yīng)的授權(quán)才能使用 [urls] #doLogout地址就會(huì)進(jìn)行退出行為 /doLogout=logout #login.jsp,noroles.jsp,noperms.jsp 可以匿名訪問(wèn) /login.jsp=anon /noroles.jsp=anon /noperms.jsp=anon#查詢(xún)所有產(chǎn)品,需要登錄后才可以查看 /listProduct.jsp=authc #增加商品不僅需要登錄,而且要擁有 productManager 權(quán)限才可以操作 /deleteProduct.jsp=authc,roles[productManager] #刪除商品,不僅需要登錄,而且要擁有 deleteProduct 權(quán)限才可以操作 /deleteOrder.jsp=authc,perms["deleteOrder"]

?

下面是index.jsp, 通過(guò)${subject.principal}來(lái)判斷用戶(hù)是否登錄,if(登錄了){ 顯示退出選項(xiàng) } else { 顯示登錄按鈕 } (與大多數(shù)的網(wǎng)站登錄一致)

index里提供了3個(gè)超鏈接,分別要登錄后才可以查看,有角色,有權(quán)限才能看,便于進(jìn)行測(cè)試.

注: subject是在LoginServlet里放進(jìn)session的

index.jsp使用了JSTL表達(dá)式,(說(shuō)真的JSTL,EL表達(dá)式遠(yuǎn)不及用ThymeLeaf前端模板來(lái)得好,JSTL,EL如果不在tomcat啟動(dòng)就訪問(wèn)不了了,而ThymeLeaf不同)

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><link rel="stylesheet" type="text/css" href="static/css/style.css" /></head> <body><div class="workingroom"><div class="loginDiv"><c:if test="${empty subject.principal}"><a href="login.jsp">登錄</a><br></c:if><c:if test="${!empty subject.principal}"><span class="desc">你好,${subject.principal},</span><a href="doLogout">退出</a><br> </c:if><a href="listProduct.jsp">查看產(chǎn)品</a><span class="desc">(登錄后才可以查看) </span><br><a href="deleteProduct.jsp">刪除產(chǎn)品</a><span class="desc">(要有產(chǎn)品管理員角色, zhang3沒(méi)有,li4 有) </span><br><a href="deleteOrder.jsp">刪除訂單</a><span class="desc">(要有刪除訂單權(quán)限, zhang3有,li4沒(méi)有) </span><br> </div></body> </html>

?

登錄 login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8" import="java.util.*"%><!DOCTYPE html><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <link rel="stylesheet" type="text/css" href="static/css/style.css" /><div class="workingroom"><div class="errorInfo">${error}</div><form action="login" method="post">賬號(hào): <input type="text" name="name"> <br>密碼: <input type="password" name="password"> <br><br><input type="submit" value="登錄"><br><br><div><span class="desc">賬號(hào):zhang3 密碼:12345 角色:admin</span><br><span class="desc">賬號(hào):li4 密碼:abcde 角色:productManager</span><br></div></form> </div>

大體運(yùn)行后是這樣一個(gè)干枯枯燥的頁(yè)面

在demo中,當(dāng)用戶(hù)zhang3登錄后如果查看刪除產(chǎn)品的鏈接,就會(huì)提示錯(cuò)誤,路徑轉(zhuǎn)到了http://localhost:8184/shiro/noRoles.jsp

而進(jìn)入刪除訂單,則沒(méi)有問(wèn)題,因?yàn)閦hang3用戶(hù)有該權(quán)限.

?{經(jīng)歷了一夜的休息,繼續(xù)跟shiro戰(zhàn)斗,將博客下方加上>>筆耕不輟<<,希望今年是個(gè)豐收年}

在登錄了li4這個(gè)角色后,可以看到刪除產(chǎn)品的可以進(jìn)入,而刪除訂單的權(quán)限不足.

也就是說(shuō)Shiro提供的這些Subject,SecurityManager,Authenticator(身份認(rèn)證),Authorizer(授權(quán)認(rèn)證),Realm,,,sessionManager等都是為了做這個(gè)工作,

即讓有權(quán)限的,有角色的才可能進(jìn)入規(guī)定的地方. (其實(shí)就像現(xiàn)在編程這個(gè)行業(yè),許多都是培訓(xùn)班出來(lái)的,半路出家,而很多公司都是卡學(xué)歷的,如果你學(xué)歷不夠,那么就說(shuō)明你沒(méi)有這個(gè)Role,繼而也就沒(méi)有這個(gè)權(quán)限)

listProduct.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8" import="java.util.*"%><!DOCTYPE html><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <link rel="stylesheet" type="text/css" href="static/css/style.css" /><div class="workingroom">listProduct.jsp ,能進(jìn)來(lái),就表示已經(jīng)登錄成功了<br><a href="#" onClick="javascript:history.back()">返回</a> </div>

deleteOrder.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8" import="java.util.*"%><!DOCTYPE html><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <link rel="stylesheet" type="text/css" href="static/css/style.css" /><div class="workingroom">deleteOrder.jsp ,能進(jìn)來(lái),就表示有deleteOrder權(quán)限<br><a href="#" onClick="javascript:history.back()">返回</a> </div>

deleteProduct.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8" import="java.util.*"%><!DOCTYPE html><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <link rel="stylesheet" type="text/css" href="static/css/style.css" /><div class="workingroom">deleteProduct.jsp,能進(jìn)來(lái)<br>就表示擁有 productManager 角色<br><a href="#" onClick="javascript:history.back()">返回</a> </div>

noRoles.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8" import="java.util.*"%><!DOCTYPE html><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <link rel="stylesheet" type="text/css" href="static/css/style.css" /><div class="workingroom">角色不匹配<br><a href="#" onClick="javascript:history.back()">返回</a> </div>

noPerms.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8" import="java.util.*"%><!DOCTYPE html><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <link rel="stylesheet" type="text/css" href="static/css/style.css" /><div class="workingroom">權(quán)限不足<br><a href="#" onClick="javascript:history.back()">返回</a> </div>

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/ukzq/p/10212413.html

總結(jié)

以上是生活随笔為你收集整理的[shiro] - 怎样使用shiro?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

国内精品人妻无码久久久影院蜜桃 | 国产69精品久久久久app下载 | 精品国产一区二区三区av 性色 | 日本va欧美va欧美va精品 | 99久久精品国产一区二区蜜芽 | 国产精品.xx视频.xxtv | 亚洲色大成网站www国产 | 中文字幕无码免费久久9一区9 | 欧美人与动性行为视频 | 一本加勒比波多野结衣 | 日本一区二区三区免费播放 | 国产色精品久久人妻 | 亚洲国产av美女网站 | 国产成人一区二区三区在线观看 | 亚洲天堂2017无码 | 国产凸凹视频一区二区 | 4hu四虎永久在线观看 | 国产疯狂伦交大片 | 帮老师解开蕾丝奶罩吸乳网站 | 亚洲精品成人福利网站 | 亚拍精品一区二区三区探花 | 国产乱人偷精品人妻a片 | 亚洲精品一区国产 | 夜先锋av资源网站 | 成人女人看片免费视频放人 | 国产内射老熟女aaaa | 正在播放东北夫妻内射 | 日韩av无码一区二区三区 | a国产一区二区免费入口 | 欧美老妇交乱视频在线观看 | 久在线观看福利视频 | 国产精品国产自线拍免费软件 | 人人妻人人澡人人爽欧美一区 | 精品无人区无码乱码毛片国产 | 色综合久久网 | 亚洲午夜无码久久 | 日韩视频 中文字幕 视频一区 | 国产成人精品优优av | 精品人人妻人人澡人人爽人人 | 男人的天堂av网站 | 日本xxxx色视频在线观看免费 | 欧美国产亚洲日韩在线二区 | 荫蒂被男人添的好舒服爽免费视频 | 麻豆国产人妻欲求不满 | 亚洲最大成人网站 | 特黄特色大片免费播放器图片 | 亚洲欧洲日本综合aⅴ在线 | 人妻少妇被猛烈进入中文字幕 | 初尝人妻少妇中文字幕 | 男人扒开女人内裤强吻桶进去 | 欧美丰满熟妇xxxx | 久久国语露脸国产精品电影 | 日本一区二区更新不卡 | 日日摸天天摸爽爽狠狠97 | 国产精品美女久久久久av爽李琼 | 久久99精品国产麻豆 | 亚洲中文字幕在线无码一区二区 | 成人精品视频一区二区三区尤物 | 水蜜桃亚洲一二三四在线 | 精品国产精品久久一区免费式 | 国产精品99久久精品爆乳 | 色窝窝无码一区二区三区色欲 | 人妻少妇精品无码专区动漫 | 曰本女人与公拘交酡免费视频 | 免费网站看v片在线18禁无码 | 99re在线播放 | 亚洲精品国产精品乱码不卡 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 欧美人与动性行为视频 | 亚洲人成网站在线播放942 | 77777熟女视频在线观看 а天堂中文在线官网 | 最近免费中文字幕中文高清百度 | 亚洲狠狠婷婷综合久久 | 粉嫩少妇内射浓精videos | 狠狠躁日日躁夜夜躁2020 | 亚洲 日韩 欧美 成人 在线观看 | 国产极品视觉盛宴 | 欧美日韩人成综合在线播放 | 亚洲精品国产第一综合99久久 | 欧洲精品码一区二区三区免费看 | 国产午夜无码视频在线观看 | 日本一区二区三区免费播放 | 日日橹狠狠爱欧美视频 | 日韩亚洲欧美中文高清在线 | 国产后入清纯学生妹 | 中文字幕无码人妻少妇免费 | 撕开奶罩揉吮奶头视频 | 女人被爽到呻吟gif动态图视看 | 永久免费精品精品永久-夜色 | 精品人妻人人做人人爽 | 亚洲s码欧洲m码国产av | 亚洲国产精品成人久久蜜臀 | 亚洲精品无码国产 | 欧美日韩综合一区二区三区 | 东京热无码av男人的天堂 | 激情国产av做激情国产爱 | 男女猛烈xx00免费视频试看 | 毛片内射-百度 | 四虎国产精品一区二区 | 成人三级无码视频在线观看 | 亚洲色在线无码国产精品不卡 | 亚洲一区二区三区国产精华液 | 人妻尝试又大又粗久久 | 又大又黄又粗又爽的免费视频 | 99久久人妻精品免费一区 | 精品国产精品久久一区免费式 | 激情亚洲一区国产精品 | 久久久久久久久蜜桃 | 国产精品香蕉在线观看 | 亚洲中文字幕久久无码 | 野狼第一精品社区 | 久久国产36精品色熟妇 | 人妻少妇被猛烈进入中文字幕 | 激情内射亚州一区二区三区爱妻 | 动漫av一区二区在线观看 | 久久久亚洲欧洲日产国码αv | 宝宝好涨水快流出来免费视频 | 色欲综合久久中文字幕网 | 欧美国产日产一区二区 | 日日天日日夜日日摸 | 久久97精品久久久久久久不卡 | 精品欧美一区二区三区久久久 | 少妇人妻av毛片在线看 | 中文字幕乱码人妻二区三区 | 国产精品高潮呻吟av久久 | 国产午夜无码精品免费看 | 午夜福利一区二区三区在线观看 | 欧美丰满少妇xxxx性 | 人妻少妇精品视频专区 | 免费人成网站视频在线观看 | 天堂亚洲2017在线观看 | 娇妻被黑人粗大高潮白浆 | 人人妻在人人 | 色一情一乱一伦一视频免费看 | 天堂在线观看www | 又大又硬又爽免费视频 | 中文字幕乱码人妻无码久久 | 婷婷五月综合激情中文字幕 | 欧美日韩在线亚洲综合国产人 | 精品欧洲av无码一区二区三区 | 少妇性l交大片欧洲热妇乱xxx | 99久久99久久免费精品蜜桃 | 亚洲欧洲无卡二区视頻 | 狠狠色丁香久久婷婷综合五月 | 亚洲欧美日韩综合久久久 | 成在人线av无码免观看麻豆 | 久久精品国产99精品亚洲 | 日韩av无码中文无码电影 | 99久久久无码国产精品免费 | 亚洲人成影院在线无码按摩店 | 国产乱人伦av在线无码 | 精品国产青草久久久久福利 | 成人av无码一区二区三区 | 一区二区三区高清视频一 | 欧美三级不卡在线观看 | 99er热精品视频 | 久久久久人妻一区精品色欧美 | 欧美日韩人成综合在线播放 | 国产va免费精品观看 | 蜜桃视频韩日免费播放 | 国产农村乱对白刺激视频 | 国产人妻人伦精品1国产丝袜 | 日韩人妻少妇一区二区三区 | 97人妻精品一区二区三区 | 男人和女人高潮免费网站 | 鲁一鲁av2019在线 | 亚洲精品无码国产 | 国产性生大片免费观看性 | 国产97人人超碰caoprom | 久久综合网欧美色妞网 | 午夜熟女插插xx免费视频 | 天天做天天爱天天爽综合网 | 精品人人妻人人澡人人爽人人 | 最新国产乱人伦偷精品免费网站 | 99久久99久久免费精品蜜桃 | 亚洲大尺度无码无码专区 | 欧美精品免费观看二区 | 精品少妇爆乳无码av无码专区 | 18黄暴禁片在线观看 | 日韩人妻无码一区二区三区久久99 | 久久久久免费精品国产 | 99久久99久久免费精品蜜桃 | 久久99热只有频精品8 | 国产精品美女久久久网av | 国产偷自视频区视频 | 四虎国产精品免费久久 | 草草网站影院白丝内射 | 呦交小u女精品视频 | 国产精品无码mv在线观看 | 国产精品成人av在线观看 | 九一九色国产 | 日韩精品乱码av一区二区 | 中文久久乱码一区二区 | 在线播放免费人成毛片乱码 | 蜜臀aⅴ国产精品久久久国产老师 | 国产人妖乱国产精品人妖 | 亚洲精品无码人妻无码 | 少妇人妻av毛片在线看 | 久久精品国产大片免费观看 | 国产性生大片免费观看性 | 乱人伦中文视频在线观看 | 毛片内射-百度 | 久久人人97超碰a片精品 | 白嫩日本少妇做爰 | 日本精品人妻无码免费大全 | 丰满少妇高潮惨叫视频 | 图片区 小说区 区 亚洲五月 | 亚洲成a人片在线观看无码3d | 国产明星裸体无码xxxx视频 | 久久久久久久久蜜桃 | 亚洲热妇无码av在线播放 | 日韩欧美中文字幕在线三区 | 日韩av无码一区二区三区不卡 | 国产成人无码a区在线观看视频app | 国内揄拍国内精品人妻 | 十八禁视频网站在线观看 | 国产精品无套呻吟在线 | 99精品国产综合久久久久五月天 | 在线天堂新版最新版在线8 | 亚洲а∨天堂久久精品2021 | 亚洲色偷偷男人的天堂 | 999久久久国产精品消防器材 | 亚洲一区二区三区香蕉 | 国产欧美熟妇另类久久久 | 亚洲啪av永久无码精品放毛片 | 久久精品国产一区二区三区肥胖 | 成人精品一区二区三区中文字幕 | 综合激情五月综合激情五月激情1 | 久久综合网欧美色妞网 | 麻豆av传媒蜜桃天美传媒 | 131美女爱做视频 | 日日摸夜夜摸狠狠摸婷婷 | 国产无套粉嫩白浆在线 | 窝窝午夜理论片影院 | 欧美性猛交内射兽交老熟妇 | 国产精品亚洲专区无码不卡 | 欧美刺激性大交 | 九九热爱视频精品 | 中文精品久久久久人妻不卡 | 学生妹亚洲一区二区 | 亚洲一区二区观看播放 | 男女猛烈xx00免费视频试看 | 国内少妇偷人精品视频免费 | 大肉大捧一进一出视频出来呀 | 蜜臀aⅴ国产精品久久久国产老师 | 国产后入清纯学生妹 | 色欲久久久天天天综合网精品 | 大乳丰满人妻中文字幕日本 | 伊人色综合久久天天小片 | 99久久精品国产一区二区蜜芽 | 久久综合九色综合欧美狠狠 | 丰满人妻一区二区三区免费视频 | 最近免费中文字幕中文高清百度 | 亚洲中文字幕无码中字 | 又湿又紧又大又爽a视频国产 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 六十路熟妇乱子伦 | 在线 国产 欧美 亚洲 天堂 | 极品尤物被啪到呻吟喷水 | 成在人线av无码免观看麻豆 | 亚洲啪av永久无码精品放毛片 | 国产真实伦对白全集 | 人妻少妇精品久久 | 又大又紧又粉嫩18p少妇 | 日韩少妇白浆无码系列 | 大地资源中文第3页 | 欧美老妇交乱视频在线观看 | 亚洲 激情 小说 另类 欧美 | 国内精品一区二区三区不卡 | 亚洲中文字幕在线观看 | 久久精品国产99精品亚洲 | | 又大又黄又粗又爽的免费视频 | 老子影院午夜伦不卡 | 久久精品中文字幕大胸 | 亚洲中文字幕久久无码 | 午夜免费福利小电影 | 少妇人妻偷人精品无码视频 | 欧洲欧美人成视频在线 | 色婷婷av一区二区三区之红樱桃 | 老太婆性杂交欧美肥老太 | 欧美三级不卡在线观看 | 国产无套粉嫩白浆在线 | 日本免费一区二区三区最新 | 欧美亚洲国产一区二区三区 | 东京无码熟妇人妻av在线网址 | 18无码粉嫩小泬无套在线观看 | 俺去俺来也在线www色官网 | 国内揄拍国内精品人妻 | 亚洲中文字幕va福利 | 精品欧美一区二区三区久久久 | 免费无码的av片在线观看 | 成人精品视频一区二区 | 亚洲中文字幕久久无码 | 国产精品a成v人在线播放 | 高潮毛片无遮挡高清免费 | 国产莉萝无码av在线播放 | 少妇性l交大片欧洲热妇乱xxx | 亚洲人成网站免费播放 | 欧美xxxx黑人又粗又长 | 疯狂三人交性欧美 | 欧美人与善在线com | 日日天日日夜日日摸 | 亚拍精品一区二区三区探花 | 又粗又大又硬又长又爽 | 性生交大片免费看女人按摩摩 | 少妇性荡欲午夜性开放视频剧场 | 日本一区二区更新不卡 | 国产人妻久久精品二区三区老狼 | 国产综合色产在线精品 | 午夜性刺激在线视频免费 | 欧美人与物videos另类 | 性生交片免费无码看人 | 老司机亚洲精品影院 | 亚洲中文字幕乱码av波多ji | 国内精品久久久久久中文字幕 | 国产国语老龄妇女a片 | 成熟女人特级毛片www免费 | 一本大道久久东京热无码av | 中文字幕+乱码+中文字幕一区 | 亚洲国产精华液网站w | 成年美女黄网站色大免费视频 | 亚洲精品中文字幕久久久久 | 久久人妻内射无码一区三区 | 又紧又大又爽精品一区二区 | 天堂а√在线地址中文在线 | 国产精品久久久久久久9999 | 无码人妻丰满熟妇区毛片18 | av香港经典三级级 在线 | 久久久精品成人免费观看 | 精品午夜福利在线观看 | 亚洲国产精品一区二区第一页 | 国产午夜手机精彩视频 | 草草网站影院白丝内射 | 精品人人妻人人澡人人爽人人 | 日本肉体xxxx裸交 | 国产精品18久久久久久麻辣 | 一个人看的视频www在线 | 精品欧洲av无码一区二区三区 | 久久久久亚洲精品男人的天堂 | 日日天干夜夜狠狠爱 | 红桃av一区二区三区在线无码av | а√资源新版在线天堂 | 久久久亚洲欧洲日产国码αv | 亚洲の无码国产の无码影院 | 日韩欧美群交p片內射中文 | 国产无遮挡吃胸膜奶免费看 | 亚洲日韩一区二区三区 | 沈阳熟女露脸对白视频 | 精品无码一区二区三区的天堂 | 免费人成在线视频无码 | 中文字幕日韩精品一区二区三区 | 无码国内精品人妻少妇 | 久久久国产一区二区三区 | 精品国精品国产自在久国产87 | 久久久久久九九精品久 | 日本一卡二卡不卡视频查询 | 少妇被粗大的猛进出69影院 | 99久久人妻精品免费一区 | 国产美女精品一区二区三区 | 精品午夜福利在线观看 | 亚洲国产精品无码久久久久高潮 | 国产精品人人爽人人做我的可爱 | 亚洲精品一区二区三区在线观看 | 亚洲欧美精品伊人久久 | √8天堂资源地址中文在线 | 鲁鲁鲁爽爽爽在线视频观看 | 最近免费中文字幕中文高清百度 | 99久久久国产精品无码免费 | 精品一区二区三区无码免费视频 | 免费观看的无遮挡av | 日韩视频 中文字幕 视频一区 | 乌克兰少妇性做爰 | 精品国产福利一区二区 | 亚洲成av人综合在线观看 | 亚洲色欲久久久综合网东京热 | 亚洲精品中文字幕乱码 | 色五月五月丁香亚洲综合网 | 免费看少妇作爱视频 | 国精产品一区二区三区 | 国模大胆一区二区三区 | 国精产品一区二区三区 | 一个人看的视频www在线 | 欧美性生交活xxxxxdddd | 图片区 小说区 区 亚洲五月 | 久久99久久99精品中文字幕 | 亚洲春色在线视频 | 中文字幕无码视频专区 | 久久成人a毛片免费观看网站 | 一本久久a久久精品vr综合 | 色欲av亚洲一区无码少妇 | 国产精品理论片在线观看 | 水蜜桃亚洲一二三四在线 | 亚洲精品一区二区三区在线观看 | 乱码av麻豆丝袜熟女系列 | 两性色午夜免费视频 | √天堂中文官网8在线 | 国产成人无码区免费内射一片色欲 | 日本大香伊一区二区三区 | 国产精品18久久久久久麻辣 | 纯爱无遮挡h肉动漫在线播放 | 一本久久伊人热热精品中文字幕 | a片在线免费观看 | 少妇性俱乐部纵欲狂欢电影 | 乱中年女人伦av三区 | 人人妻人人澡人人爽人人精品浪潮 | 国产在线精品一区二区三区直播 | 欧美乱妇无乱码大黄a片 | 久久精品丝袜高跟鞋 | 国产又爽又黄又刺激的视频 | 国产午夜福利亚洲第一 | 亚洲精品中文字幕久久久久 | 国产午夜亚洲精品不卡 | 日韩av无码中文无码电影 | 日韩人妻无码一区二区三区久久99 | 日日夜夜撸啊撸 | 俄罗斯老熟妇色xxxx | 国产精品美女久久久网av | 久久久久99精品成人片 | 久久99热只有频精品8 | 老司机亚洲精品影院无码 | 日本护士毛茸茸高潮 | 亚洲男人av天堂午夜在 | 精品人妻人人做人人爽夜夜爽 | 国语自产偷拍精品视频偷 | 扒开双腿疯狂进出爽爽爽视频 | 亚洲综合精品香蕉久久网 | 日本饥渴人妻欲求不满 | 中文字幕无码日韩专区 | 免费观看的无遮挡av | 丰满少妇弄高潮了www | 九一九色国产 | 欧美兽交xxxx×视频 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 樱花草在线播放免费中文 | 台湾无码一区二区 | 久久人人爽人人爽人人片av高清 | 亚洲国产精品无码一区二区三区 | 亚洲精品一区二区三区在线观看 | 无套内射视频囯产 | 国产精品久久久 | 国产乱码精品一品二品 | 午夜时刻免费入口 | 97夜夜澡人人双人人人喊 | 亚洲一区二区三区香蕉 | 欧美一区二区三区 | 大肉大捧一进一出视频出来呀 | 人人妻人人澡人人爽人人精品 | 国产特级毛片aaaaaa高潮流水 | 国产亲子乱弄免费视频 | 永久免费观看国产裸体美女 | 99re在线播放 | 国产在线精品一区二区三区直播 | 国产午夜精品一区二区三区嫩草 | 亚洲精品久久久久久久久久久 | 日韩欧美成人免费观看 | 色噜噜亚洲男人的天堂 | 日韩人妻系列无码专区 | 日韩精品乱码av一区二区 | 全球成人中文在线 | 性欧美牲交在线视频 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 99久久无码一区人妻 | 精品国产aⅴ无码一区二区 | 欧美阿v高清资源不卡在线播放 | 精品欧美一区二区三区久久久 | 两性色午夜免费视频 | 亚洲另类伦春色综合小说 | 国产疯狂伦交大片 | 国产做国产爱免费视频 | 亚洲国产精品久久久久久 | 青青久在线视频免费观看 | 成人片黄网站色大片免费观看 | 日本熟妇大屁股人妻 | 国产香蕉尹人视频在线 | 亚洲综合精品香蕉久久网 | 国产av剧情md精品麻豆 | 国产凸凹视频一区二区 | 国产亚洲美女精品久久久2020 | 国产午夜福利亚洲第一 | 极品尤物被啪到呻吟喷水 | 性生交片免费无码看人 | 亚洲熟妇色xxxxx欧美老妇 | 免费中文字幕日韩欧美 | 男女下面进入的视频免费午夜 | 又粗又大又硬毛片免费看 | 狠狠色噜噜狠狠狠狠7777米奇 | 牲欲强的熟妇农村老妇女 | 一本无码人妻在中文字幕免费 | 国内揄拍国内精品人妻 | 亚洲男女内射在线播放 | 露脸叫床粗话东北少妇 | 熟妇人妻无乱码中文字幕 | 亲嘴扒胸摸屁股激烈网站 | 性欧美videos高清精品 | 亚洲一区二区三区四区 | 一二三四社区在线中文视频 | 国产农村妇女高潮大叫 | 曰韩少妇内射免费播放 | 国产亚洲日韩欧美另类第八页 | 少妇太爽了在线观看 | 亚洲日本va午夜在线电影 | 在线观看免费人成视频 | 精品无码一区二区三区的天堂 | 国内精品人妻无码久久久影院 | 国产精品无码成人午夜电影 | 国产一区二区三区精品视频 | 亚洲春色在线视频 | 少妇人妻偷人精品无码视频 | 狠狠色丁香久久婷婷综合五月 | 亚洲中文无码av永久不收费 | 国产人妻久久精品二区三区老狼 | 无码人妻丰满熟妇区毛片18 | 久久久无码中文字幕久... | 精品熟女少妇av免费观看 | 成人无码视频免费播放 | 欧美 丝袜 自拍 制服 另类 | 欧美肥老太牲交大战 | 国产精品手机免费 | 国产精品久久精品三级 | 99re在线播放 | 激情内射亚州一区二区三区爱妻 | 国产又爽又猛又粗的视频a片 | 国产色视频一区二区三区 | 青青草原综合久久大伊人精品 | 无码人妻精品一区二区三区不卡 | 中文字幕乱码人妻无码久久 | 久久精品丝袜高跟鞋 | 三上悠亚人妻中文字幕在线 | 亚洲男女内射在线播放 | 亚洲国产一区二区三区在线观看 | 俺去俺来也www色官网 | 国产在线无码精品电影网 | 精品国产国产综合精品 | 2020久久超碰国产精品最新 | 国产av一区二区三区最新精品 | 麻豆成人精品国产免费 | 色一情一乱一伦 | 国产乱人伦偷精品视频 | 午夜精品一区二区三区的区别 | 成熟女人特级毛片www免费 | 男女猛烈xx00免费视频试看 | 沈阳熟女露脸对白视频 | 人妻尝试又大又粗久久 | 国产无套内射久久久国产 | 精品国产一区二区三区四区 | 成人aaa片一区国产精品 | 国产区女主播在线观看 | 少妇邻居内射在线 | аⅴ资源天堂资源库在线 | 美女极度色诱视频国产 | 特大黑人娇小亚洲女 | 亚洲精品成人福利网站 | 国内精品人妻无码久久久影院蜜桃 | 亚洲日韩av一区二区三区四区 | 午夜精品久久久久久久久 | 亚洲精品久久久久avwww潮水 | 蜜臀av在线播放 久久综合激激的五月天 | 网友自拍区视频精品 | 欧美 日韩 亚洲 在线 | 极品尤物被啪到呻吟喷水 | 日韩亚洲欧美精品综合 | 男女作爱免费网站 | 人人爽人人爽人人片av亚洲 | 亚洲人成网站在线播放942 | 18无码粉嫩小泬无套在线观看 | 日本乱偷人妻中文字幕 | 亚洲春色在线视频 | 图片区 小说区 区 亚洲五月 | 久久久av男人的天堂 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 无码人中文字幕 | 无码福利日韩神码福利片 | 久久久久se色偷偷亚洲精品av | 亚洲精品鲁一鲁一区二区三区 | 欧洲vodafone精品性 | 亚洲色大成网站www国产 | 桃花色综合影院 | 国产精品久久国产三级国 | 亚洲小说图区综合在线 | 亚洲精品美女久久久久久久 | 欧美日韩亚洲国产精品 | 国产精品国产自线拍免费软件 | 成熟女人特级毛片www免费 | 亚洲第一无码av无码专区 | 亚洲日本va午夜在线电影 | 亚洲国精产品一二二线 | 国产性生交xxxxx无码 | 少妇厨房愉情理9仑片视频 | av无码不卡在线观看免费 | 亚洲色欲久久久综合网东京热 | 国产av一区二区精品久久凹凸 | 欧美亚洲国产一区二区三区 | 18精品久久久无码午夜福利 | 国产疯狂伦交大片 | 免费看少妇作爱视频 | 久久精品女人天堂av免费观看 | 日本乱人伦片中文三区 | 天堂久久天堂av色综合 | 精品久久久久久亚洲精品 | 久久精品女人的天堂av | 国产97在线 | 亚洲 | 欧美精品一区二区精品久久 | 人妻少妇精品无码专区二区 | 国精产品一品二品国精品69xx | 国产9 9在线 | 中文 | 久久久精品成人免费观看 | 国产xxx69麻豆国语对白 | 午夜精品一区二区三区的区别 | 亚洲欧洲日本综合aⅴ在线 | 亚洲aⅴ无码成人网站国产app | 奇米影视888欧美在线观看 | 中文字幕+乱码+中文字幕一区 | 久久亚洲a片com人成 | 久在线观看福利视频 | 色偷偷人人澡人人爽人人模 | 国产绳艺sm调教室论坛 | 国产精品久久久久无码av色戒 | 大胆欧美熟妇xx | 欧美猛少妇色xxxxx | 欧美日韩亚洲国产精品 | 日韩av无码一区二区三区不卡 | 任你躁在线精品免费 | 免费国产黄网站在线观看 | 久久天天躁夜夜躁狠狠 | 久久精品国产99久久6动漫 | 玩弄人妻少妇500系列视频 | 无码人妻精品一区二区三区下载 | 欧洲熟妇色 欧美 | a片免费视频在线观看 | 国产精品99久久精品爆乳 | 牲欲强的熟妇农村老妇女视频 | 日韩亚洲欧美精品综合 | 亚洲综合色区中文字幕 | 人妻少妇被猛烈进入中文字幕 | 久久国产36精品色熟妇 | 国产美女精品一区二区三区 | 日本一卡二卡不卡视频查询 | 四虎影视成人永久免费观看视频 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 国产内射老熟女aaaa | 亚洲精品一区二区三区在线 | 女人和拘做爰正片视频 | 亚洲综合久久一区二区 | 免费无码肉片在线观看 | 极品嫩模高潮叫床 | 午夜无码区在线观看 | 极品嫩模高潮叫床 | 377p欧洲日本亚洲大胆 | 人人超人人超碰超国产 | 亚洲区欧美区综合区自拍区 | 国产精品人人妻人人爽 | 欧美自拍另类欧美综合图片区 | 免费无码的av片在线观看 | 午夜精品久久久久久久久 | 久久 国产 尿 小便 嘘嘘 | 波多野42部无码喷潮在线 | 国产亚洲精品久久久ai换 | 精品国产精品久久一区免费式 | 久久精品无码一区二区三区 | 青春草在线视频免费观看 | 特大黑人娇小亚洲女 | 波多野结衣一区二区三区av免费 | 国产猛烈高潮尖叫视频免费 | 宝宝好涨水快流出来免费视频 | 黑人巨大精品欧美一区二区 | 乌克兰少妇性做爰 | 欧美野外疯狂做受xxxx高潮 | 狠狠cao日日穞夜夜穞av | 成人动漫在线观看 | 国产人妻人伦精品 | 在线观看国产午夜福利片 | 精品国产一区二区三区av 性色 | 人妻少妇被猛烈进入中文字幕 | 亚洲精品欧美二区三区中文字幕 | 婷婷六月久久综合丁香 | 国产精品美女久久久网av | 亚洲国产成人av在线观看 | 国产精品无码永久免费888 | 2019午夜福利不卡片在线 | 国产精品无码一区二区桃花视频 | 日本精品久久久久中文字幕 | 精品久久久久久亚洲精品 | 久久99精品国产.久久久久 | 少妇性荡欲午夜性开放视频剧场 | 国产熟妇另类久久久久 | 国产电影无码午夜在线播放 | 性做久久久久久久久 | 亚洲成a人片在线观看无码3d | 久久精品丝袜高跟鞋 | 我要看www免费看插插视频 | 成人无码视频免费播放 | www成人国产高清内射 | 荡女精品导航 | 亚洲色欲色欲欲www在线 | 国产尤物精品视频 | 中文字幕日韩精品一区二区三区 | 欧美怡红院免费全部视频 | 双乳奶水饱满少妇呻吟 | 精品少妇爆乳无码av无码专区 | 久久久久久国产精品无码下载 | 无码任你躁久久久久久久 | 国产午夜无码视频在线观看 | 四虎国产精品一区二区 | 一个人看的www免费视频在线观看 | 久久午夜无码鲁丝片 | 成人免费无码大片a毛片 | 男女超爽视频免费播放 | 色婷婷综合激情综在线播放 | 无码一区二区三区在线观看 | 色婷婷av一区二区三区之红樱桃 | 亚洲性无码av中文字幕 | 又大又硬又爽免费视频 | 成人试看120秒体验区 | 午夜精品久久久内射近拍高清 | 午夜无码区在线观看 | 久久久www成人免费毛片 | 亚洲一区二区三区香蕉 | 国产欧美亚洲精品a | 亚洲欧美日韩国产精品一区二区 | 牛和人交xxxx欧美 | 国产精品二区一区二区aⅴ污介绍 | 国产一区二区三区四区五区加勒比 | 人人妻人人澡人人爽人人精品 | 少妇的肉体aa片免费 | 久久精品国产日本波多野结衣 | 我要看www免费看插插视频 | 亚洲成a人片在线观看无码3d | 亚洲a无码综合a国产av中文 | 少女韩国电视剧在线观看完整 | 水蜜桃亚洲一二三四在线 | 精品无码国产自产拍在线观看蜜 | 欧美国产日韩久久mv | 亚洲中文无码av永久不收费 | 亚洲а∨天堂久久精品2021 | 亚洲一区二区三区播放 | 无码国产激情在线观看 | 在线播放亚洲第一字幕 | 久久精品人人做人人综合试看 | 国产乱子伦视频在线播放 | 亚洲精品国偷拍自产在线观看蜜桃 | 国产又爽又猛又粗的视频a片 | 国内综合精品午夜久久资源 | v一区无码内射国产 | 国产综合久久久久鬼色 | 一本久道高清无码视频 | 高潮毛片无遮挡高清免费视频 | 久久久精品456亚洲影院 | 欧美激情一区二区三区成人 | 一本久道高清无码视频 | 一区二区传媒有限公司 | 亚洲啪av永久无码精品放毛片 | 亚洲人成影院在线观看 | 久久亚洲中文字幕精品一区 | 国产无遮挡又黄又爽免费视频 | 亚洲中文字幕av在天堂 | 国产午夜视频在线观看 | 无码一区二区三区在线观看 | 久久久久99精品成人片 | 国产精品a成v人在线播放 | 精品无码一区二区三区的天堂 | 亚洲精品一区二区三区婷婷月 | a在线观看免费网站大全 | 国产成人无码a区在线观看视频app | 人人妻人人澡人人爽人人精品 | 欧美35页视频在线观看 | 国内老熟妇对白xxxxhd | 国产乱人伦偷精品视频 | 天下第一社区视频www日本 | 国产成人久久精品流白浆 | 午夜丰满少妇性开放视频 | 一本大道伊人av久久综合 | 夫妻免费无码v看片 | 免费国产成人高清在线观看网站 | 久久久中文字幕日本无吗 | 理论片87福利理论电影 | 理论片87福利理论电影 | 亚洲自偷精品视频自拍 | 一本无码人妻在中文字幕免费 | 亚洲精品无码人妻无码 | 女人被男人爽到呻吟的视频 | 丁香花在线影院观看在线播放 | 未满小14洗澡无码视频网站 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 亚洲国产av美女网站 | 狂野欧美性猛交免费视频 | 国语自产偷拍精品视频偷 | 青春草在线视频免费观看 | 日韩欧美中文字幕在线三区 | 成年美女黄网站色大免费全看 | 亚洲日本在线电影 | √8天堂资源地址中文在线 | 少妇性俱乐部纵欲狂欢电影 | 国产精品沙发午睡系列 | 亚洲一区二区三区偷拍女厕 | 久久国内精品自在自线 | 日韩无码专区 | 性色欲网站人妻丰满中文久久不卡 | 中文字幕 亚洲精品 第1页 | 国产亚av手机在线观看 | 国产电影无码午夜在线播放 | 亚洲gv猛男gv无码男同 | 亚洲人成影院在线观看 | 国产卡一卡二卡三 | 国内精品九九久久久精品 | 欧洲熟妇精品视频 | 鲁鲁鲁爽爽爽在线视频观看 | 亚洲国产精品成人久久蜜臀 | 国产精品亚洲一区二区三区喷水 | 精品一区二区不卡无码av | 久久天天躁夜夜躁狠狠 | 伊人久久大香线焦av综合影院 | 特级做a爰片毛片免费69 | 中文字幕乱码人妻无码久久 | 国产激情精品一区二区三区 | 人人妻人人澡人人爽人人精品 | 国产在热线精品视频 | 久久亚洲中文字幕精品一区 | www国产亚洲精品久久网站 | 久久99精品久久久久久 | 又粗又大又硬毛片免费看 | 大屁股大乳丰满人妻 | 国产熟女一区二区三区四区五区 | 久久97精品久久久久久久不卡 | 国产人妖乱国产精品人妖 | 亚洲日韩精品欧美一区二区 | 久久综合九色综合欧美狠狠 | 久久人妻内射无码一区三区 | 老熟妇乱子伦牲交视频 | av无码不卡在线观看免费 | 激情亚洲一区国产精品 | 亚洲一区二区三区在线观看网站 | 免费国产成人高清在线观看网站 | 国产超级va在线观看视频 | 日韩精品无码免费一区二区三区 | 精品久久久无码中文字幕 | 中文字幕色婷婷在线视频 | 久久五月精品中文字幕 | 少妇性荡欲午夜性开放视频剧场 | 亚洲精品无码国产 | 国产激情无码一区二区app | 中文字幕无码热在线视频 | 国产精品无码久久av | 日韩人妻无码一区二区三区久久99 | 久久综合九色综合欧美狠狠 | 亚洲乱亚洲乱妇50p | 宝宝好涨水快流出来免费视频 | 大胆欧美熟妇xx | 一本久久a久久精品vr综合 | 国产人成高清在线视频99最全资源 | 成人精品天堂一区二区三区 | 亚洲精品中文字幕 | 人人妻人人澡人人爽人人精品浪潮 | 国产精品嫩草久久久久 | 在线 国产 欧美 亚洲 天堂 | 少妇无套内谢久久久久 | 国产精品.xx视频.xxtv | 宝宝好涨水快流出来免费视频 | 无套内谢的新婚少妇国语播放 | 亚洲色欲色欲天天天www | 国产片av国语在线观看 | 两性色午夜视频免费播放 | 欧美怡红院免费全部视频 | 精品夜夜澡人妻无码av蜜桃 | 大乳丰满人妻中文字幕日本 | 国产区女主播在线观看 | 清纯唯美经典一区二区 | 沈阳熟女露脸对白视频 | 欧美 日韩 人妻 高清 中文 | 成年美女黄网站色大免费全看 | 九九久久精品国产免费看小说 | 纯爱无遮挡h肉动漫在线播放 | 无码福利日韩神码福利片 | 欧美丰满少妇xxxx性 | 伊人久久大香线蕉午夜 | 国产午夜视频在线观看 | 亚洲成色www久久网站 | 色一情一乱一伦 | 少妇被黑人到高潮喷出白浆 | 熟妇激情内射com | 国产精品第一国产精品 | 对白脏话肉麻粗话av | 亚洲区欧美区综合区自拍区 | 亚洲成av人片在线观看无码不卡 | 女高中生第一次破苞av | 国产精品免费大片 | aⅴ亚洲 日韩 色 图网站 播放 | 任你躁在线精品免费 | 女人被男人爽到呻吟的视频 | 欧美三级a做爰在线观看 | 欧美人与禽猛交狂配 | 熟女俱乐部五十路六十路av | 国产精品亚洲五月天高清 | 伊人久久大香线蕉av一区二区 | 亚洲国产欧美国产综合一区 | 亚洲 激情 小说 另类 欧美 | 精品国产aⅴ无码一区二区 | 久久久久成人精品免费播放动漫 | 日本一本二本三区免费 | 99久久99久久免费精品蜜桃 | 国产av一区二区精品久久凹凸 | 无码纯肉视频在线观看 | 国产高清不卡无码视频 | 日日干夜夜干 | 噜噜噜亚洲色成人网站 | 曰本女人与公拘交酡免费视频 | 国产亚洲精品久久久久久国模美 | 国产熟妇高潮叫床视频播放 | 老司机亚洲精品影院无码 | 精品国偷自产在线 | 女人被爽到呻吟gif动态图视看 | 久久zyz资源站无码中文动漫 | 天天摸天天透天天添 | 精品国偷自产在线 | 亚洲一区二区三区偷拍女厕 | 天天拍夜夜添久久精品大 | 中文无码伦av中文字幕 | 国产sm调教视频在线观看 | 亚洲国产欧美国产综合一区 | 荫蒂被男人添的好舒服爽免费视频 | 中文字幕 人妻熟女 | 国产精品无码久久av | 久久99精品国产麻豆 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 国产深夜福利视频在线 | 在线 国产 欧美 亚洲 天堂 | 久久国产精品偷任你爽任你 | 99久久亚洲精品无码毛片 | 精品久久久久久亚洲精品 | 亚洲中文字幕无码一久久区 | 亚洲s码欧洲m码国产av | 99精品视频在线观看免费 | 中文精品无码中文字幕无码专区 | 国产性生交xxxxx无码 | 国产内射老熟女aaaa | 亚洲男人av香蕉爽爽爽爽 | 国产精品福利视频导航 | 中文字幕无码人妻少妇免费 | 无码播放一区二区三区 | 精品夜夜澡人妻无码av蜜桃 | 精品无码国产自产拍在线观看蜜 | 日日天日日夜日日摸 | 国产欧美熟妇另类久久久 | 熟妇人妻无码xxx视频 | 色欲人妻aaaaaaa无码 | 国产av无码专区亚洲awww | 爱做久久久久久 | 久青草影院在线观看国产 | 国内揄拍国内精品人妻 | 亚洲呦女专区 | 久久综合色之久久综合 | 国产精品久久国产三级国 | 精品一区二区三区波多野结衣 | 亚洲男人av天堂午夜在 | 四虎国产精品免费久久 | 国产精华av午夜在线观看 | 欧美国产日产一区二区 | 午夜无码人妻av大片色欲 | 国产精品久久精品三级 | 国产av一区二区三区最新精品 | 亚洲一区二区三区四区 | 男人扒开女人内裤强吻桶进去 | 中文字幕 亚洲精品 第1页 | 久久久久亚洲精品男人的天堂 | 色窝窝无码一区二区三区色欲 | 成熟妇人a片免费看网站 | 真人与拘做受免费视频 | 国产精品无码成人午夜电影 | 午夜时刻免费入口 | 久久97精品久久久久久久不卡 | 午夜无码区在线观看 | 国产精品久久久一区二区三区 | 亚洲午夜福利在线观看 | 伊人久久大香线蕉亚洲 | 欧美日韩久久久精品a片 | 两性色午夜视频免费播放 | 给我免费的视频在线观看 | 国产亚洲欧美在线专区 | 国产免费久久久久久无码 | 色欲综合久久中文字幕网 | 日本高清一区免费中文视频 | 天堂а√在线地址中文在线 | 色婷婷久久一区二区三区麻豆 | 内射老妇bbwx0c0ck | 国产成人无码av片在线观看不卡 | 欧美成人午夜精品久久久 | 国产无遮挡又黄又爽免费视频 | 成年女人永久免费看片 | 丰满少妇高潮惨叫视频 | 欧美精品无码一区二区三区 | 国产午夜手机精彩视频 | 精品欧洲av无码一区二区三区 | 成 人影片 免费观看 | 中文字幕色婷婷在线视频 | 99久久精品午夜一区二区 | 大屁股大乳丰满人妻 | 国产亚洲视频中文字幕97精品 | 国产人妻精品一区二区三区不卡 | 亚洲区欧美区综合区自拍区 | 精品无码成人片一区二区98 | 亚洲欧美国产精品久久 | 香蕉久久久久久av成人 | 久久国产精品偷任你爽任你 | 无码人妻丰满熟妇区毛片18 | 国产sm调教视频在线观看 | 国内揄拍国内精品人妻 | 夜夜躁日日躁狠狠久久av | 国产精品人妻一区二区三区四 | 性欧美大战久久久久久久 | 欧美丰满熟妇xxxx性ppx人交 | 亚无码乱人伦一区二区 | 久久无码中文字幕免费影院蜜桃 | 波多野结衣av一区二区全免费观看 | 漂亮人妻洗澡被公强 日日躁 | 国产成人久久精品流白浆 | 亚洲の无码国产の无码步美 | 男女超爽视频免费播放 | 国产肉丝袜在线观看 | 精品国产一区av天美传媒 | 日本爽爽爽爽爽爽在线观看免 | 国产香蕉尹人综合在线观看 | 久久久中文字幕日本无吗 | 亚洲自偷精品视频自拍 | 久久精品人妻少妇一区二区三区 | 日本va欧美va欧美va精品 | 亚洲一区二区三区国产精华液 | 欧美日韩人成综合在线播放 | 亚洲gv猛男gv无码男同 | 天天拍夜夜添久久精品 | 亚洲精品国产精品乱码不卡 | 麻花豆传媒剧国产免费mv在线 | 少妇愉情理伦片bd | 奇米影视7777久久精品人人爽 | 网友自拍区视频精品 | 日产国产精品亚洲系列 | 黑森林福利视频导航 | 久青草影院在线观看国产 | 国产精品美女久久久网av | 成人亚洲精品久久久久 | 亚洲啪av永久无码精品放毛片 | 欧美 日韩 人妻 高清 中文 | 国产精品久久久久久亚洲影视内衣 | 日韩av无码一区二区三区不卡 | 无码国内精品人妻少妇 | 精品国精品国产自在久国产87 | 无码人妻黑人中文字幕 | 中文亚洲成a人片在线观看 | 黑人大群体交免费视频 | 日本熟妇人妻xxxxx人hd | 色婷婷久久一区二区三区麻豆 | 国内揄拍国内精品人妻 | 欧美变态另类xxxx | 在线а√天堂中文官网 | 男女性色大片免费网站 | 精品国产精品久久一区免费式 | 欧美丰满老熟妇xxxxx性 | 色欲久久久天天天综合网精品 | 97精品国产97久久久久久免费 | 无套内谢老熟女 | 精品久久久久久亚洲精品 | 亚洲一区二区三区无码久久 | 国产乱码精品一品二品 | 熟妇人妻中文av无码 | 亚洲精品综合五月久久小说 | 搡女人真爽免费视频大全 | 精品无码一区二区三区爱欲 | 人人澡人人妻人人爽人人蜜桃 | 少妇性l交大片欧洲热妇乱xxx | 在教室伦流澡到高潮hnp视频 | 日欧一片内射va在线影院 | 永久免费精品精品永久-夜色 | 亚洲色大成网站www | 中文字幕日韩精品一区二区三区 | 人妻少妇被猛烈进入中文字幕 | 青草青草久热国产精品 | 久精品国产欧美亚洲色aⅴ大片 | 蜜桃无码一区二区三区 | 亚洲精品综合一区二区三区在线 | 精品国产av色一区二区深夜久久 | 久久人人爽人人爽人人片av高清 | 国产真实乱对白精彩久久 | 大肉大捧一进一出好爽视频 | 免费视频欧美无人区码 | 亚洲日韩中文字幕在线播放 | 国产成人无码av在线影院 | 人人爽人人澡人人高潮 | 亚洲国产成人a精品不卡在线 | 少妇高潮一区二区三区99 | 久久99精品国产.久久久久 | 成年美女黄网站色大免费视频 | 中文字幕无码免费久久9一区9 | 伦伦影院午夜理论片 | 免费中文字幕日韩欧美 | 国产人妻大战黑人第1集 | 欧洲熟妇色 欧美 | 精品久久久久久人妻无码中文字幕 | 波多野结衣一区二区三区av免费 | 图片小说视频一区二区 | 西西人体www44rt大胆高清 | 88国产精品欧美一区二区三区 | 欧洲精品码一区二区三区免费看 | 精品亚洲韩国一区二区三区 | 在线看片无码永久免费视频 | 无码播放一区二区三区 | 美女极度色诱视频国产 | 乱人伦中文视频在线观看 | 国产在线精品一区二区三区直播 | 国产精品久久久午夜夜伦鲁鲁 | 人妻夜夜爽天天爽三区 | 国产精品久久久久久无码 | 麻豆国产人妻欲求不满谁演的 | 中文字幕无码乱人伦 | 131美女爱做视频 | 又大又硬又爽免费视频 | 国产网红无码精品视频 | 亚洲国产一区二区三区在线观看 | 欧美 丝袜 自拍 制服 另类 | 性欧美大战久久久久久久 | 国产又爽又黄又刺激的视频 | 久久伊人色av天堂九九小黄鸭 | 天堂亚洲2017在线观看 | 美女扒开屁股让男人桶 | 久久久久久久久888 | 天天摸天天透天天添 | 国产超碰人人爽人人做人人添 | 亚洲欧美综合区丁香五月小说 | 成人精品视频一区二区三区尤物 | 日日躁夜夜躁狠狠躁 | 免费网站看v片在线18禁无码 | 亚洲人成影院在线无码按摩店 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 欧美国产日产一区二区 | 97资源共享在线视频 | 日韩 欧美 动漫 国产 制服 | 丰满肥臀大屁股熟妇激情视频 | 欧美日韩综合一区二区三区 | 国产精品va在线观看无码 | 久久www免费人成人片 | 欧美肥老太牲交大战 | 欧美日韩亚洲国产精品 | 成人欧美一区二区三区黑人免费 | 久久午夜无码鲁丝片 | 欧美激情一区二区三区成人 | a在线观看免费网站大全 | 中文字幕人妻丝袜二区 | 国产办公室秘书无码精品99 | 欧美三级a做爰在线观看 | 亚洲一区二区三区无码久久 | 在线观看免费人成视频 | 无码午夜成人1000部免费视频 | 国产av久久久久精东av | 无码吃奶揉捏奶头高潮视频 | 欧美人与物videos另类 | 国产精品久久国产三级国 | 麻豆国产人妻欲求不满 | 男女性色大片免费网站 | 18禁黄网站男男禁片免费观看 | 久久午夜无码鲁丝片午夜精品 | 六十路熟妇乱子伦 | 人妻夜夜爽天天爽三区 | 亚洲成色www久久网站 | 欧美精品在线观看 | 亚洲人成影院在线观看 | 亚洲男人av香蕉爽爽爽爽 | 精品久久久久久亚洲精品 | 成人精品天堂一区二区三区 | 一个人看的www免费视频在线观看 | 亚洲精品久久久久久一区二区 | 久久精品人人做人人综合试看 | 成人无码影片精品久久久 | 300部国产真实乱 | 午夜精品久久久久久久久 | 色综合久久久无码中文字幕 | 人人妻在人人 | 无码纯肉视频在线观看 | 亚洲人成网站在线播放942 | 精品久久综合1区2区3区激情 | 国产性生大片免费观看性 | 色综合久久88色综合天天 | 国产深夜福利视频在线 | 亚洲成a人片在线观看无码3d | 日本熟妇人妻xxxxx人hd | 中文字幕乱码中文乱码51精品 | 亚洲熟妇自偷自拍另类 | 永久免费精品精品永久-夜色 | 国产人妻人伦精品1国产丝袜 | 亚洲欧洲日本综合aⅴ在线 | ass日本丰满熟妇pics | 伊人久久婷婷五月综合97色 | 精品国产成人一区二区三区 | 国产区女主播在线观看 | 亚洲精品久久久久avwww潮水 | 日日碰狠狠躁久久躁蜜桃 | 国产激情无码一区二区 | 伊人久久大香线焦av综合影院 | 亚洲一区二区三区四区 | 亚洲日韩一区二区三区 | 波多野结衣aⅴ在线 | 国产真实伦对白全集 | 乱码av麻豆丝袜熟女系列 | 国产成人精品必看 | 人妻少妇精品无码专区动漫 | 亚洲国产成人a精品不卡在线 | 亚洲中文字幕在线观看 | 久久精品一区二区三区四区 | 中文亚洲成a人片在线观看 | 日韩人妻无码中文字幕视频 | 中文精品久久久久人妻不卡 | 日韩欧美成人免费观看 | 久久精品国产一区二区三区 | 日本护士xxxxhd少妇 | 日韩 欧美 动漫 国产 制服 | 日韩人妻系列无码专区 | 伊人色综合久久天天小片 | 亚洲第一无码av无码专区 | 日本成熟视频免费视频 | 国产国产精品人在线视 | 成年女人永久免费看片 | 少妇厨房愉情理9仑片视频 | 亚洲精品国产a久久久久久 | 激情爆乳一区二区三区 | 色综合久久88色综合天天 | 国产69精品久久久久app下载 | 国产va免费精品观看 | 四虎国产精品免费久久 | 久久99精品久久久久久动态图 | 亚洲最大成人网站 | 99久久无码一区人妻 | 国产精品人人妻人人爽 | 亚洲春色在线视频 | 欧美自拍另类欧美综合图片区 | 亚洲国产欧美日韩精品一区二区三区 | 日韩精品无码一区二区中文字幕 | 久久精品99久久香蕉国产色戒 | 免费看男女做好爽好硬视频 | 国产两女互慰高潮视频在线观看 | 欧美丰满老熟妇xxxxx性 | 极品尤物被啪到呻吟喷水 | 国产成人无码午夜视频在线观看 | 5858s亚洲色大成网站www | 欧美丰满熟妇xxxx性ppx人交 | 蜜臀av无码人妻精品 | 精品水蜜桃久久久久久久 | 日产精品99久久久久久 | 大肉大捧一进一出好爽视频 | 国产精品亚洲专区无码不卡 | 成熟妇人a片免费看网站 | 丝袜人妻一区二区三区 | 亚洲一区二区三区播放 | 国产精品久久久久久久影院 | 国产麻豆精品精东影业av网站 | 兔费看少妇性l交大片免费 | 欧美人与动性行为视频 | 久久精品中文字幕一区 | 国产午夜亚洲精品不卡 | 亚洲综合在线一区二区三区 | 无码人妻黑人中文字幕 | 国内精品九九久久久精品 | yw尤物av无码国产在线观看 | 精品国产一区二区三区av 性色 | 欧美变态另类xxxx | 久在线观看福利视频 | 成人无码精品1区2区3区免费看 | 亚洲欧美国产精品专区久久 | 久久精品一区二区三区四区 | 欧美乱妇无乱码大黄a片 | 久久久久se色偷偷亚洲精品av | 97人妻精品一区二区三区 | av人摸人人人澡人人超碰下载 | 亚洲综合伊人久久大杳蕉 | 国内综合精品午夜久久资源 | 国产成人人人97超碰超爽8 | 51国偷自产一区二区三区 | 久精品国产欧美亚洲色aⅴ大片 | 熟女少妇在线视频播放 | 人人妻人人澡人人爽欧美精品 | 18禁止看的免费污网站 | 日欧一片内射va在线影院 | 国产超碰人人爽人人做人人添 | 欧美黑人性暴力猛交喷水 | 最新版天堂资源中文官网 | 天天摸天天碰天天添 | 免费视频欧美无人区码 | 成人免费视频视频在线观看 免费 | 97久久国产亚洲精品超碰热 | 久久精品国产一区二区三区 | 久久国产精品精品国产色婷婷 | 精品人妻人人做人人爽 | 国语自产偷拍精品视频偷 | 欧美成人高清在线播放 | 欧洲熟妇色 欧美 | 成 人影片 免费观看 | 日日摸日日碰夜夜爽av | 在线成人www免费观看视频 | 在线看片无码永久免费视频 | 色婷婷综合中文久久一本 | www国产亚洲精品久久网站 | 蜜桃视频插满18在线观看 | 免费看男女做好爽好硬视频 | 少妇厨房愉情理9仑片视频 | 欧洲欧美人成视频在线 | 国产一区二区三区影院 | 久久99精品久久久久久 | 久久精品国产精品国产精品污 | 亚洲成a人片在线观看无码 | 一区二区三区高清视频一 | 蜜桃臀无码内射一区二区三区 | 国精产品一区二区三区 | 国产亚洲精品久久久ai换 | 亚洲精品鲁一鲁一区二区三区 | 亚洲国产精品一区二区第一页 | 综合人妻久久一区二区精品 | 中国女人内谢69xxxxxa片 | 女高中生第一次破苞av | 97资源共享在线视频 | 在线播放免费人成毛片乱码 | 亚洲中文字幕在线无码一区二区 | 无码人妻黑人中文字幕 | 东京热男人av天堂 | 波多野42部无码喷潮在线 | 亚洲综合精品香蕉久久网 | 成人影院yy111111在线观看 | 亚洲色欲久久久综合网东京热 | 在线播放免费人成毛片乱码 | 内射后入在线观看一区 | 7777奇米四色成人眼影 | 亚洲 日韩 欧美 成人 在线观看 | 成人三级无码视频在线观看 | 色欲av亚洲一区无码少妇 | 亚洲男人av天堂午夜在 | 欧美老熟妇乱xxxxx | 国产精品久久久久久无码 | 呦交小u女精品视频 | 精品久久8x国产免费观看 | 内射白嫩少妇超碰 | 在线播放免费人成毛片乱码 | 免费人成在线视频无码 | 国产莉萝无码av在线播放 | 麻豆果冻传媒2021精品传媒一区下载 | 天天拍夜夜添久久精品大 | 蜜臀av在线播放 久久综合激激的五月天 | 秋霞成人午夜鲁丝一区二区三区 | 亚洲中文字幕无码一久久区 | 亚洲国产av美女网站 | 欧美日韩亚洲国产精品 | 成人无码影片精品久久久 | 精品国产成人一区二区三区 | 扒开双腿疯狂进出爽爽爽视频 | 久久99精品久久久久久动态图 | 欧美黑人乱大交 | 精品国产一区av天美传媒 | 欧美日韩色另类综合 | 国产成人综合在线女婷五月99播放 | 亚洲s色大片在线观看 | 性做久久久久久久免费看 | 国产三级久久久精品麻豆三级 | 亚洲一区av无码专区在线观看 | 国产午夜亚洲精品不卡下载 | 亚洲中文字幕成人无码 | 国产情侣作爱视频免费观看 | 玩弄人妻少妇500系列视频 | 国产无遮挡吃胸膜奶免费看 | 久久久久久久人妻无码中文字幕爆 | 亚洲国产午夜精品理论片 | 无套内谢的新婚少妇国语播放 | 蜜桃视频插满18在线观看 | 欧美激情内射喷水高潮 | 日本精品高清一区二区 | 大乳丰满人妻中文字幕日本 | 麻豆国产丝袜白领秘书在线观看 | 国产精品国产自线拍免费软件 | 国产免费久久精品国产传媒 | 蜜桃av抽搐高潮一区二区 | 久久综合九色综合97网 | 久久婷婷五月综合色国产香蕉 | 性色欲网站人妻丰满中文久久不卡 | 欧美国产亚洲日韩在线二区 | 伊人久久大香线焦av综合影院 | 人妻少妇被猛烈进入中文字幕 | 精品久久综合1区2区3区激情 | 国产精品.xx视频.xxtv | 激情内射日本一区二区三区 | 欧美国产亚洲日韩在线二区 | 97夜夜澡人人爽人人喊中国片 | 国产综合在线观看 | 亚洲 激情 小说 另类 欧美 | 99精品久久毛片a片 | 婷婷色婷婷开心五月四房播播 | 国产精品无套呻吟在线 | 一个人看的视频www在线 | 夜夜影院未满十八勿进 | 亚洲啪av永久无码精品放毛片 | 欧洲欧美人成视频在线 | 午夜无码人妻av大片色欲 | 国产精品多人p群无码 | 好屌草这里只有精品 | 无码一区二区三区在线观看 | 国产av人人夜夜澡人人爽麻豆 | 无套内谢老熟女 | 少妇无码一区二区二三区 | 老熟妇乱子伦牲交视频 | 黑人粗大猛烈进出高潮视频 | 99精品无人区乱码1区2区3区 | 人妻互换免费中文字幕 | 一二三四社区在线中文视频 | 国产精品福利视频导航 | 午夜免费福利小电影 | 国产激情无码一区二区app | 亚洲欧美综合区丁香五月小说 | 夫妻免费无码v看片 | 国产精品福利视频导航 | 国产精品高潮呻吟av久久 | 无码吃奶揉捏奶头高潮视频 | 女人被男人爽到呻吟的视频 | 国产成人无码av片在线观看不卡 | 国产成人无码一二三区视频 | 美女扒开屁股让男人桶 | 精品人人妻人人澡人人爽人人 | 最近的中文字幕在线看视频 | 国产精品无码一区二区三区不卡 | 粗大的内捧猛烈进出视频 | 国产亚洲精品久久久久久久 | 人妻少妇精品无码专区二区 | 国产在线精品一区二区高清不卡 | 国内揄拍国内精品人妻 | 久久天天躁狠狠躁夜夜免费观看 | 天干天干啦夜天干天2017 | 天天爽夜夜爽夜夜爽 | 日韩人妻无码一区二区三区久久99 | 亚洲毛片av日韩av无码 | 在线 国产 欧美 亚洲 天堂 | 色欲av亚洲一区无码少妇 | 国产乱人伦av在线无码 | 少妇人妻偷人精品无码视频 | 一本色道久久综合亚洲精品不卡 | 久久综合网欧美色妞网 | 国产偷抇久久精品a片69 | 天天做天天爱天天爽综合网 | 国产色在线 | 国产 | 久久久久成人精品免费播放动漫 | 男女性色大片免费网站 | 国产成人一区二区三区别 | 国产又爽又猛又粗的视频a片 | 国产综合在线观看 | 欧美人与禽猛交狂配 | 中国女人内谢69xxxxxa片 | 中文字幕人妻无码一区二区三区 | 国产精品无码一区二区桃花视频 | 国产精品二区一区二区aⅴ污介绍 | 国产精品沙发午睡系列 | 国产精品久久久久7777 | 日韩欧美成人免费观看 | 老太婆性杂交欧美肥老太 | 欧美精品国产综合久久 | 色五月丁香五月综合五月 | 久久综合九色综合97网 | 黄网在线观看免费网站 | 成人女人看片免费视频放人 | 欧美性猛交xxxx富婆 | 久久久婷婷五月亚洲97号色 | 亚洲熟妇自偷自拍另类 | 99久久精品无码一区二区毛片 | 国产农村乱对白刺激视频 | 国产另类ts人妖一区二区 | 呦交小u女精品视频 | 真人与拘做受免费视频一 | 中文字幕乱码人妻二区三区 | 久久天天躁狠狠躁夜夜免费观看 | 精品午夜福利在线观看 | 亚洲成色在线综合网站 | 中国女人内谢69xxxxxa片 | 漂亮人妻洗澡被公强 日日躁 | 人人爽人人澡人人高潮 | 国产激情一区二区三区 | 婷婷综合久久中文字幕蜜桃三电影 | 日本又色又爽又黄的a片18禁 | 亚洲中文字幕在线观看 | 内射后入在线观看一区 | 亚洲成av人片在线观看无码不卡 | 亚洲乱码中文字幕在线 | 性色欲情网站iwww九文堂 | 国产乱码精品一品二品 | 内射白嫩少妇超碰 | 国产 浪潮av性色四虎 | 国产成人一区二区三区别 | 亚洲日韩一区二区三区 | 狠狠亚洲超碰狼人久久 | 亚洲熟悉妇女xxx妇女av | 久久久国产精品无码免费专区 | 爱做久久久久久 | 亚洲成色在线综合网站 | 亚洲日韩一区二区 | 熟妇人妻无码xxx视频 | 久久www免费人成人片 | 中文精品久久久久人妻不卡 | 老头边吃奶边弄进去呻吟 | 国产高潮视频在线观看 | 亚洲欧美综合区丁香五月小说 | 澳门永久av免费网站 | 久久精品成人欧美大片 | 夜夜高潮次次欢爽av女 | 国产精品无码久久av | 色婷婷久久一区二区三区麻豆 | 人妻插b视频一区二区三区 | 亚洲区小说区激情区图片区 | 精品欧美一区二区三区久久久 | 久久 国产 尿 小便 嘘嘘 | 国产精品无码一区二区桃花视频 | 国产精品香蕉在线观看 | 国产性生大片免费观看性 | 风流少妇按摩来高潮 | 欧洲精品码一区二区三区免费看 | 高清无码午夜福利视频 | 久久综合给合久久狠狠狠97色 | 亚洲精品一区二区三区在线 | 老熟妇乱子伦牲交视频 | 色五月五月丁香亚洲综合网 | 久久国语露脸国产精品电影 | 久久午夜无码鲁丝片 | 国产成人精品久久亚洲高清不卡 | 亚洲日本一区二区三区在线 | 中文字幕色婷婷在线视频 | 老熟妇仑乱视频一区二区 | 青青草原综合久久大伊人精品 | 男女下面进入的视频免费午夜 | 国产婷婷色一区二区三区在线 | 中文字幕精品av一区二区五区 | 精品久久8x国产免费观看 | 强辱丰满人妻hd中文字幕 | 奇米影视888欧美在线观看 | 水蜜桃av无码 | 国产成人人人97超碰超爽8 | 亚洲日韩一区二区三区 | 九一九色国产 | 亚洲欧美综合区丁香五月小说 | 国产成人精品久久亚洲高清不卡 | 国产成人综合美国十次 | 又粗又大又硬毛片免费看 | 岛国片人妻三上悠亚 | 精品成人av一区二区三区 | 亚洲日本va午夜在线电影 | 久久精品女人的天堂av | 国产又爽又猛又粗的视频a片 | 爆乳一区二区三区无码 | 一本加勒比波多野结衣 | 欧美人与物videos另类 | 久久久久免费精品国产 | 久久久av男人的天堂 | 亚洲人成网站免费播放 | 国产精品美女久久久网av | 高潮喷水的毛片 | 天天拍夜夜添久久精品大 | 亚洲人成无码网www | 狠狠色噜噜狠狠狠7777奇米 | 性史性农村dvd毛片 | 亚洲精品一区二区三区四区五区 | 久久天天躁夜夜躁狠狠 | 女人被爽到呻吟gif动态图视看 | 亚洲一区二区三区四区 | 亚洲国产精品成人久久蜜臀 | 国产激情无码一区二区app | 国产成人无码午夜视频在线观看 | 亚洲小说图区综合在线 | 精品无码av一区二区三区 | 在线精品国产一区二区三区 | 丰满人妻一区二区三区免费视频 | 中文字幕乱码中文乱码51精品 | 亚洲国精产品一二二线 | 亚洲欧美日韩综合久久久 | 在线播放免费人成毛片乱码 | 亚洲精品午夜无码电影网 | 久久精品国产日本波多野结衣 | 亚洲成av人在线观看网址 | 亚洲中文字幕乱码av波多ji | 久久人人爽人人爽人人片ⅴ | 国产激情无码一区二区 | 日日鲁鲁鲁夜夜爽爽狠狠 | 亚洲va欧美va天堂v国产综合 | 亚洲成熟女人毛毛耸耸多 | 午夜精品一区二区三区的区别 | 狠狠cao日日穞夜夜穞av | 小sao货水好多真紧h无码视频 | 人妻与老人中文字幕 | 熟妇女人妻丰满少妇中文字幕 | 无套内射视频囯产 | √天堂中文官网8在线 | 亚洲国产欧美日韩精品一区二区三区 | 图片区 小说区 区 亚洲五月 | 亚洲熟妇色xxxxx亚洲 | 成人无码影片精品久久久 | 国产成人av免费观看 | 久久人妻内射无码一区三区 | 亚洲の无码国产の无码影院 | 日韩欧美中文字幕公布 | 又色又爽又黄的美女裸体网站 | 国产免费久久久久久无码 | 日韩av激情在线观看 | 中文字幕无线码免费人妻 | 欧美老人巨大xxxx做受 | 欧美国产亚洲日韩在线二区 | 玩弄中年熟妇正在播放 | 欧美 丝袜 自拍 制服 另类 | 女人和拘做爰正片视频 | 特级做a爰片毛片免费69 | 亚洲区小说区激情区图片区 | 99久久精品国产一区二区蜜芽 | 欧美日韩一区二区免费视频 | 亚洲国产欧美国产综合一区 | 一本久道久久综合狠狠爱 | 精品厕所偷拍各类美女tp嘘嘘 | 国产精华av午夜在线观看 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 国产成人无码av一区二区 | 亚洲人成网站在线播放942 | 一二三四在线观看免费视频 | 在线看片无码永久免费视频 | 成人无码视频在线观看网站 | 99久久精品国产一区二区蜜芽 | 亚洲精品国偷拍自产在线麻豆 | 国内精品人妻无码久久久影院蜜桃 | 九九在线中文字幕无码 | 久久精品国产日本波多野结衣 | 强伦人妻一区二区三区视频18 | 高清不卡一区二区三区 | 在教室伦流澡到高潮hnp视频 | 露脸叫床粗话东北少妇 | 国产亚洲精品久久久闺蜜 | 中文字幕人妻无码一区二区三区 | 中文字幕+乱码+中文字幕一区 | 极品尤物被啪到呻吟喷水 | 日本精品高清一区二区 | 夫妻免费无码v看片 | 久久亚洲精品中文字幕无男同 | 成人免费视频视频在线观看 免费 | 国产超碰人人爽人人做人人添 | 风流少妇按摩来高潮 | 中文亚洲成a人片在线观看 | 国产手机在线αⅴ片无码观看 | 久久精品视频在线看15 | 久久国语露脸国产精品电影 | 中文字幕精品av一区二区五区 | av人摸人人人澡人人超碰下载 | аⅴ资源天堂资源库在线 | www一区二区www免费 | 国产av剧情md精品麻豆 | 亚洲综合另类小说色区 | 麻豆国产人妻欲求不满谁演的 | 亚洲精品综合一区二区三区在线 | 欧美性猛交xxxx富婆 | 日韩av激情在线观看 | 国产精品久久国产三级国 | 大屁股大乳丰满人妻 | 香港三级日本三级妇三级 | 欧美日韩综合一区二区三区 | 精品欧洲av无码一区二区三区 | 日日碰狠狠丁香久燥 | 东京热男人av天堂 | 国内揄拍国内精品人妻 | 人妻无码αv中文字幕久久琪琪布 | 国产乱人伦偷精品视频 | 国内综合精品午夜久久资源 | 无码国产乱人伦偷精品视频 | 国产激情艳情在线看视频 | 久久久久亚洲精品男人的天堂 | 日韩精品乱码av一区二区 | 丰满人妻被黑人猛烈进入 | 亚洲一区二区三区含羞草 | 麻豆精产国品 | 国产精品久久久久久久9999 | 亚洲第一网站男人都懂 | 国产真实夫妇视频 | 中文字幕色婷婷在线视频 | 日本大乳高潮视频在线观看 | 天天拍夜夜添久久精品 | 国产高潮视频在线观看 | 国内精品人妻无码久久久影院 |