久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術文章
文章詳情頁

Springboot實現(xiàn)Shiro整合JWT的示例代碼

瀏覽:4日期:2023-04-03 15:42:32
寫在前面

之前想嘗試把JWT和Shiro結合到一起,但是在網(wǎng)上查了些博客,也沒太有看懂,所以就自己重新研究了一下Shiro的工作機制,然后自己想了個(傻逼)辦法把JWT和Shiro整合到一起了

另外接下來還會涉及到JWT相關的內(nèi)容,我之前寫過一篇博客,可以看這里:Springboot實現(xiàn)JWT認證

Shiro的Session機制

由于我的方法是改變了Shiro的默認的Session機制,所以這里先簡單講一下Shiro的機制,簡單了解Shiro是怎么確定每次訪問的是哪個用戶的

Servlet的Session機制

Shiro在JavaWeb中使用到的就是默認的Servlet的Session機制,大致流程如下:

Springboot實現(xiàn)Shiro整合JWT的示例代碼

1.用戶首次發(fā)請求

2.服務器接收到請求之后,無論你有沒有權限訪問到資源,在返回響應的時候,服務器都會生成一個Session用來儲存該用戶的信息,然后生成SessionId作為對應的Key

3.服務器會在響應中,用jsessionId這個名字,把這個SessionId以Cookie的方式發(fā)給客戶(就是Set-Cookie響應頭)

4.由于已經(jīng)設置了Cookie,下次訪問的時候,服務器會自動識別到這個SessionId然后找到你上次對應的Session

Shiro帶來的變化

而結合Shiro之后,上面的第二步和第三步會發(fā)生小變化:

2.—>服務器不但會創(chuàng)建Session,還會創(chuàng)建一個Subject對象(就是Shiro中用來代表當前用戶的類),也用這個SessionId作為Key綁定

3.—>第二次接受到請求的時候,Shiro會從請求頭中找到SessionId,然后去尋找對應的Subject然后綁定到當前上下文,這時候Shiro就能知道來訪的是誰了

我的思路

由于這個是我自己想出來的,所以可能會存在一定的問題,還請大佬指點

主要思想是:用JWT Token來代替Shiro原本返回的Session

Springboot實現(xiàn)Shiro整合JWT的示例代碼

工作流程:

用戶登錄 若成功則shiro會默認生成一個SessionId用來匹配當前Subject對象,則我們將這個SessionId放入JWT中 返回JWT 用戶第二次攜帶JWT來訪問接口 服務器解析JWT,獲得SessionId 服務器把SessionId交給Shiro執(zhí)行相關認證代碼實現(xiàn)導入JWT相關包

導入java-jwt包:

這個包里實現(xiàn)了一系列jwt操作的api(包括上面講到的怎么校驗,怎么生成jwt等等)

如果你是Maven玩家:

pom.xml里寫入

<!-- https://mvnrepository.com/artifact/com.auth0/java-jwt --><dependency> <groupId>com.auth0</groupId> <artifactId>java-jwt</artifactId> <version>3.8.3</version></dependency>

如果你是Gradle玩家:

build.gradle里寫入

compile group: ’com.auth0’, name: ’java-jwt’, version: ’3.8.3’

如果你是其他玩家:

maven中央倉庫地址點這里

JWT工具類

JwtUtils,代碼如下:

import com.auth0.jwt.JWT;import com.auth0.jwt.JWTVerifier;import com.auth0.jwt.algorithms.Algorithm;import com.auth0.jwt.exceptions.JWTDecodeException;import com.auth0.jwt.interfaces.Claim;import com.auth0.jwt.interfaces.DecodedJWT;import java.io.Serializable;import java.util.Calendar;import java.util.Date;/** * @author Lehr * @create: 2020-02-04 */public class JwtUtils { /** 簽發(fā)對象:這個用戶的id 簽發(fā)時間:現(xiàn)在 有效時間:30分鐘 載荷內(nèi)容:暫時設計為:這個人的名字,這個人的昵稱 加密密鑰:這個人的id加上一串字符串 */ public static String createToken(String userId,String realName, String userName) { Calendar nowTime = Calendar.getInstance(); nowTime.add(Calendar.MINUTE,30); Date expiresDate = nowTime.getTime(); return JWT.create().withAudience(userId) //簽發(fā)對象.withIssuedAt(new Date()) //發(fā)行時間.withExpiresAt(expiresDate) //有效時間.withClaim('userName', userName) //載荷,隨便寫幾個都可以.withClaim('realName', realName).sign(Algorithm.HMAC256(userId+'HelloLehr')); //加密 } /** * 檢驗合法性,其中secret參數(shù)就應該傳入的是用戶的id * @param token * @throws TokenUnavailable */ public static void verifyToken(String token, String secret) throws TokenUnavailable { DecodedJWT jwt = null; try { JWTVerifier verifier = JWT.require(Algorithm.HMAC256(secret+'HelloLehr')).build(); jwt = verifier.verify(token); } catch (Exception e) { //效驗失敗 //這里拋出的異常是我自定義的一個異常,你也可以寫成別的 throw new TokenUnavailable(); } } /** * 獲取簽發(fā)對象 */ public static String getAudience(String token) throws TokenUnavailable { String audience = null; try { audience = JWT.decode(token).getAudience().get(0); } catch (JWTDecodeException j) { //這里是token解析失敗 throw new TokenUnavailable(); } return audience; } /** * 通過載荷名字獲取載荷的值 */ public static Claim getClaimByName(String token, String name){ return JWT.decode(token).getClaim(name); }}

一點小說明:

關于jwt生成時的加密和驗證方法:

jwt的驗證其實就是驗證jwt最后那一部分(簽名部分)。這里在指定簽名的加密方式的時候,還傳入了一個字符串來加密,所以驗證的時候不但需要知道加密算法,還需要獲得這個字符串才能成功解密,提高了安全性。我這里用的是id來,比較簡單,如果你想更安全一點,可以把用戶密碼作為這個加密字符串,這樣就算是這段業(yè)務代碼泄露了,也不會引發(fā)太大的安全問題(畢竟我的id是誰都知道的,這樣令牌就可以被偽造,但是如果換成密碼,只要數(shù)據(jù)庫沒事那就沒人知道)

關于獲得載荷的方法:

可能有人會覺得奇怪,為什么不需要解密不需要verify就能夠獲取到載荷里的內(nèi)容呢?原因是,本來載荷就只是用Base64處理了,就沒有加密性,所以能直接獲取到它的值,但是至于可不可以相信這個值的真實性,就是要看能不能通過驗證了,因為最后的簽名部分是和前面頭部和載荷的內(nèi)容有關聯(lián)的,所以一旦簽名驗證過了,那就說明前面的載荷是沒有被改過的。

Controller層

登錄邏輯

/** * 用戶登錄 * @param userName * @param password * @param req * @return * @throws Exception */ @SneakyThrows @PostMapping(value = '/login') public AccountVO login(String userName, String password, HttpServletRequest req){ //嘗試登錄 Subject subject = SecurityUtils.getSubject(); try { subject.login(new UsernamePasswordToken(userName, password)); } catch (Exception e) { throw new LoginFailed(); } AccountVO account = accountService.getAccountByUserName(userName); String id = account.getId(); //生成jwtToken String jwtToken = JwtUtils.createToken(id, account.getRealName(),account.getUserName(), subject.getSession().getId().toString()); //設置好token,后來會在全局處理的時候放入響應里 req.setAttribute('token', jwtToken); return account; }

主要是:在登錄成功之后把這個Subject的SessionId放入JWT然后生成token:

String jwtToken = JwtUtils.createToken(id,account.getRealName(),account.getUserName(),subject.getSession().getId().toString());

以后我們就可以通過解析JWT來獲取SessionId了,而不是每次把SessionId作為Cookie返回

退出邏輯

首先,由于JWT令牌本身就會失效,所以如果JWT令牌失效,也就相當與退出了

然后我們還可以同樣實現(xiàn)Shiro中傳統(tǒng)的手動登出:

public String logout(HttpServletRequest req) { SecurityUtils.getSubject().logout(); return '用?粢丫?踩?淺?; }

這樣的話Realm中的用戶狀態(tài)就變成未認證了,就算JWT沒過期也需要重新登錄了

自定義SessionManager

先上代碼:

package com.imlehr.internship.shiroJwt;import com.imlehr.internship.exception.TokenUnavailable;import lombok.SneakyThrows;import org.apache.shiro.session.mgt.SessionKey;import org.apache.shiro.web.servlet.ShiroHttpServletRequest;import org.apache.shiro.web.session.mgt.DefaultWebSessionManager;import org.apache.shiro.web.util.WebUtils;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.Serializable;import java.util.UUID;/** * @author Lehr * @create: 2020-02-10 */public class CustomSessionManager extends DefaultWebSessionManager { //這里我為了省事用了lombok的標簽 @SneakyThrows @Override protected Serializable getSessionId(ServletRequest request, ServletResponse response) { String token = WebUtils.toHttp(request).getHeader('token'); System.out.println('會話管理器得到的token是:' + token); if (token == null || token.length()<1) { return UUID.randomUUID().toString(); } //在這里驗證一下jwt了,雖然我知道這樣不好 String userId = JwtUtils.getAudience(token); JwtUtils.verifyToken(token, userId); String sessionId = JwtUtils.getClaimByName(token, 'sessionId').asString(); if (sessionId == null) { return new TokenUnavailable(); }request.setAttribute(ShiroHttpServletRequest.REFERENCED_SESSION_ID_SOURCE, 'header'); request.setAttribute(ShiroHttpServletRequest.REFERENCED_SESSION_ID, token); request.setAttribute(ShiroHttpServletRequest.REFERENCED_SESSION_ID_IS_VALID, Boolean.TRUE); request.setAttribute(ShiroHttpServletRequest.SESSION_ID_URL_REWRITING_ENABLED, isSessionIdUrlRewritingEnabled()); return sessionId; }}

之前的Session的獲取,就是在DefaultWebSessionManager里實現(xiàn)的,所以我們現(xiàn)在只需要重寫這個類,把我們?nèi)绾潍@取Session的邏輯寫進去就好了

這里說兩個方法:

getSessionId(SessionKey key)

這個方法是在DefaultWebSessionManager的,這里并沒有重寫,我們上面重寫的是后面第二個同名方法,只是想在這里談談,讀者可以直接跳過這段也不影響

源碼邏輯

在Shiro想要獲取SessionId的時候,首先會調(diào)用的就是這個方法,而不是那個傳入httpRequest的方法

在DefaultWebSessionManager中,他是這樣做的

@Overridepublic Serializable getSessionId(SessionKey key) { Serializable id = super.getSessionId(key); if (id == null && WebUtils.isWeb(key)) { ServletRequest request = WebUtils.getRequest(key); ServletResponse response = WebUtils.getResponse(key); //調(diào)用第二個同名方法 id = getSessionId(request, response); } return id;} 如果沒能找到id,就調(diào)用第二個同名方法 如果有,就返回

這里需要注意的是,這個方法會在整個驗證過程中多次被反復調(diào)用,而在服務器接受到用戶請求的時候,只會調(diào)用一次的方法是下面這個,也就是我們重寫的這個

getSessionId(ServletRequest request, ServletResponse response)

這個才是真正涉及到服務器接受到請求的時候獲取Session邏輯,從用戶的請求報文中獲取SessionId

所以我們要重寫的就是這一步

原版中的邏輯是:從Cookie里找到sessionId的值

我們只需要把邏輯該為:從Header中找出JWT(也就是從請求頭的’token’頭中找),然后解析JWT,獲取到我們存放在其中的SessionId屬性即可

ShiroConfiguration

我們只需要把自己寫的SessionManager配置進去就好了

首先配好:

public DefaultWebSessionManager sessionManager(){ CustomSessionManager customSessionManager = new CustomSessionManager(); return customSessionManager;}

然后放入SecurityManager

public SecurityManager securityManager(MyRealm myRealm) { DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); securityManager.setRealm(myRealm); return securityManager;}

完成🎉

測試登錄

Springboot實現(xiàn)Shiro整合JWT的示例代碼

我們獲取到了JWT,JWT里面就帶有SessionId

后續(xù)請求不帶token

Springboot實現(xiàn)Shiro整合JWT的示例代碼

顯然,沒過認證,我們看下后臺:

Springboot實現(xiàn)Shiro整合JWT的示例代碼

因為不能獲得token所以無法得到該用戶對應的sessionId,所以被授權攔截了

后面那個JSESSIONID是因為沒得到sessionId新生成的,所以對應了一個沒有登錄的用戶,自然就會被拒絕

只有帶上之前的token,shiro才會認為我們是之前那個已經(jīng)登錄過的用戶

后續(xù)請求帶token

Springboot實現(xiàn)Shiro整合JWT的示例代碼

后臺:

Springboot實現(xiàn)Shiro整合JWT的示例代碼

成功!

另外,因為JWT本身就適合RESTful API服務,所以,如果把Shiro和Redis整合起來做成分布式的,那么效果會更好

到此這篇關于Springboot實現(xiàn)Shiro整合JWT的示例代碼的文章就介紹到這了,更多相關Springboot Shiro整合JWT內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持好吧啦網(wǎng)!

標簽: Spring
相關文章:
主站蜘蛛池模板: 狠狠躁夜夜躁人人爽视频 | 久久999免费视频 | 一级片| 久久九九这里只有精品 | www.99热这里只有精品 | 欧产日产国产一区 | 九九热这里只有 | 国产在线精品一区二区三区 | 草草视频网站 | 福利视频网站 | 欧美一区二区成人 | 三级黄色在线视频 | 羞羞的视频在线免费观看 | 亚洲视频综合 | 国产激情免费 | 久久精彩视频 | 久久久久久麻豆 | 超碰在线播| 无毒黄网 | 日韩中文字幕在线视频 | 国产精品久久久久久久粉嫩 | 日韩亚洲欧美综合 | www日本在线| 午夜无码国产理论在线 | 天堂资源网 | 国产剧情一区二区三区 | 最新av片| 在线亚洲一区 | 亚洲精品乱码久久久久久久久 | 国产拍拍视频 | 欧美亚洲性视频 | 中文字幕在线免费看 | 国内精品久久久久国产 | 日韩视频精品在线 | 久久久久国产一级毛片 | 蜜臀91精品国产高清在线观看 | 日日操av | 久久草草影视免费网 | 国产资源视频在线观看 | 99国产精品99久久久久久 | 国产精品一区人伦免视频播放 | 国产精品久久综合 | 日本69视频 | 午夜午夜精品一区二区三区文 | 一级黄色片美国 | 91大片 | av网站观看 | 成人精品免费视频 | 午夜精品久久久久 | 日韩亚洲视频 | 欧美成人激情 | 色爱区综合| 在线视频91 | 色综久久| 久久99精品久久久久久园产越南 | 成人在线播放 | 特黄特黄a级毛片免费专区 av网站免费在线观看 | 亚洲 欧美 日韩在线 | 国产精品一二三区 | 国产欧美一区二区视频 | 亚洲国产精品99久久久久久久久 | 免费看a | 日本黄色大片免费观看 | 成人免费在线观看视频 | 国产精品99一区二区三区 | 操操操影院 | 国产综合精品 | 偷拍呻吟高潮91 | 久久久久综合狠狠综合日本高清 | 日韩精品一区二区三区四区五区 | 精品一区二区三区三区 | 久久久久av | 免费观看黄色一级大片 | 亚洲精品国产第一综合99久久 | 久久av综合网 | 黄色成人在线网站 | 日本在线观看 | 欧美视频在线播放 | 欧美性一区二区三区 | 国产一区影院 | 精品久久香蕉国产线看观看亚洲 | 久久久国产精品入口麻豆 | 国产区视频在线观看 | 伊人免费观看视频 | 亚洲成人一区二区 | 欧美视频精品在线 | 99热在线播放 | 久久免费精品视频 | 呦呦在线观看 | 日韩亚洲视频 | 麻豆freexxxx性91精品 | 久久福利| 欧美精品一区在线发布 | 一区二区三区精品视频 | 成人免费视频观看视频 | 国产激情偷乱视频一区二区三区 | 国产女人高潮视频在线观看 | 日韩国产一区二区三区 | 一区二区三区视频免费看 | 亚洲精品一区二区三区四区高清 | 日韩在线免费观看网站 | 久久中文网 | 亚洲成熟少妇视频在线观看 | 欧美成人精品一区 | 国产精品久久久久久久7电影 | 国产成人午夜视频 | 欧美国产一区二区三区 | 日韩精品一区二区三区中文在线 | 欧美日韩精品一区二区在线播放 | 国产一区二区三区视频 | 91破解版在线 | 亚洲 | 免费一区二区 | 精品欧美激情在线观看 | 久草在线资源福利站 | 欧美1区| 一区二区三区亚洲 | 久久久久亚洲精品 | 中文字幕国产 | 中文字幕亚洲一区 | 九色91在线 | 日韩电影免费在线观看中文字幕 | 日韩在线资源 | 国产精品永久免费 | 免费特级黄毛片 | 三级黄色片在线免费观看 | 成年无码av片在线 | 精品久久久久久久久久久下田 | 日韩中文字幕一区二区高清99 | 欧美精品一区二区蜜臀亚洲 | 欧美福利在线观看 | 在线精品亚洲欧美日韩国产 | 国产精品毛片 | 操操操操操操 | 国产91网址 | 国产高清在线精品一区 | 玖玖国产精品视频 | 久色成人| 国产精品一品二区三区的使用体验 | 欧美午夜视频在线观看 | 91精品一区二区三区久久久久久 | 国产在线小视频 | jizzjizz亚洲中国少妇 | 狠狠搞狠狠操 | 午夜免费视频网站 | 欧美日韩a | 美女毛片免费看 | 久久久av| 欧美一区二区三区在线观看 | 欧美日韩在线免费观看 | 成人欧美一区二区三区在线播放 | 精品无码久久久久国产 | 91精品国产综合久久久久久丝袜 | 黄色在线免费观看 | av国产精品 | 欧美国产综合 | 日本天天色 | 干干干操操操 | 欧美日韩亚洲视频 | 精品国产乱码久久久久久久软件 | 日韩中字在线观看 | 中文字幕天堂在线 | 色婷婷综合在线 | 2019亚洲日韩新视频 | 欧美久久综合 | 91嫩草在线 | 成年免费视频 | 国产精品大片在线观看 | 可以免费在线观看av的网站 | 精品亚洲一区二区三区 | 99国产精品99久久久久久 | 天天操综合网 | 91精品国产欧美一区二区 | 色婷婷在线视频 | 日韩高清中文字幕 | 国产精品久久久久久久久污网站 | 日本三级一区二区 | 国产成人啪精品午夜在线观看 | 95香蕉视频 | 色先锋av资源中文字幕 | 国产精品久久久久久亚洲调教 | 一区二区在线看 | 精品日韩欧美一区二区三区 | 91.com在线观看 | 亚洲精品日韩激情在线电影 | 亚洲一区二区三区四区在线 | 另类综合在线 | 4hu网站| 一区二区三区国产 | 日韩欧美三级 | 国产精品一区二区三区四区 | 九色在线观看 | 日韩视频在线免费 | 啪啪tv网站免费入口 | 久在线观看 | 久久久久国产一区二区三区四区 | 日韩在线成人 | 亚洲成人精品影视 | 女人爽到高潮aaaa电影 | 成人av观看 | 日韩日日夜夜 | 羞羞视频免费观看入口 | 国产精品一区二区三区在线播放 | 成人一区二区在线 | 欧美成人激情视频 | 99久久婷婷国产综合精品 | 欧美日韩综合在线 | www.99热| 亚洲精品免费在线观看 | 日穴视频在线观看 | 欧美一区二区三区aa大片漫 | av网址在线播放 | 亚洲精品久久久久国产 | 中文字幕在线精品 | 日韩在线精品 | 国产精品久久久久久久久久99 | 小情侣高清国产在线播放 | 天天看天天操 | 久草视| 亚洲成人av在线 | 国产视频第一页 | 欧美一级片在线观看 | 色婷婷综合久久 | 不卡在线一区 | 嫩草影院在线观看91麻豆 | 成人亚洲免费视频 | 成人免费淫片aa视频免费 | 少妇无套高潮一二三区 | 日本不卡视频 | 高清一区二区三区 | 九色91在线 | 亚洲国产精品99久久久久久久久 | 羞羞视频免费网站 | 国产一区在线视频 | 精品一区二区三区四区五区 | 黄色大片视频网站 | 人妖天堂狠狠ts人妖天堂狠狠 | 亚洲风情在线观看 | 亚洲一二三区电影 | 国产亚洲一区二区三区在线观看 | 国产日韩免费视频 | 91在线视频播放 | 亚洲第一成人在线视频 | 日韩精品免费 | 视频成人免费 | 欧美久久成人 | 特黄特色大片免费视频观看 | 国产免费一区 | 国产亚洲欧美一区二区三区 | 精品午夜久久久 | 欧美日韩不卡合集视频 | 国产精品久久久久久无遮挡 | 性色视频在线观看 | 亚洲一区二区中文字幕 | 免费一级 国产 | 一a级毛片 | 伊人免费网 | 亚洲午夜精品a | 久久免费精品 | 久久精品一 | 国产精品乱码一二三区的特点 | 欧美成年黄网站色视频 | 精品成人一区 | 成年人在线看 | 91 久久| 国产高清在线精品一区 | 精品久久久久久国产 | 黄色av毛片 | 成人精品| 一区二区精品视频 | av中文字幕在线播放 | 日韩高清国产一区在线 | 亚洲成人av在线 | 日本精品一区二区三区视频 | 久久成人国产精品 | 中文字幕二区三区 | 久久这里只有精品免费 | 日韩成人在线影院 | av网站观看 | 欧美与黑人午夜性猛交久久久 | 色偷偷888欧美精品久久久 | 久久综合爱 | 在线免费视频成人 | 日日操综合| 亚洲国产aⅴ成人精品无吗 国产精品永久在线观看 | 在线免费一级片 | 国产极品视频在线观看 | 久久成人一区 | 午夜精品一区二区三区在线视频 | 国产精品1| 日日做夜夜爱 | 毛片免费视频 | 欧美日韩精品久久久久 | 国产精品国产精品国产专区不卡 | 亚洲精品久久 | 欧美日韩在线播放 | 成人在线观看免费视频 | 亚洲va欧美va天堂v国产综合 | 婷婷综合网 | 亚洲一区av在线 | 亚洲少妇视频 | 国产一区二区三区视频 | 国产精品亚洲一区二区三区在线 | 国产一区久久久 | 91视频在线观看 | 亚洲久悠悠色悠在线播放 | 国产综合视频在线播放 | 国产中文在线 | 久久精品高清 | 国产精品日本一区二区不卡视频 | 亚洲自拍偷拍欧美 | 国产福利91精品一区二区 | 成av在线 | 欧美精三区欧美精三区 | 狠狠久久综合 | 夜夜av | 国产精品久久久久久久久软件 | 黄色a级 | 男人的天堂一级片 | 日本男人的天堂 | 中文字幕日韩一区二区不卡 | 性色视频在线观看 | 天天射影院 | 中文字幕一区在线观看视频 | 国产精品久久久久久福利一牛影视 | 成人在线视频免费观看 | 国产精品2区 | 成人午夜免费视频 | 亚洲高清免费 | 国产精品久久 | 亚洲精品一区二区三区蜜桃久 | 成人不卡视频 | 国产综合精品一区二区三区 | 欧美日韩在线免费观看 | 国产精品11| 99这里只有精品视频 | 国产精品久久久久久久浪潮网站 | 天天摸夜夜摸爽爽狠狠婷婷97 | 亚洲综合区 | 欧美日韩国产一区二区三区 | 久久久久久成人 | 欧美久久影视 | 日韩在线播放一区二区 | 91亚洲一区 | 九色国产 | 91精品国产综合久久久久久 | 欧美久久久 | 精品国产91 | 一区免费看 | 久久精品国产一区二区电影 | 33eee在线视频免费观看 | 国产免费看 | 亚洲一区二区三区四区五区午夜 | 一区二区三区四区国产 | 国产一区精品视频 | 在线观看成人小视频 | 亚洲成人免费在线 | 久久mm| 久久香蕉国产视频 | 涩涩视频在线观看 | 久久天堂av综合合色蜜桃网 | 亚洲国产精品久久 | 九九色影院 | 日韩欧美在线观看视频 | 天天夜夜操 | 国产精精品 | 精品亚洲永久免费精品 | 精品一区二区三区四区五区 | 国产剧情一区二区 | 中文字幕国产 | 亚洲性人人天天夜夜摸 | 国产精品国产精品国产专区不卡 | 一区二区国产精品 | 黄色成人在线 | 成人精品鲁一区一区二区 | 国产高清久久久 | 亚洲精品在线成人 | 91在线免费观看 | 久久久久久91香蕉国产 | 亚洲黄色免费观看 | 一区二区三区在线观看免费 | 成人精品 | 无毒黄网 | 少妇精品视频在线观看 | 国产一区二区精品在线 | 国产成人精品一区二 | 鲁一鲁影院| 国产亚洲二区 | 中文字幕精品一区久久久久 | 国产高清视频一区二区 | 久久99国产精品久久99大师 | 成人深夜在线观看 | 欧美在线视频一区二区 | 97精品国产97久久久久久免费 | 久久这里精品 | 色8久久 | 成人在线观看免费视频 | www.国产精品 | 久久久国产一区二区 | 欧美日韩一区二区三区四区 | 久久99精品视频 | 97国产一区二区精品久久呦 | aaa天堂 | 亚洲精品一区二区三区在线 | av高清在线免费观看 | 亚洲精品乱码久久久久久不卡 | 日韩精品免费看 | 综合婷婷| 日本一区二区不卡 | 精品久久久久久久久久久久 | 麻豆精品久久久 | 亚洲精品久久久久国产 | 最近日韩中文字幕 | 欧美性猛交一区二区三区精品 | 中文字幕av一区二区三区 | 国产女人和拘做受视频 | 亚洲欧美中文日韩在线v日本 | 亚洲激情视频 | 中文字幕在线观看免费 | 国产三级久久久久 | 久久综合狠狠综合久久 | 视频一区 中文字幕 | 国产福利在线免费 | 成人羞羞网站 | 99国产精品久久久久久久 | 成人精品一区二区 | 天天夜操| 91亚洲免费视频 | 国内福利视频 | 激情婷婷| 超碰导航 | 久久精品毛片 | 亚洲成人av| 国产精品无码永久免费888 | 国产目拍亚洲精品99久久精品 | 夜夜天天操 | 欧美韩日 | 农村末发育av片四区五区 | www.91在线| www.亚洲 | 久久51| 在线 丝袜 欧美 日韩 制服 | 九九九视频精品 | 国产成人精品一区二区三区视频 | 亚洲男人天堂网 | 久久久久久成人精品 | 草久在线视频 | 精品久久久久久久久久久久久久 | 亚洲国产精品第一区二区 | 亚洲国产精品久久久久秋霞不卡 | 日本淫视频 | 久久久av| 亚洲一区久久 | 精品一区二区久久久久久久网站 | 1区2区3区视频 | 久久手机视频 | 欧美日韩三区 | 99re在线观看视频 | 欧美日本韩国一区二区三区 | 久久精品国产99国产精品 | 免费在线h | 91国内精品久久 | 一区二区三区影院 | 亚洲一区二区三区中文字幕 | 天天综合天天色 | 一区二区三区四区不卡视频 | 伊人干| 精品国产欧美一区二区三区不卡 | 亚洲综合无码一区二区 | 99看片| 色综合99 | 精品一区二区三区久久 | 国产大胆自拍 | 精品久| 人人干在线 | 成人在线视频网站 | 最新国产在线视频 | 99精品欧美一区二区蜜桃免费 | 色香蕉在线 | 日韩成人一级片 | 91视频国产网站 | 黄色av网站免费 | 亚洲精品在线免费看 | 羞羞的视频在线免费观看 | jlzzjlzz亚洲日本少妇 | 99热这里有精品 | 亚洲成人一区二区三区 | 久久久久久久久久影院 | 国产裸体bbb视频 | 美女一区二区三区四区 | 国产精品毛片一区二区在线看 | 天堂免费在线观看视频 | 99国产精品| 久草国产视频 | 亚洲每日更新 | 色噜噜视频在线观看 | 中文字幕一区日韩精品欧美 | 亚洲精品9999 | 久热精品在线视频 | 三级无遮挡污在线观看 | 天天操天天插天天干 | 亚洲第一天堂无码专区 | 国产91一区 | 成人午夜精品一区二区三区 | 久久久精品一区二区 | 日韩日韩日韩日韩日韩日韩 | 成人在线国产 | 永久免费精品视频 | 欧美日韩中文字幕在线 | 精久久久 | 午夜视频在线观看网站 | 免费看国产一级片 | 日韩久久久久 | 欧美 日韩 国产 成人 在线 | 国产色视频网站 | 毛片免费在线观看 | 国产在线一级片 | 综合视频一区二区三区 | 久久久久久一区 | 午夜剧 | www.国产欧美 | 91日日夜夜 | 国产精品影院在线观看 | 精品国产乱码久久久久久闺蜜 | 亚洲精品国品乱码久久久久 | 国产伦精品一区二区三区在线 | 中文字幕一区二区三区四区 | 亚洲欧美一区二区三区久久 | 亚洲香蕉在线观看 | 久久久久亚洲美女啪啪 | 日韩高清一区 | 亚洲视频免费网站 | 国产精品视频一区二区三区不卡 | 久久99精品久久久久久 | 精国产品一区二区三区四季综 | 日韩在线视频网站 | 国产91网址 | 国产男人天堂 | 精品亚洲一区二区三区四区五区 | 久久成人18免费网站 | 天天躁日日躁狠狠躁av麻豆 | 中文字幕一区二区三区乱码图片 | 欧美视频综合 | 亚洲精品久久久久久下一站 | 欧美一级欧美三级在线观看 | 在线观看亚洲一区二区三区 | 亚洲综合影院 | 三级网站视频 | 色吊丝2288sds中文字幕 | 亚洲tv国产 | 欧美一级视频在线观看 | www在线视频 | 国产日韩免费 | 七龙珠z普通话国语版在线观看 | 亚洲国产精品综合久久久 | 国产一极片 | 久久在线播放 | 久久精品国产99国产精品 | 久久女人精品 | 日产欧产va高清 | 亚洲国产成人精品女人久久久 | 国产97在线播放 | 一区二区三区国产 | 亚洲高清中文字幕 | 91久久夜色精品国产网站 | 久久久国产视频 | 五月天婷婷在线视频 | 懂色一区二区三区免费观看 | 一区久久| 亚洲视频在线观看 | 欧洲av在线 | a视频在线观看 | 最近最新中文字幕 | 7799精品视频| 天天精品在线 | segui88久久综合9999 | 久久久久国产一区 | 亚洲一区二区视频在线播放 | 中文字幕在线观看 | 看亚洲a级一级毛片 | 欧美一区久久 | 国产一区| 奇米影视77 | 69久久久 | 欧美视频三区 | 在线观看视频一区二区三区 | 激情久久av一区av二区av三区 | 国产视频二 | 国产激情在线观看视频 | 国产精品69久久久久水密桃 | 免费观看黄色大片 | 99爱免费观看国语 | 国产精品久久久久久久午夜 | 波多野结衣在线网址 | 久久中文字幕一区 | 日韩精品 | 国产精品女人视频 | 亚洲精品综合在线 | 在线视频二区 | 午夜视频在线观看网站 | 国产91看片 | 国产成人片 | 国产精品久久久久久久久久新婚 | 成人在线观看免费视频 | 国产精品视频一区二区三区不卡 | 国产精品极品美女在线观看免费 | 97精品超碰一区二区三区 | 国产成人精品综合 | a级三四级黄大片 | 久久久久国产一级毛片高清版小说 | 久久51| 最新中文字幕久久 | 亚洲欧美一区二区三区在线 | 日韩1| 毛片毛片毛片毛片毛片毛片 | 久久蜜桃av |