日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满av-国产精品中文字幕免费观看-亚洲成人久久一区二区三区-国内少妇偷人精品视频无缓冲-一区二区国产精品日本一区二区三区在线网

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營的一線實(shí)戰(zhàn)洞察。

JWT與Spring Security:系統(tǒng)間信任建立與鑒權(quán)實(shí)戰(zhàn)

JWT與Spring Security:系統(tǒng)間信任建立與鑒權(quán)實(shí)戰(zhàn) “trust me”這句話放在人和人之間是情感表達(dá)放在系統(tǒng)與系統(tǒng)之間就是一道道需要被驗(yàn)證的技術(shù)關(guān)卡。前端跟后端說“我是登錄用戶”網(wǎng)關(guān)跟業(yè)務(wù)服務(wù)說“這個(gè)請(qǐng)求已經(jīng)校驗(yàn)過了”服務(wù) A 跟服務(wù) B 說“我代表某個(gè)用戶在操作”——每一句“請(qǐng)相信我”背后都必須有一個(gè)可驗(yàn)證的憑證否則整條鏈路就是裸奔。本文圍繞系統(tǒng)間信任關(guān)系的建立與驗(yàn)證展開從認(rèn)證和授權(quán)這兩個(gè)容易混淆的概念講起逐步拆解 JWT 憑證的結(jié)構(gòu)、簽名算法、Spring Security 過濾器鏈的執(zhí)行順序最后落到一套可以跑起來的完整代碼登錄簽發(fā) Token、請(qǐng)求攜帶 Token、服務(wù)端校驗(yàn) Token、微服務(wù)之間透?jìng)餍湃?。適合有 Java/Spring 基礎(chǔ)、正在做登錄鑒權(quán)模塊或微服務(wù)改造的開發(fā)者閱讀也適合剛開始接觸 Spring Security 的同學(xué)按步驟動(dòng)手。文中代碼都標(biāo)注了文件路徑可以直接復(fù)制到項(xiàng)目里跑通。1. 從 “trust me” 說起系統(tǒng)信任關(guān)系的本質(zhì)1.1 認(rèn)證與授權(quán)兩個(gè)最容易被混用的概念很多項(xiàng)目代碼里到處都是auth這個(gè)詞但認(rèn)證Authentication和授權(quán)Authorization解決的是兩個(gè)完全不同的問題。認(rèn)證回答的是“你是誰”它關(guān)心身份的真實(shí)性比如用戶提交用戶名和密碼服務(wù)端確認(rèn)這個(gè)身份確實(shí)存在且憑證匹配。授權(quán)回答的是“你能做什么”它發(fā)生在認(rèn)證之后關(guān)心權(quán)限邊界比如這個(gè)用戶是普通員工還是管理員能不能刪除訂單。為什么一定要把這兩者拆開理解因?yàn)樗鼈兊氖√幚矸绞酵耆煌UJ(rèn)證失敗是“我不認(rèn)識(shí)你”通常返回 401 未授權(quán)狀態(tài)碼前端應(yīng)該跳轉(zhuǎn)登錄頁授權(quán)失敗是“我認(rèn)識(shí)你但你不能這么做”返回 403 禁止訪問前端應(yīng)該提示無權(quán)操作。如果代碼里把兩者揉在一起就會(huì)出現(xiàn)“權(quán)限不足卻把用戶踢回登錄頁”這種體驗(yàn)很差的交互排查問題時(shí)也很難區(qū)分到底是憑證無效還是權(quán)限不夠。在實(shí)際項(xiàng)目里我建議把認(rèn)證和授權(quán)放在兩套代碼里分別處理認(rèn)證交給過濾器Filter在請(qǐng)求進(jìn)入業(yè)務(wù)邏輯之前完成授權(quán)交給方法注解或路徑規(guī)則在業(yè)務(wù)層完成。這樣責(zé)任清晰日志也好打。1.2 信任鏈一次請(qǐng)求究竟經(jīng)過幾道關(guān)卡用戶點(diǎn)擊一次“查看我的訂單”這個(gè)請(qǐng)求在到達(dá)業(yè)務(wù)代碼之前其實(shí)要走過一條信任鏈。第一關(guān)是入口層可能由網(wǎng)關(guān)做初步的 Token 解析和格式校驗(yàn)第二關(guān)是應(yīng)用的過濾器鏈校驗(yàn)簽名、有效期、簽發(fā)方第三關(guān)是方法級(jí)的權(quán)限判斷確認(rèn)當(dāng)前身份是否有order:read權(quán)限第四關(guān)是數(shù)據(jù)層確認(rèn)這條數(shù)據(jù)確實(shí)屬于當(dāng)前用戶防止越權(quán)訪問這個(gè)叫水平越權(quán)是很多線上事故的源頭。這條鏈上任何一關(guān)被跳過整條鏈路就不再可信。這也是為什么“前端隱藏了按鈕”永遠(yuǎn)不能算作權(quán)限控制——請(qǐng)求可以直接用工具構(gòu)造繞過所有前端邏輯。理解信任鏈的意義在于你需要在設(shè)計(jì)階段就想清楚每一關(guān)校驗(yàn)什么、失敗后怎么響應(yīng)、日志記錄哪些字段。否則等接口上線之后再來補(bǔ)往往會(huì)出現(xiàn)“同一個(gè) Token 在網(wǎng)關(guān)能過、在業(yè)務(wù)服務(wù)過不了”這類讓人抓狂的不一致問題。1.3 為什么用 Token 承載信任而不是 Session傳統(tǒng)的 Session 方案是服務(wù)端保存會(huì)話狀態(tài)客戶端只拿一個(gè)無意義的 SessionId。這個(gè)方案在單機(jī)應(yīng)用里非常成熟但到了多實(shí)例部署就有了麻煩會(huì)話數(shù)據(jù)要么共享存儲(chǔ)引入 Redis 依賴要么做粘性會(huì)話負(fù)載均衡變得不靈活。Token 方案反過來把會(huì)話狀態(tài)編碼進(jìn)憑證本身服務(wù)端只負(fù)責(zé)校驗(yàn)簽名不需要保存任何狀態(tài)。這帶來了兩個(gè)直接好處水平擴(kuò)展變得簡單任意實(shí)例都能獨(dú)立完成校驗(yàn)跨服務(wù)傳遞變得自然服務(wù) A 拿到 Token 可以直接交給服務(wù) B。但代價(jià)同樣明顯Token 一旦簽發(fā)在有效期內(nèi)就是有效的服務(wù)端無法“主動(dòng)撤銷”單個(gè) Token。所以必須配合較短的有效期和刷新機(jī)制關(guān)鍵操作還要額外校驗(yàn)。這一點(diǎn)在后面講最佳實(shí)踐時(shí)會(huì)重點(diǎn)展開。2. 環(huán)境準(zhǔn)備與項(xiàng)目結(jié)構(gòu)2.1 技術(shù)棧與版本說明本文示例基于 Spring Boot 3.x Spring Security 6.x JDK 17 編寫。這個(gè)組合是目前新項(xiàng)目比較常見的選擇其中 Spring Security 6 相比 5.x 有較大變化最典型的是WebSecurityConfigurerAdapter被移除改為聲明SecurityFilterChainBean 的方式進(jìn)行配置方法鏈?zhǔn)秸{(diào)用也做了調(diào)整。需要特別說明的是不同版本之間 API 差異較大請(qǐng)按你項(xiàng)目的實(shí)際版本調(diào)整本文示例。如果你還在 Spring Boot 2.7 及以下版本配置寫法需要用WebSecurityConfigurerAdapter繼承方式或者用SecurityFilterChain但換用authorizeRequests()而不是authorizeHttpRequests()。JWT 庫方面本文使用jjwt0.12.x 版本它在 0.11.x 的基礎(chǔ)上重命名了大量方法setSubject改為subject、parserBuilder改為parser等如果你的工程里是舊版本編譯時(shí)方法找不到基本都是這個(gè)原因。其他環(huán)境要求JDK 17 及以上Spring Boot 3 強(qiáng)制要求構(gòu)建工具 Maven 3.8 或 Gradle 7.5IDE 用 IntelliJ IDEA 或 VS Code 都可以接口調(diào)試用 Postman 或 curl 命令。2.2 依賴引入新建一個(gè) Spring Boot 工程在pom.xml中引入下面幾項(xiàng)依賴。注意jjwt需要同時(shí)引入 api、impl、jackson 三個(gè)坐標(biāo)只引 api 會(huì)在運(yùn)行時(shí)找不到序列化實(shí)現(xiàn)。!-- 文件路徑pom.xml -- dependencies !-- Web 基礎(chǔ)能力提供內(nèi)嵌容器與 MVC 支持 -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency !-- 安全框架提供過濾器鏈、密碼加密、權(quán)限注解 -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-security/artifactId /dependency !-- JWT 核心 API用于構(gòu)建和解析 Token -- dependency groupIdio.jsonwebtoken/groupId artifactIdjjwt-api/artifactId version0.12.5/version /dependency dependency groupIdio.jsonwebtoken/groupId artifactIdjjwt-impl/artifactId version0.12.5/version scoperuntime/scope /dependency dependency groupIdio.jsonwebtoken/groupId artifactIdjjwt-jackson/artifactId version0.12.5/version scoperuntime/scope /dependency !-- 參數(shù)校驗(yàn)登錄接口用得上 -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-validation/artifactId /dependency /dependencies版本號(hào)如果和你項(xiàng)目其他依賴有沖突可以用dependencyManagement統(tǒng)一管理避免出現(xiàn)NoClassDefFoundError這類穿透到運(yùn)行期才暴露的問題。2.3 項(xiàng)目目錄結(jié)構(gòu)為了避免后面代碼貼出來找不到位置先把整體結(jié)構(gòu)列清楚。包名你可以按自己公司規(guī)范調(diào)整本文示例統(tǒng)一用com.example.trust。src/main/java/com/example/trust ├── TrustApplication.java // 啟動(dòng)類 ├── config │ ├── SecurityConfig.java // 過濾器鏈配置 │ └── JwtProperties.java // 密鑰與有效期配置綁定 ├── controller │ ├── AuthController.java // 登錄接口 │ └── OrderController.java // 受保護(hù)的示例業(yè)務(wù)接口 ├── filter │ └── JwtAuthenticationFilter.java // Token 校驗(yàn)過濾器 ├── service │ ├── JwtService.java // Token 簽發(fā)與解析 │ └── UserService.java // 用戶查詢示例內(nèi)存實(shí)現(xiàn) └── model ├── LoginRequest.java // 登錄入?yún)?└── LoginResponse.java // 登錄返回 src/main/resources └── application.yml // 密鑰、過期時(shí)間等配置這個(gè)結(jié)構(gòu)刻意把“簽發(fā)/解析能力”抽成JwtService“校驗(yàn)時(shí)機(jī)”放進(jìn)過濾器“權(quán)限規(guī)則”放進(jìn)配置類三個(gè)關(guān)注點(diǎn)分離。后面如果要做密鑰輪換或者多簽發(fā)方支持只需要改動(dòng)JwtService其他代碼不受影響。3. JWT 與信任憑證的核心原理3.1 三段式結(jié)構(gòu)它到底存了什么JWTJSON Web Token是一個(gè)用點(diǎn)號(hào)分隔的三段字符串形如xxxxx.yyyyy.zzzzz。三段分別是 Header、Payload 和 Signature每一段都是 Base64URL 編碼。Header 描述簽名算法和類型通常是{alg:HS256,typ:JWT}。Payload 存放聲明Claims分為標(biāo)準(zhǔn)聲明和自定義聲明標(biāo)準(zhǔn)的有sub主體通常是用戶標(biāo)識(shí)、iat簽發(fā)時(shí)間、exp過期時(shí)間、iss簽發(fā)方自定義的可以放用戶角色、租戶 ID 等業(yè)務(wù)信息。Signature 是對(duì)前兩段內(nèi)容的簽名用于防篡改。這里有一個(gè)新手最常見的誤區(qū)JWT 的 Payload 只是 Base64 編碼不是加密。任何人拿到 Token隨便找個(gè)在線工具就能解出里面的內(nèi)容。所以絕對(duì)不要往 Payload 里塞手機(jī)號(hào)、身份證號(hào)、密碼這類敏感信息。Token 能保證的是“沒被改過”而不是“別人看不到”。另一個(gè)常見誤區(qū)是把角色、權(quán)限全部塞進(jìn) Token導(dǎo)致 Token 體積巨大每次請(qǐng)求都要帶上幾百字節(jié)甚至上 KB 的頭部。更麻煩的是權(quán)限變更后舊 Token 里的權(quán)限還是舊的必須等它過期才生效。我的建議是 Token 里只放最少量的標(biāo)識(shí)用戶 ID、租戶 ID權(quán)限實(shí)時(shí)從緩存或數(shù)據(jù)庫查。3.2 簽名算法與密鑰長度本文使用的是 HMAC-SHA256HS256對(duì)稱加密簽發(fā)和校驗(yàn)用同一個(gè)密鑰。它的優(yōu)點(diǎn)是性能好、實(shí)現(xiàn)簡單缺點(diǎn)是所有校驗(yàn)方都持有密鑰等于所有校驗(yàn)方都能簽發(fā)。如果你的系統(tǒng)里調(diào)用方很多、安全邊界復(fù)雜應(yīng)該考慮 RS256 這種非對(duì)稱算法私鑰簽發(fā)、公鑰校驗(yàn)校驗(yàn)方拿不到簽發(fā)能力。密鑰長度是一個(gè)必須重視的點(diǎn)。Keys.hmacShaKeyFor()對(duì)密鑰有最小長度要求HS256 要求至少 256 位32 字節(jié)。如果你圖省事寫一句secret運(yùn)行時(shí)就會(huì)拋WeakKeyException。這不是框架在刁難你而是短密鑰確實(shí)容易被暴力破解。密鑰的管理方式更需要強(qiáng)調(diào)絕對(duì)不能硬編碼在代碼里提交到倉庫。正確做法是通過環(huán)境變量、配置中心或密鑰管理服務(wù)注入并且區(qū)分環(huán)境。生產(chǎn)密鑰一旦泄露攻擊者可以偽造任意用戶的 Token這是最高級(jí)別的安全事故。所以下面示例里我會(huì)通過application.yml占位符 環(huán)境變量注入的方式來寫同時(shí)提醒你在生產(chǎn)環(huán)境做替換。3.3 Spring Security 過濾器鏈的執(zhí)行順序Spring Security 的核心是一條過濾器鏈請(qǐng)求按順序穿過這些過濾器每個(gè)過濾器負(fù)責(zé)一類事情。跟本文相關(guān)的關(guān)鍵是認(rèn)證過濾器要在UsernamePasswordAuthenticationFilter之前執(zhí)行這樣自定義的 Token 校驗(yàn)才能在默認(rèn)表單登錄邏輯之前接管請(qǐng)求。請(qǐng)求進(jìn)來后的處理順序大致是這樣的SecurityContextHolderFilter負(fù)責(zé)清理和加載安全上下文。我們的JwtAuthenticationFilter解析請(qǐng)求頭校驗(yàn) Token把身份信息寫入SecurityContext。AuthorizationFilter根據(jù)配置的路徑規(guī)則判斷當(dāng)前身份是否有權(quán)訪問。進(jìn)入 DispatcherServlet執(zhí)行 Controller 邏輯。這個(gè)順序解釋了為什么很多同學(xué)遇到“明明 Token 是對(duì)的接口還是返回 401”——如果你的過濾器加在了錯(cuò)誤的位置比如加在AuthorizationFilter之后那么權(quán)限判斷的時(shí)候SecurityContext還是空的自然判定為未認(rèn)證。還有一個(gè)隱含細(xì)節(jié)SecurityContext默認(rèn)是基于 ThreadLocal 的一次請(qǐng)求一個(gè)線程所以過濾器里寫入的身份信息在 Controller 里能讀到。但如果你在業(yè)務(wù)代碼里開了新線程做異步處理是讀不到這個(gè)上下文的需要手動(dòng)傳遞。4. 完整實(shí)戰(zhàn)從登錄到校驗(yàn)的閉環(huán)4.1 配置項(xiàng)與屬性綁定先在application.yml中定義 JWT 相關(guān)配置。注意${JWT_SECRET:...}這種寫法表示優(yōu)先讀環(huán)境變量讀不到再用默認(rèn)值方便本地開發(fā)。# 文件路徑src/main/resources/application.yml server: port: 8080 jwt: # 生產(chǎn)環(huán)境請(qǐng)通過環(huán)境變量 JWT_SECRET 注入不要提交到倉庫 secret: ${JWT_SECRET:local-dev-only-secret-key-please-change-32bytes} # 訪問令牌有效期單位秒示例為 30 分鐘 expire-seconds: 1800 # 簽發(fā)方標(biāo)識(shí)便于多系統(tǒng)區(qū)分 issuer: trust-demo對(duì)應(yīng)的屬性綁定類如下。使用ConfigurationProperties比散落的Value更好維護(hù)字段多了以后尤其明顯。// 文件路徑src/main/java/com/example/trust/config/JwtProperties.java package com.example.trust.config; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; Component ConfigurationProperties(prefix jwt) public class JwtProperties { /** 簽名密鑰長度至少 32 字節(jié) */ private String secret; /** 訪問令牌有效期秒 */ private long expireSeconds; /** 簽發(fā)方標(biāo)識(shí) */ private String issuer; public String getSecret() { return secret; } public void setSecret(String secret) { this.secret secret; } public long getExpireSeconds() { return expireSeconds; } public void setExpireSeconds(long expireSeconds) { this.expireSeconds expireSeconds; } public String getIssuer() { return issuer; } public void setIssuer(String issuer) { this.issuer issuer; } }4.2 Token 簽發(fā)與解析服務(wù)這是整套邏輯的核心。簽發(fā)時(shí)把用戶 ID 放進(jìn)subject角色放進(jìn)自定義聲明解析時(shí)先驗(yàn)簽再取聲明任何異常都統(tǒng)一處理成“Token 無效”。// 文件路徑src/main/java/com/example/trust/service/JwtService.java package com.example.trust.service; import com.example.trust.config.JwtProperties; import io.jsonwebtoken.Claims; import io.jsonwebtoken.JwtException; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.security.Keys; import org.springframework.stereotype.Service; import javax.crypto.SecretKey; import java.nio.charset.StandardCharsets; import java.time.Instant; import java.util.Date; import java.util.List; Service public class JwtService { private final JwtProperties properties; private final SecretKey key; public JwtService(JwtProperties properties) { this.properties properties; // 密鑰長度不足 32 字節(jié)時(shí)會(huì)拋出 WeakKeyException這里提前暴露問題 this.key Keys.hmacShaKeyFor( properties.getSecret().getBytes(StandardCharsets.UTF_8)); } /** * 簽發(fā)訪問令牌 * * param userId 用戶唯一標(biāo)識(shí) * param roles 角色列表 * return 簽名后的 JWT 字符串 */ public String issueToken(String userId, ListString roles) { Instant now Instant.now(); Instant expireAt now.plusSeconds(properties.getExpireSeconds()); return Jwts.builder() .subject(userId) .issuer(properties.getIssuer()) .issuedAt(Date.from(now)) .expiration(Date.from(expireAt)) .claim(roles, roles) .signWith(key) .compact(); } /** * 解析并校驗(yàn)令牌簽名錯(cuò)誤、過期、格式不對(duì)都會(huì)拋出 JwtException */ public Claims parse(String token) throws JwtException { return Jwts.parser() .verifyWith(key) .requireIssuer(properties.getIssuer()) .build() .parseSignedClaims(token) .getPayload(); } }幾處值得說明的地方。signWith(key)會(huì)依據(jù)密鑰長度自動(dòng)選擇算法32 字節(jié)對(duì)應(yīng) HS25664 字節(jié)對(duì)應(yīng) HS512不用手動(dòng)指定。requireIssuer()是校驗(yàn)簽發(fā)方的關(guān)鍵多系統(tǒng)共存時(shí)能擋住“別的系統(tǒng)簽發(fā)的 Token 拿來用”這種越權(quán)場(chǎng)景。parseSignedClaims()一次性完成驗(yàn)簽、過期檢查、簽發(fā)方檢查比手動(dòng)逐項(xiàng)判斷更不容易遺漏。如果你項(xiàng)目里是jjwt0.11.x等價(jià)寫法是Jwts.parserBuilder().setSigningKey(key).requireIssuer(...).build().parseClaimsJws(token).getBody()方法名不一樣邏輯完全一致。4.3 密碼加密與用戶查詢密碼絕對(duì)不能用明文或 MD5 存儲(chǔ)。Spring Security 提供的BCryptPasswordEncoder是推薦選擇它自帶隨機(jī)鹽同一個(gè)密碼每次加密結(jié)果都不一樣并且計(jì)算成本可調(diào)能顯著提高離線爆破的代價(jià)。// 文件路徑src/main/java/com/example/trust/service/UserService.java package com.example.trust.service; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; import java.util.List; import java.util.Map; import java.util.Optional; /** * 示例用的內(nèi)存用戶存儲(chǔ)真實(shí)項(xiàng)目請(qǐng)?zhí)鎿Q為數(shù)據(jù)庫查詢 */ Service public class UserService { private final PasswordEncoder passwordEncoder; /** 用戶名 - {加密后的密碼, 角色列表} */ private final MapString, UserRecord users; public UserService(PasswordEncoder passwordEncoder) { this.passwordEncoder passwordEncoder; // 啟動(dòng)時(shí)把示例密碼加密避免代碼里出現(xiàn)明文 this.users Map.of( admin, new UserRecord( passwordEncoder.encode(admin123), List.of(ADMIN)), alice, new UserRecord( passwordEncoder.encode(alice123), List.of(USER)) ); } public OptionalUserRecord findByUsername(String username) { return Optional.ofNullable(users.get(username)); } public boolean matches(String rawPassword, String encodedPassword) { return passwordEncoder.matches(rawPassword, encodedPassword); } public record UserRecord(String encodedPassword, ListString roles) { } }這里用record承載用戶數(shù)據(jù)代碼更緊湊。真實(shí)項(xiàng)目里findByUsername應(yīng)該走數(shù)據(jù)庫或緩存并且要注意無論用戶是否存在都不要在響應(yīng)里暴露差異否則攻擊者可以枚舉出哪些用戶名是有效的。登錄失敗統(tǒng)一返回“用戶名或密碼錯(cuò)誤”。4.4 認(rèn)證過濾器把 Token 變成安全上下文這個(gè)過濾器是整個(gè)機(jī)制的中樞。它做三件事從請(qǐng)求頭取 Token、校驗(yàn)并解析、把身份寫入上下文。注意它不能拋異常中斷流程而是要在校驗(yàn)失敗時(shí)保持上下文為空交給后續(xù)的授權(quán)環(huán)節(jié)去拒絕。// 文件路徑src/main/java/com/example/trust/filter/JwtAuthenticationFilter.java package com.example.trust.filter; import com.example.trust.service.JwtService; import io.jsonwebtoken.Claims; import io.jsonwebtoken.JwtException; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Component; import org.springframework.web.filter.OncePerRequestFilter; import java.io.IOException; import java.util.List; Component public class JwtAuthenticationFilter extends OncePerRequestFilter { private static final Logger log LoggerFactory.getLogger(JwtAuthenticationFilter.class); private static final String HEADER Authorization; private static final String PREFIX Bearer ; private final JwtService jwtService; public JwtAuthenticationFilter(JwtService jwtService) { this.jwtService jwtService; } Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException { String header request.getHeader(HEADER); // 沒有攜帶令牌時(shí)直接放行由后續(xù)授權(quán)規(guī)則決定是否拒絕 if (header null || !header.startsWith(PREFIX)) { chain.doFilter(request, response); return; } String token header.substring(PREFIX.length()).trim(); try { Claims claims jwtService.parse(token); SuppressWarnings(unchecked) ListString roles claims.get(roles, List.class); ListSimpleGrantedAuthority authorities roles null ? List.of() : roles.stream() .map(r - new SimpleGrantedAuthority(ROLE_ r)) .toList(); UsernamePasswordAuthenticationToken authentication new UsernamePasswordAuthenticationToken( claims.getSubject(), null, authorities); SecurityContextHolder.getContext().setAuthentication(authentication); log.debug(令牌校驗(yàn)通過, userId{}, claims.getSubject()); } catch (JwtException | IllegalArgumentException e) { // 令牌無效時(shí)不寫入上下文交由授權(quán)環(huán)節(jié)返回 401 SecurityContextHolder.clearContext(); log.warn(令牌校驗(yàn)失敗, reason{}, e.getMessage()); } chain.doFilter(request, response); } }繼承OncePerRequestFilter而不是直接實(shí)現(xiàn)Filter是為了保證同一個(gè)請(qǐng)求內(nèi)只執(zhí)行一次避免異步轉(zhuǎn)發(fā)forward時(shí)重復(fù)解析。日志里只記錄失敗原因不要把完整 Token 打出來因?yàn)槿罩鞠到y(tǒng)往往權(quán)限更寬Token 泄露等同于身份泄露。4.5 安全配置路徑規(guī)則與無狀態(tài)會(huì)話// 文件路徑src/main/java/com/example/trust/config/SecurityConfig.java package com.example.trust.config; import com.example.trust.filter.JwtAuthenticationFilter; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.HttpMethod; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer; import org.springframework.security.config.http.SessionCreationPolicy; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.web.SecurityFilterChain; import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter; Configuration public class SecurityConfig { private final JwtAuthenticationFilter jwtAuthenticationFilter; public SecurityConfig(JwtAuthenticationFilter jwtAuthenticationFilter) { this.jwtAuthenticationFilter jwtAuthenticationFilter; } Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http // 前后端分離場(chǎng)景下無狀態(tài)接口不使用 Cookie 會(huì)話可關(guān)閉 CSRF .csrf(AbstractHttpConfigurer::disable) .sessionManagement(session - session.sessionCreationPolicy(SessionCreationPolicy.STATELESS)) .authorizeHttpRequests(auth - auth .requestMatchers(/auth/login, /health).permitAll() .requestMatchers(HttpMethod.GET, /orders/**).hasRole(USER) .requestMatchers(/admin/**).hasRole(ADMIN) .anyRequest().authenticated()) .addFilterBefore(jwtAuthenticationFilter, UsernamePasswordAuthenticationFilter.class); return http.build(); } }關(guān)于csrf().disable()需要說明清楚只有在你完全不依賴 Cookie 傳遞會(huì)話憑證的前提下才可以關(guān)閉。如果系統(tǒng)同時(shí)用 Cookie 做會(huì)話且關(guān)閉了 CSRF 防護(hù)就會(huì)暴露跨站請(qǐng)求偽造風(fēng)險(xiǎn)。前后端分離 Bearer Token 模式之所以能關(guān)是因?yàn)闉g覽器不會(huì)自動(dòng)攜帶 Token攻擊者構(gòu)造的跨站請(qǐng)求帶不上憑證。如果你的系統(tǒng)是傳統(tǒng)服務(wù)端渲染加表單提交務(wù)必保持 CSRF 開啟。4.6 登錄接口與受保護(hù)接口// 文件路徑src/main/java/com/example/trust/controller/AuthController.java package com.example.trust.controller; import com.example.trust.service.JwtService; import com.example.trust.service.UserService; import jakarta.validation.constraints.NotBlank; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.Map; RestController RequestMapping(/auth) public class AuthController { private final UserService userService; private final JwtService jwtService; public AuthController(UserService userService, JwtService jwtService) { this.userService userService; this.jwtService jwtService; } PostMapping(/login) public ResponseEntity? login(RequestBody LoginRequest request) { return userService.findByUsername(request.username()) .filter(u - userService.matches( request.password(), u.encodedPassword())) .map(u - { String token jwtService.issueToken( request.username(), u.roles()); return ResponseEntity.ok(Map.of( token, token, tokenType, Bearer)); }) // 用戶不存在與密碼錯(cuò)誤返回同一提示避免用戶名枚舉 .orElseGet(() - ResponseEntity.status(401) .body(Map.of(message, 用戶名或密碼錯(cuò)誤))); } public record LoginRequest(NotBlank String username, NotBlank String password) { } }// 文件路徑src/main/java/com/example/trust/controller/OrderController.java package com.example.trust.controller; import org.springframework.security.core.Authentication; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; import java.util.Map; RestController RequestMapping(/orders) public class OrderController { GetMapping public MapString, Object list(Authentication authentication) { // 從安全上下文中取當(dāng)前用戶不要從請(qǐng)求參數(shù)里取 userId String userId String.valueOf(authentication.getPrincipal()); return Map.of( userId, userId, orders, List.of( Map.of(orderId, A1001, amount, 199), Map.of(orderId, A1002, amount, 88) )); } }注意OrderController里取當(dāng)前用戶的方式從Authentication里拿而不是從請(qǐng)求參數(shù)里拿。如果接口設(shè)計(jì)成GET /orders?userIdxxx那就是典型的水平越權(quán)漏洞——只要改一下參數(shù)就能看到別人的訂單。真實(shí)業(yè)務(wù)里查詢條件必須強(qiáng)制附加當(dāng)前用戶 ID 作為過濾條件。4.7 運(yùn)行與驗(yàn)證啟動(dòng)應(yīng)用后用 curl 依次驗(yàn)證三個(gè)場(chǎng)景。先拿一個(gè)合法 Token# 1. 登錄獲取令牌 curl -X POST http://localhost:8080/auth/login \ -H Content-Type: application/json \ -d {username:alice,password:alice123}預(yù)期返回類似下面的結(jié)構(gòu)token字段就是三段式的 JWT{ token: eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhbGljZSIs..., tokenType: Bearer }然后帶 Token 訪問受保護(hù)接口# 2. 攜帶令牌訪問訂單接口 curl http://localhost:8080/orders \ -H Authorization: Bearer eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhbGljZSIs...預(yù)期返回當(dāng)前用戶和訂單列表。接著驗(yàn)證失敗場(chǎng)景# 3. 不帶令牌預(yù)期 401 curl -i http://localhost:8080/orders # 4. 篡改令牌最后一段預(yù)期 401驗(yàn)簽失敗 curl -i http://localhost:8080/orders -H Authorization: Bearer xxx.yyy.zzz # 5. 用 alice 的令牌訪問管理員接口預(yù)期 403認(rèn)證通過但授權(quán)不足 curl -i http://localhost:8080/admin/users \ -H Authorization: Bearer alice的令牌這三個(gè)失敗的用例很關(guān)鍵很多同學(xué)只測(cè)通了一條成功路徑就認(rèn)為做完了。401 和 403 的區(qū)分、簽名篡改能否被攔住才是判斷鑒權(quán)是否真的生效的標(biāo)準(zhǔn)。5. 服務(wù)間信任微服務(wù)調(diào)用如何傳遞身份5.1 Token 透?jìng)髯詈唵我沧钊菀撞瓤拥姆桨阜?wù) A 收到用戶請(qǐng)求后要調(diào)用服務(wù) B最直接的做法是把原始 Token 放進(jìn)請(qǐng)求頭繼續(xù)往下傳。服務(wù) B 用同一個(gè)密鑰或公鑰校驗(yàn)就能拿到同一個(gè)身份。這種方式實(shí)現(xiàn)成本低鏈路清晰。但它有兩個(gè)必須注意的點(diǎn)。第一Token 的有效期在鏈路中持續(xù)消耗如果 A 調(diào)用 B 時(shí) Token 只剩 10 秒B 處理稍慢就會(huì) 401。建議在調(diào)用前檢查剩余有效期不足時(shí)提前刷新。第二Token 會(huì)流經(jīng)多個(gè)服務(wù)任何一個(gè)服務(wù)的日志、鏈路追蹤系統(tǒng)如果全量記錄請(qǐng)求頭Token 就會(huì)散落在各處。所以要在日志配置里對(duì)Authorization頭做脫敏。5.2 內(nèi)部服務(wù)簽名不依賴用戶身份的調(diào)用有些調(diào)用并不代表某個(gè)用戶比如定時(shí)任務(wù)觸發(fā)數(shù)據(jù)同步。這時(shí)不應(yīng)該偽造用戶 Token而是用服務(wù)身份。常見做法是給每個(gè)服務(wù)分配一對(duì)clientId/clientSecret調(diào)用時(shí)用密鑰簽名請(qǐng)求簽名內(nèi)容包含時(shí)間戳、請(qǐng)求體和隨機(jī)數(shù)被調(diào)方校驗(yàn)簽名并檢查時(shí)間戳窗口比如 ±5 分鐘防止重放。這塊實(shí)現(xiàn)相對(duì)復(fù)雜工程上更常見的替代方案是引入統(tǒng)一的服務(wù)網(wǎng)格或內(nèi)部網(wǎng)關(guān)統(tǒng)一處理業(yè)務(wù)代碼不用關(guān)心。無論用哪種方式原則是一致的內(nèi)部網(wǎng)絡(luò)不等于可信網(wǎng)絡(luò)涉及到數(shù)據(jù)變更的接口仍然需要校驗(yàn)調(diào)用方身份。5.3 密鑰輪換讓信任關(guān)系可以平滑更新密鑰一旦固定不變泄露風(fēng)險(xiǎn)就隨使用時(shí)長線性上升。輪換的難點(diǎn)在于簽發(fā)方換新密鑰的瞬間舊 Token 還沒過期校驗(yàn)方如果只認(rèn)新密鑰所有在線用戶會(huì)集體掉線。解決辦法是讓校驗(yàn)方同時(shí)信任多個(gè)密鑰通過 Header 里的kid密鑰標(biāo)識(shí)字段選擇對(duì)應(yīng)的密鑰。輪換流程是先讓所有校驗(yàn)方上線“雙密鑰支持”再切換簽發(fā)方使用新密鑰等舊 Token 全部過期超過一個(gè)完整有效期后移除舊密鑰。整個(gè)過程用戶無感知。如果你的系統(tǒng)規(guī)模還不大至少要做到密鑰可以通過配置中心熱更新而不是改代碼重新發(fā)版。6. 常見問題與排查清單鑒權(quán)模塊的問題表現(xiàn)形式很集中但原因往往不止一種。下面這張表按現(xiàn)象歸類遇到報(bào)錯(cuò)時(shí)可以逐條比對(duì)。問題現(xiàn)象常見原因解決思路啟動(dòng)報(bào)WeakKeyException密鑰長度不足 32 字節(jié)換用足夠長度的密鑰或改用Keys.secretKeyFor(SignatureAlgorithm.HS256)生成所有請(qǐng)求都 401過濾器未注冊(cè)或順序錯(cuò)誤檢查addFilterBefore是否加在UsernamePasswordAuthenticationFilter之前所有請(qǐng)求都 401Authorization頭缺少Bearer前綴前端拼接時(shí)統(tǒng)一封裝服務(wù)端嚴(yán)格按前綴截取明明登錄成功但訪問接口 403hasRole(USER)與授權(quán)值不匹配過濾器里加的權(quán)限前綴要和hasRole約定一致hasRole(USER)實(shí)際校驗(yàn)ROLE_USER上線后部分用戶頻繁掉線多實(shí)例密鑰不一致密鑰統(tǒng)一從配置中心下發(fā)不寫死在各自配置文件時(shí)間一過零點(diǎn)就大面積 401服務(wù)器時(shí)區(qū)或時(shí)間不同步統(tǒng)一使用 UTC 時(shí)間部署 NTP 時(shí)間同步舊 Token 在權(quán)限變更后仍有舊權(quán)限權(quán)限被寫進(jìn)了 Token Payload改為 Token 只放用戶 ID權(quán)限實(shí)時(shí)查詢緩存報(bào)InvalidClaimException: iss多系統(tǒng)共用密鑰但簽發(fā)方不同簽發(fā)時(shí)設(shè)置 issuer校驗(yàn)時(shí)用requireIssuer限制日志出現(xiàn)大量驗(yàn)簽失敗可能是掃描器探測(cè)或密鑰被誤換結(jié)合來源 IP 和錯(cuò)誤分布判斷必要時(shí)做頻率限制排查時(shí)建議按“請(qǐng)求頭是否正確 → 過濾器是否執(zhí)行 → 上下文是否寫入 → 授權(quán)規(guī)則是否匹配”這個(gè)順序走。一個(gè)很實(shí)用的小技巧是在過濾器里打一行 debug 日志把SecurityContext里的權(quán)限列表輸出出來能快速定位是認(rèn)證沒通過還是授權(quán)沒配對(duì)。7. 最佳實(shí)踐與工程建議有效期設(shè)計(jì)要有層次。訪問令牌有效期短比如 30 分鐘刷新令牌有效期長比如 7 天刷新令牌一次性使用并且可撤銷。這樣既控制了泄露后的風(fēng)險(xiǎn)窗口又不會(huì)讓用戶頻繁重新登錄。刷新令牌必須存儲(chǔ)服務(wù)端狀態(tài)否則就失去了“可撤銷”這個(gè)核心價(jià)值。密鑰管理納入發(fā)布流程。密鑰不要放在代碼倉庫、不要放在前端、不要出現(xiàn)在日志。生產(chǎn)環(huán)境通過環(huán)境變量或密鑰管理服務(wù)注入不同環(huán)境使用不同密鑰并且把密鑰輪換寫進(jìn)運(yùn)維手冊(cè)。這條做不好前面所有代碼都是白寫。錯(cuò)誤響應(yīng)要統(tǒng)一但不要泄露細(xì)節(jié)。對(duì)外統(tǒng)一返回“用戶名或密碼錯(cuò)誤”“登錄狀態(tài)已失效”不要把“用戶不存在”“簽名不匹配”“Token 已過期”這些內(nèi)部原因直接透給前端。詳細(xì)原因?qū)懭罩窘涌谥唤o用戶能理解的信息。日志脫敏要做成默認(rèn)行為。請(qǐng)求頭、請(qǐng)求體、響應(yīng)體里都可能帶憑證。建議在日志框架層面統(tǒng)一配置敏感字段過濾而不是靠每個(gè)開發(fā)者記得手動(dòng)脫敏——靠人記的事情遲早會(huì)漏。權(quán)限校驗(yàn)要有兜底策略。路徑規(guī)則容易寫漏建議默認(rèn)拒絕anyRequest().authenticated()作為兜底而不是默認(rèn)放行。新增接口時(shí)如果忘記配置規(guī)則默認(rèn)是受保護(hù)的這比默認(rèn)開放安全得多。避免過度依賴前端控制。按鈕隱藏、菜單不渲染都只是體驗(yàn)優(yōu)化不是安全措施。所有涉及數(shù)據(jù)讀取和狀態(tài)變更的接口都必須在服務(wù)端做身份和歸屬校驗(yàn)尤其是“根據(jù) ID 查詢?cè)斍椤边@類接口必須校驗(yàn)數(shù)據(jù)是否屬于當(dāng)前用戶。給測(cè)試留出可驗(yàn)證的失敗路徑。寫單元測(cè)試時(shí)除了驗(yàn)證成功場(chǎng)景至少要覆蓋過期 Token、篡改簽名、缺少 Token、權(quán)限不足這四種。這幾條用例能在重構(gòu)過濾器鏈時(shí)第一時(shí)間發(fā)現(xiàn)回歸問題。生產(chǎn)變更要穩(wěn)妥。修改鑒權(quán)邏輯屬于高風(fēng)險(xiǎn)變更建議先在測(cè)試環(huán)境完整驗(yàn)證采用灰度發(fā)布保留快速回滾方案。涉及用戶數(shù)據(jù)的權(quán)限規(guī)則調(diào)整最好提前通知相關(guān)方避免上線后出現(xiàn)大面積無法訪問的情況。8. 繼續(xù)深入的方向把上面的代碼跑通之后你已經(jīng)具備了一套可用的無狀態(tài)認(rèn)證基礎(chǔ)。接下來值得繼續(xù)研究的方向有幾個(gè)一是權(quán)限模型升級(jí)從簡單的角色RBAC走向基于資源和操作的細(xì)粒度權(quán)限如order:read、order:delete配合方法級(jí)注解PreAuthorize使用二是單點(diǎn)登錄與多端統(tǒng)一研究 OAuth 2.1 和 OIDC 的授權(quán)碼流程理解第三方登錄場(chǎng)景下信任是如何建立的三是令牌的主動(dòng)失效通過維護(hù)一個(gè)短期的失效列表或版本號(hào)解決“用戶改密碼后舊 Token 仍然有效”的問題。如果你想現(xiàn)在就動(dòng)手加固手上的項(xiàng)目有三個(gè)動(dòng)作性價(jià)比最高把硬編碼的密鑰挪到環(huán)境變量檢查所有“按 ID 查詳情”的接口是否做了歸屬校驗(yàn)給鑒權(quán)模塊補(bǔ)上過期、篡改、越權(quán)三類測(cè)試用例。這三件事花不了多少時(shí)間但能擋掉大部分真實(shí)存在的風(fēng)險(xiǎn)。信任這件事在系統(tǒng)里從來不是靠一句“請(qǐng)相信我”成立的它靠的是每一個(gè)環(huán)節(jié)都把該做的校驗(yàn)老老實(shí)實(shí)做完。代碼寫到位了別人才敢信。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
又摸又舔在线观看网站| 色yeye成人免费视频| 日本999精品视频| 丁香六月婷婷| 亚洲欧洲日韩国产自在线| 天天躁日日躁狠狠狠躁| 任你干在线视频| 久久久工口| 国产版a级片直播在线| 懂色aV一区二区天美传媒| 九九九精品色乱九九九| 一级黄碟在线观看| 99re这里只有精品3| 3571色综合一区二区二区| 激情综合网五月婷婷五月天| 日韩99精品视频综合区| 久久国产精品视频| 国产精品2020| 精品久久久久,69国产成人精| 操比国产| 国产偷拍自拍在线视频| 婷婷丁香五月天综合东京热| 熟女色综合久久| 国产日韩色综合| 超碰95| 亚洲色婷婷综合久久久久中文| 久久久久久久六六| 丁香婷婷激情五月天无毒不卡| 欧美国产日韩清纯唯美| 无码国产精品久久久久| 亚洲AV成人无码一区二区三区在线观看 | 色av中文字| 啊啊啊操一区| 精品国产网站| 亚洲色堂免费视频| 炮色五月| 美女大乳久久久久久久女人18| 99精品久久| 91粉嫩萝控精品福利网站_精品影音先锋国 | 日日日日做夜夜夜夜做无码97| 亚洲欧美日产国产91毛片| 日韩在线AB| 极品丝袜无码| 欧美一二三区四五区| 亚洲中文人妻色| 日韩欧亚太美不卡| 欧美大片天天看| 国产日韩欧美| 天天天肏屄肏屄肏屄欧美欧美| 欧美三四五区| 伊人天天久久动态图| 美女91在线| 张柏芝国产一区在线观看| 久久人| 97国产超碰| 日本操逼视频免费| 91在线视频免费播放| 精品一区二区亚洲国产| 日韩情色视频| 91国产在线精品| 欧美线天码中字| 67914在线兔费成人视频| 91综合网在线| 欧美综合娱乐久久| 五月天婷婷久久| 97超碰色五月| 亚洲男人综合网| 亚洲自拍97| 中文字幕日韩电影人妻| 大香蕉手机视频| 亚洲 中文 女同| 97超碰色屌| 亚洲精品久久久久久| 四虎精品一区二区| 91c色| 清柠毛片| 亚洲色图 91| 国产午夜精品在线观看| 久99视频| 欲女人妻性色av| 91精片| 噜噜噜在线视频| 色99色| 日韩97视频| 天天射天天| 丁香五月婷婷啪啪| 小骚逼被操的爽不爽| se..亚洲欧美| 天天综合色| Aa东京男人的天堂| 欧美一级特黄淫片在线观看| 熟妇熟女亚洲天堂网| 日韩噜噜69| 99re9| 国产aⅴ无码片毛片一级网站| 欧美日韩性爱精品| 欧亚揄拍偷拍精品视频| 蜜乳成人AV| 曰韩无码777| 欧美91精彩| 啊啊啊啊啊啊好多水| 国产视频一区二区免费| 91成人国产综合久久精品蜜月| 蜜臀99久久精品久久久久久| 黑人操一区二区| 熟妇熟女一区二三区| 東南亚性呦成人伦理资源在线视频| 久久91视频| 欧美天天拍| 无码九九| 黄色一级视| 亚州色图欧美| 亚洲各类熟们中文字幕| 色爽——AV| 亚洲最新av无码成人精品区 | 偷拍导航视频网站| 天天操天天舔| 日本 情色 1区2区3区| 日本人人操人人操| 色臀AV| 69人妻精品一区二区绯色| 91精品少妇搡搡搡| 亚洲精品视频在线| 热热色91| 一区二区不卡| 精品一区二区成人动漫| 成年在线视频日本亚洲在线视频区精品江靖宇公司 | 91处女视频在线观看| 日韩视频精品在线观看| 国产男女无套97| 八戒无码国产午夜福利| 中文无线日韩一区| 97人妻碰碰中文无码久热丝袜| 影音资源男人日韩| 日韩欧美视频青青| 偷拍精品一区二区三区| 色妇91| 超碰在线91| 亚洲熟女av中文字幕| 色婷婷导航| 婷婷久月| 日韩中文字幕av在线播放| 成人小说视频在线精品欧美| 深爱伊人影院| 久草色悠悠在线视频| 久久久久亚洲AV无码专区少妇| 国产精品电影推荐| 丝袜大香蕉| 一级二级在线观看| 极品久久久久久久久久久久久久| 精品超碰国产| 在线看的av| 欧美色老汉| 全球成人中文在线| 色欲天天综合久久久无码网中文| 日韩精品系列| 一区,二区,三区网站| 婷婷av在线中文字幕| 啊啊啊啊啊,啊啊啊啊好舒服,操我舒服啊啊啊 | 亚洲AV无线| 亚洲男人天堂网站| 青草香蕉网| 午夜色婷婷| 综合欧美激情网| 伊人九九| 校园春色亚洲无码| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 欧美亚洲系列| 天堂涩涩| 中文字幕视频2区| 国产欧美一级在线观看| 国产400孕妇孕交群| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 日韩无码服务区| 偷拍亚洲高清图片| 久久久久久欧美精品se一二三四| 另类小色呦| 欧美91精品国产自产| 新精精品久久精品| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 熟妇xxxxx性春色| 欧美日韩不卡传媒| 91天天爱| 中文字幕视频一区视频二区| 男人的天堂2018东京热啪啪啪| 国产精品无套内谢| 国内毛片国产欧美拍| 色欲久久99国产精品久久久久久| 熟妇高潮精品一区二区三区下载| 综合天天网| 亚州乱码中文字幕综合久久久| 99在线观看| 亚洲精品天堂久久A∨51成人漫| 好吊色综合| 夜夜免费视频| 大香蕉在线SuP| 9超碰免费| 国产精品久久9| 婷婷色导航| 日本一级性爱| 激情五月激情综合网| 久久99午夜精品一区人妻| 国产一级137片内射麻豆| 999久久久免费精品国产牛牛| 丰满人妻一区二区三区免费 | 国产精品无码AV网站| 在线看的av| 中文人妻av高清一区| 欧美中文字幕日韩在线| 中文字幕高清精品一区| 亚洲图片激情综合另类| 久久亚州精品成人Av无| 国产又黄又爽又刺激久久久久久| 久久精品福利影院| 国语av最新自产拍在线观看| 亚洲色欲天天人妻无码系列专区| 久久黄黄| 天天看高清麻豆| 经典丝袜一区| 人妻色情天天操| 亚洲在线A| 精品无人区麻豆乱码1区2区图片| 午夜精品久久久久久久久久久久久 | 国内伊人久久久久久网站视频| 久操频道免费在线呗看| 99re98| 老熟妇乱轮| 一级片在线观看高清无码| 激情网色| 亚洲欧美精品一区天堂久久 | 一本大道久| 一区二区三区一亚洲中文字幕、综合区灬 | 日本道人妻久久久在线不卡色视频| 福利天天都操| 国产午夜精品理论片一二三区区| 极品色www影院| 91狠狠综合久久久久久| 熟女一区二区| 2020中文字幕在线| 东京热激情视频一二三区| 黄色片A级一区二区三区| 精品国产自在在线99| 久久啊啊| 欧美日韩国产中文精品字幕自在自线,| 综合第一页| 久久伊人在线五区| ...日韩成人一区二区三区字幕| 成人AV素股で擦久久| 亚洲黄网在哪免费看| 蜜桃臀一区二区aV| 亚州春色| 久久超碰97| 久久久九九| 色五月综合网| 欧美九九99久久精品| 国产无码精品成人| 欧美日韩人妻精品一区二区三区| 中文乱码字字幕在线第5页| 99久久网站| 性色高清在线| 中国91AV| 欧美顶级黄色大片免费| 在线女人91| 成人精品久久| 日韩在线性爱免费视频| 久久xx| 日日干男人的天堂| 岛国免费视频在线| 亚洲人成色9999精品久久 | 亚洲伊人久久精品影院| 欧美激情精品久久久| 亚洲综合 欧美| 一起草高清无码| 丁香色五月 97干| 欧美熟女妇同| 成 人片 黄色大片| 中文97国产| 亚洲男人天堂2017| 九九成人视频| 97亚洲中文| 女同性恋久久| 后入式999| 成人一级性爱| 四虎免费看黄| 国产精品久久久久久久AV大片| 人妻激情偷乱视频一区二区三区 | 日本三级韩国三级美三级91| 爽极品影院| 97 国产一区| www国产无码| 夜夜一区二区| 亚洲成人在线高清| 亚洲欧洲激情| 日韩av影片在线观看| 欧美视频激情久久久久久| 操操操五月天婷婷丁香影院| 色av中文字幕| 国产女人极品高潮毛片| 天美麻豆黄色录像| 精品成人av一区二区三区在线| 国产免费一区| 亚洲激情AV| 亚洲男人天堂2017| 久9久| 美国日韩黄片| 日日妻色网| 91三级理论片播放器| 亚洲精品国产熟女久久久| 抽插无码高清一区| 丝袜亚洲综合| 在线 亚洲 网爆 自拍| 免费中文综合精品| 小骚逼被操的爽不爽| 99精品视频在线观看免费| 天天干夜夜肏| 大香蕉宗合网在线| 欧亚性爱在线视频| 熟女露脸激情自拍视频| 久久婷婷五月天| 综合久久2017| 婷婷另类小说| 99久久9| 伊人加勒比| 蜜臀AV成人精品蜜臀AV久久| 91久久精品中文字幕| 久久久96精品| 国产性感骚丝袜在线| 日日操免费视频| 人妻少妇久久| 欧美精品丝袜久久久中文字幕| 欧美激情性爱视频网站| 91麻豆天美国产欧美高潮| 九九AV| 美国精品国产精品| 成人精品在线免费视频| 欧美激情精品| 日本新免费二区三区| 99热最新| 亚洲超碰AV| 99re这里只有精品9| 10000部十八禁看电影| 国产精品久久久久久片| 久久性爱视频99| 9 1果冻精品视频| 久久只有精品一区二区三区| www.色操逼| 中文字幕AV乱伦| 国产9l 大屁股| 亚州综合AⅤ| 夜夜嗨一区二区| 日本一区二区成人在线| 欧美中文字幕日韩在线| 97色亚洲| 国产精品农村妇女| 91在线一起| 蜜臀久久久国产| 伊人97色天使| 久久黄色网址| 蜜桃色色网站视频三区| 91热爆在线| 亚洲成人一区二区精品| 性爱Av免费| 日韩中文字墓| 国内亚洲高清无码| 99无码| 久久宗合97| 人妻素股| 免费成人在线熟妇网| 丝袜狠狠草尤物人妻av91| 九九色热| 97超碰碰碰| 婷婷激情五月| 亚洲天堂区| 五月婷在线| 亚洲夜夜欢无码一区二区| 免费簧片在线观看| 把腿张开老子CAO烂你| 久久天天艹| 17c在线成人免费A片观看| 新亚洲无码| 青青青在线高清视频在线一二三四区| 亚洲色图 91| 后入福利| 色淫网站优优视频| 91天天看| 国产兽交视频在线播放| 国产精品制服丝袜清纯唯美| hd成人一区二区在线| 91快色色色色色| 人人人人插| 老司机射| 久久国产视频性吧 | 第45页一区二区| av操操不卡| 欧美图片色综合| 91国产大片| 男人的亚洲天堂| 久草线上视频免费看| 少妇蹲下买菜露大唇0| 激情内射| 国产无码高清操逼视频| 国产精品老师| 99久久无色码| 伊人991| 91热色| 东京热综合久久一区二区| 国产精品人妻无码久久久老鸭窝 | 人人爱操| 日逼五月天| 久久中久文96| 97视频免费在线观看| 強姦亂倫a| 黑人精品成人一区二区三区| 青青操青娱乐| h色99999| 国产精品片| 日本无码1| 五月天激情综合网| 久久视频,这里只有精品 | 国产免费一区二区在线A片视频| 爱射综合| 中出在线视频| 国产日韩精品suv| 在线观看黄色电话| 久久综合精品一区二区三区| 91美女视频。| 家庭乱伦国产| 精品少妇一区二区三区免费观看| 天天综合网AV91| 亚洲男人天堂手机版| 翔田千里无码中出中文字幕| 天天操综合网| 黑丝制服中文字幕 | 国产久久一区二区| 七月丁香婷婷| 久久老子无码午夜伦不卡| 天美一二三在线观看Av| 天天伊人| 国产精品久久久鸭无码的功能| 一牛影视久久久一区二区三区| 超碰欧美97资源| 日婷婷| 久热超碰| 中文字幕av一区二区三区人妻少妇 | 人妻丰满熟妇一区二区三| 噜噜在线| 青青草公开在线免费不卡视频| 久久久久久电影| 私色综合网| 99这里只有精品| 丰满岳乱妇一区二区三区| 按摩中文字幕| 放黄片放3级黄片没穿衣服| 777奇米影视777四色| 吉川爱美亚洲二区在线| 中国AV美女| 天天干2019| 欧洲亚洲少妇| AV天天在线观看| 91日韩网站| 国产麻豆一级精品视频| 日本 情色 1区2区3区| 岛国片国产成人亚洲播放| 欧美中字二区| 91深夜夜| 综合97久久| 国产小黄片在线免费观看| 69久久久久久久久久久久久| 高清成年美女黄网站免费大全| 成人综合网 欧美| 国产JDAV无码视频在线观看| 综合网亚| 污污汅18禁网站在线永久免费观看 | 日韩欧视频| 大香蕉综合| 亚洲国产日韩精品久久久| 噜噜噜狠狠色综合| 亚洲性网| 日本男人插女人的逼黄色| 国产69精品久久久久99尤物| 中文一区二区| 婷婷久久综合久| 精品午夜福利| 今日头条成人一区二区三区四虎精品| 日本一区视频在线观看| 久久机热| 国产成人资源| 亚洲男人久久综合天堂| 久久AV色| 亚欧精品久久久久久久久久久| 91精品国产综合久久久蜜臀酒店| 亚洲综合性感在线| 九色在线熟女国产黑人| 东北女人性交| 国产白嫩精品久久| 美国一区二区免费视频| 国产白丝AV| 国产美脚女优尤物在线观看| 中国一区二区亚洲人妻| 麻豆亚洲AV成人无码久久精品| 精品一区96| 香蕉久久AⅤ...| 欧美日韩中文字幕不卡| 欧美日韩资源在线| 免费操逼视频下载| 久操91视频| 欧美精品欧美精品系列| 狼人综合婷婷激情四射 | 国产精品三级视频网站| 日本伦乱九九九综合| 国产女人9999| 精品一区96| 爆操无码| 中文精品一区二去| 精品78| 男人天堂网手机版婷婷| 97硬碰| 极品极品色影院| 国产肏逼网站| 色香综合| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 亚洲熟女乱色一区二区三区久久久 | 九色97| 色婷婷九月天天综合| 久久久久久久精| 天美麻豆黄色录像| 中文在线久久字幕| 国产av高清版| 婷婷五月天伊人| 黄片com.| 精品欧美А∨无码黑人大荫蒂| 色综91| 另类欧美综合| 超碰碰小说97| 91九九九吃| 操人妻逼91| 奸色色 男人天堂 天天射| 爽 好舒服 无码刺激久久| 无遮挡一级毛片视频免费的| 中文字幕97| 干B网| 色狠狠一区二区三区香蕉| 老女人碰碰在线碰碰视频| 欧美亚洲性爱一区二区| 亚州伊人色综台| 久久精品99| 亚洲码专区| 欧美日韩激情无码专区| 国产黄片在线免费观看| 国产av波波国产精品| 免费看黄片现成| 中文字幕丰满人妻日本| 久久超碰网| 亚洲欧美不卡线| 熟妇视频一区二区三区在线| 日本加勒比无码专区| 校园春色第一页| 亚洲精品熟妇1区2区3区。| 久久精品综合| 欧美97se| 97视频免费播放| 亚洲 欧美 色图| 成年人黄色| 韩国一级做a久久久久| 69精品| 91无码西班牙视频在线| 人人操人人色人人摸| 韩三级a视频在线观看| 2017人人操,人人摸| 日日插夜夜| 综合免费无码中文| 丁香色婷婷| 色综合98| 夜夜人妻爽| 国产精品第一页国产大屁股视频免费区i| 久久草视频污视频| 欧美性第1页| 蜜臀在线视频| 精品午夜福利国产一区二区在线观看| 欧美日韩操操操| 色五月激情网| 午夜精品久久久久久久99热影院 | 欧美性爱十八禁| www.色婷婷| 欧美性区| 国产丝袜一区二区三区| 大色综合| 色婷婷九月天天综合| 国产原创自拍| 一区二区视频你懂的| 久久久精品,3| 日欧操屄| 婷婷久草| julia中文字幕在线观看| 欧美日韩精品久久久久东北老熟妇| 男同专区一区二区三区在线| 中国AV美女| AAA久久| 日韩钢筋无码高清啾啾啾| 欧美在线|亚洲| 成人精品无码| 中文字幕一区二区三区视频播放| 中文字幕少妇色| 中文字幕第7页| 欧美日韩性爱电影在线| 六月婷婷综合| 九一性生活免费视频| 精品日韩| 无遮挡猛进视频免费无限观看| 区日韩亚洲乱码av电影| 尤物视频偷拍免费| 国产91会所女技师在线观看| 99久热| 91人妻久久久久久久久久久久久| 17c嫩草51久久91嫩草| 国产精品亚洲免费| 大香蕉琪琪日本女优不卡| 欧美99999| 欧美久热| 玖色av| 午夜福利在线合集| 97中文字幕色| 伊人热综合| 啊啊啊操一区| 亚洲交性| 日本123区操B视频| 91处女在线视频| 91在线秘 男同| 久九干| 色欧洲| 志村玲子视频一区二区| 999国产精品999久久久久久| 亚洲乱码国产乱码精网站| 人人澡综合涩| 日本人妻中文字幕精品| 色婷婷综合久久久久中文一区二区| 欧美日韩欧美| 狠狠狠狠狠| 亚洲av资源| www.久久爱| 欧美综合1性辶| 色丁香久久| 国内毛片四区| 99热这里只有精品9| 亚洲图片欧美偷拍| 日本 欧美 亚中文字幕| 欧美性夜| 精品无码一区二区| Sekablack无码一区| 性色乱AV一区二区| 欧美一二三级精品在线| 欧美 日韩 另类 亚洲| 熟女这里只有精品6| 久久日本熟妇熟色高清| 日韩探花精品在线视频| 中出20p| 能看的AV| 一起草三级AV电影在线观看| 97色欧州| 两性色网| 992大香蕉| 亚洲一区中文字幕久久,果冻传媒一区二区天美传媒 | 人人操人人叉人人插人人| 久久精品一区二区三区蜜桃臀| 日本高清有码网址视频| 外国免费性情大片| 自拍盗摄一区| 亚洲高清国产理伦片| 性高潮久久久| 无码99| 亚欧免费| 久肏视频字幕| 韩国女主播青草福利视频| 精品国产无码中文| 毛片99-全集电影手机免费观看完整-B029AV | 五月婷婷丁香| 三级AV入口| 婷婷10月天青娱乐| 久久久9视频| 少妇xx精品| 一二三区精品视频| 91免费看一区二区三区| 91丨九色丨国产丨人妻在线 | 婷婷深爱五月| 欧美精品三区| 亚洲图片在线| 高凊专区人人操| 欧美另类综合久久| 久草在线| 亚洲色综网| 97视频在线观看播放与子乱对白在线……| 亚洲伊人a线观看视频| 亚洲在线综合| 青青操在线亚洲视频观看欧美在线 | 91精品久久久久五月天精品| 男人的天堂VA| 91性感网站| 九九九九久久久| 强奸乱伦大香蕉| 国产日本一区二区三区蜜臀在线观看| 欧美大片一区二区三区 | 超碰精品国产无码| 欧亚三区动漫| 蜜乳av一区二区三区| 日韩伦理视频| 综合熟女| 717影院理论午夜伦八戒| 免费看片黄| 好爽视频在线观看| 国产精品大屁股999| 欧美白嫩女HD| 国产美脚女优尤物在线观看| 很很干很很操| 日本黄 R色 成 人网站| 最新av网站在线观看| 97碰久久| 91bbbbbb| 人人操人人操人妻人| 97频视在线| 熟女中出视频| 九九久久一区二区三区| 五月婷婷综合在线| 黄色av一区二区在线| 乱伦av国产| 操逼片国产| 手机在线免费看的av| 麻豆美女丝袜人妻中文| 欧美性91| 一区二区不卡视| 伊人网高清| 亚洲 欧美 第一页| 中国和日本人色哪个不下载能放| 亚洲骚男同com| 日本精品一区二区三| 超碰98综合网| 裸体美女久久久| 中 文字幕一区二区三四 五 区日 日 骚| 97天天爽| 天天干2019| 九一屌逼| 亚州精品丝袜-不卡成人免费| 九九久久首页| 亚洲av热热色| 性爱AV天堂| 青青伊人这里只有精品| 98福利在线视频| 91美女国产在线| 色97欧美| 人人操人人肉久久精品| 老熟女91| 久久精品久久久久久久久| 一级做a爰片久久毛片图片| 日韩无码三级影院| 国产精品婬乱一级毛片彝族| 欧美,日韩,亚洲视频| 丰满的三级少妇欧美久久久| 九九碰九九爱97超碰| 国产精品老熟女一区二区| 日韩草久视频| 久久久久久91香蕉国产| 欧美综合777| 国产精品丝袜在线| 国产福利精品98视频| 影音先锋新男人| 精品国产www久久| 亚洲无码99| 精品人妻一区二区免费蜜桃| 九九热精彩视频| 午夜美女诱惑电源网| 91老熟妇| 国产亚洲日韩在线三区黑人| 蜜乳av首页| 亚洲精品一区二区三区新线路| 欧美激情片一区二区| 男人的天堂三级| 亚洲国产美女久久久久| 三级色综合| 丁香五月激情综合| 99热 按摩 日韩| JuliaAnnXXX888| 国产亚洲日韩欧| 日本亚洲熟女视频| 91欧美偷拍| 91久热| 91P0RNY大屁股人妻| 性爱1区| 国产女同性恋视频| 啊啊啊好大好深| 久久久久久久伊人精品| 长长久久免费视频| 无码久| 97精品| 国产超碰| 日韩操呦呦影院在线观看| 96麻豆精品一区二区三区| 国产乱伦亚洲| 一区二区三区 丝袜 高跟 美腿| 青青三级视频| 欧美不卡五十路| 91丨九色丨国产打屁股| 中文字幕综合人妻| 黄片www视频免费| 午夜精品视频777| 新视频sss国产| 国产综合色精品在线观看| 亚洲第一在线视频| 久草精品一区 | 欧美日韩黄色片一区二区三区四区人与兽做爱| 啊啊啊啊好疼视频| 国产精品嫩草影院午夜两性| 黑丝少妇在线观看| 97在线亚洲| 色乱二区| 国产成人天堂| 国产精品久久天天干| 国产黄a三级三级三级av在线看 | 蜜臀久久99精品久久久老,,| 久久久久久免费电影| 国产精品999zyz| 亚洲限制级| 欧美激情性久久久久久| 国产suv精品一区二区四| 精品久久97| 日韩一级片| 久操免费视频| 超碰在线成人| 青娱乐 青青青操 日逼| 日本在线激情一区二区三区| 日本精品九九九| 中文字幕交换人妻| 91精产一区二区三区| 亚洲91在线播放影院| 九九九九九九成人| 成人免费看吃奶视频网站| 久久天天躁日日躁狠狠躁| 成人av性爱电影在线观看| 中文字幕视频一区视频二区| 免费精品无码一级毛片牛牛影视| 亚洲不卡AV在线| 天天伊人| 亚洲 中文 女同| 国产婷婷综合在线观看| 激情图片伦理国产一区二区日韩| 少妇久久久久久| 色综合中文字幕不卡| www.av家庭乱伦| 久超超碰| 亚洲高清无码在线桃色| 污电影在线观看| 亚洲精品成人| 亚洲资源站| 中美日韩毛片| 久久黄色性爱视频| 208天天久久九九九| 91Chinese在线| 高潮精品| 91性感网站| 色婷婷五月综合激情中文字幕| 中国韩国明星一极片一区乱码毛片人妻熟女一区二区三区 | 97久久视频| 校园春色五月天| 国产大片精久久久久久| 中文字幕奈奈美被公侵犯| 国产熟女高潮一区二区三区| 天天做天天爱| 久久精品国产AV一区二区三区| 欧美一区二区成人一卡| 久久久免费一级黄片| 视频二区美腿制服人妻欧美| 啊啊啊啊视频免费| 人人看欧美性爱| 欧美人人AAA| 亚洲成人久久一区二区| 久久久久921| 欧美亚洲特P| 69少妇一区二区| 风月影院男女十八禁| 色色色色网站| 成人一二| 男人天堂无码| 免費人妻夜夜爽天天爽爽一区| 免费?级毛片无码?∨蜜芽试看| 91精品人妻五十路| 超碰97资源中文字幕| 女人喷水视频在线观看| 七月丁香婷婷| 限制级中的三级片中的黑粗大屌屌日人妻熟女 | 亚洲AV永久无码一区仙野| 亚洲国产精品无石码久久| 久久超碰大香蕉| 密桃99999| 亚洲中文国际强奸字幕| 国产400孕妇孕交群| 亚洲欧美日韩中文久久自慰| 亭亭丁香激情| 九九热超碰| 色官网色综合| 国产精品久久久啊| 992大香蕉| 色臀aV| 青苹果影院男人的天堂| 日本三级大片| 熟女人妇一区二区三区| 影音先锋日本一区二区| 亚洲97精品| av橘色网站| 日日日大屁股骚女人精品| 久久久久中出| 亚洲综合97中文网| 99热精品在线播放| 尤物一级在线免费观看| 亚洲精品性爱片| 成 人 A V免费视频在线观看| 外国免费性情大片| 欧美97av| 九久久精品| 一区二区三区色综合| 久久精品天美| 亚洲色图加勒比| 日本精品人妻少妇一区二区| 在线 制服丝袜中出 人妻| 自拍鲍鱼一区在线高清观看免费| 国产一级不卡在线观看| 亚洲性爱电影| 国产亚洲精品激情| 内射小黄片| 欧美传媒| 国产在线视频二区| 亚瑟国产精品久久无码| 国产午夜福利专区综合| 欧美日韩国产成人高清| av影片在线观看不卡| 久久少妇| 超碰78| 搡老女人911熟妇老熟女| 91春色| 26uuu久久| 天天躁日日躁成人字幕aⅴ| 国产超碰AV在线精品| 浓厚中出中文字幕在线| 6080YYY午夜理论片在线观看| 嫩草在线视频| 国产专区第一页| 强奸乱伦资源| 日本午夜久久电影| 日日夜夜天天| 东北女人av| 99re只有精品| 中国黄色特级精品一区二区三区片| 色天堂在线观看| 91麻豆天美国产欧美高潮| 美女黄页网站| 日本成人在线不卡一区二区三区| 天美传媒精品一区二区| 国产亚洲深夜激情| 丰满岳乱妇一区二区三区| 丁香六月东京热| 亚洲欧美成人在线| 亚洲色堂免费视频| 国产精品熟女九九九| 果冻传媒一区二区三区| 久热这里只有精品9| 成人一二| 国产精品自在线发布| 欧洲熟妇xxXx欧美老妇裸体| 920日本午夜免费| 欧美性,亚州色| 后入福利视频| 亚洲欧美色图片| 欧美黄色大片在线观看| 亚洲精品中文字幕一区在线视频| www.久久99| 久久精品天美| 好湿好紧视频| 国产日韩无码一区二区三区久久区| 亚洲免费在线探花| 91超级碰碰碰| 夜夜国产一区| 欧美丝袜中文字幕07在线| 日韩福利综合一区| 欧美十八禁在线看| 亚洲国成人情色好看电影| 成人资源中文字幕在线观看| 97色碰| 中文字幕在线观看二区三区| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 九九综合九九综合| 亚洲av淫乱| 青青草亚洲一区 | 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 国产高清不卡视频| 78m成人视线| 一起草日韩| 91色女| 超碰97久| 综合操逼| 熟女中出视频| 91爱网| 中文字幕性感少妇av| 欧美久久婷婷| 91老熟妇| 婷婷五月天成人网| 1024午夜激情男人的天堂| 亚洲熟伦熟妇AV无码春色| 99热精品在线播放| 2019亚洲男人天堂| 熟妇xxxxx性春色| 日韩精品.久久精品.AV女优.天美传媒| 男女性扦B| www亚洲免费| 人妻插插人妻人| 9999久久久| 香蕉综合网| 蜜臀在线网站| 欧美日本一区二区a人| 亚洲天堂自拍| 精品无码久久久久久久杏吧| 亚洲天堂区| 欧美综合综合| 精品性爱无码在线播放| 韩国嫰模上门援交视频| 蜜乳av一区二区| 欧美狠狠弄| 97超碰人人模人人拍人人| 先锋精品av色鲁| 天天综合~91| 最新日韩黄片| 四虎影视永久在线观看精品免费网站| 色黄污美女啪啪啪免费网站| av情色影音| 国产亚洲色停停久久99精品91| 久久精精区一区二区一蜜桃一区二区| 精品国产乱码久久久久久久| 国产动漫操逼视频| 亚洲做性| 婷婷五月天av| 搡老女人老熟女91老熟女综合网| 五月丁香综合啪啪| 91综合天天| 丁香五月成人| 欧美AB在线| 久久伊人在线五区| 午夜视频黄| 97日视频| 久久亚洲AV成人精品无码| 欧美高清在线| av在线资源| 亚洲综合20p| 熟女色图在线| 三级色综合| 91色人| 涩五月婷婷| 久久精品国产Aⅴ| 精品97久久综合| 青青伊人这里只有精品| 久久久久国产精品人妻aⅴ天堂| 91精品国产高清久久久久久,亚洲成人 | SS久久| 91人妻素女| 男人天堂导航| 欧美AB在线观看| 黄色电影在线播放综合网站| 成人久久久精品| 九九碰九九爱97超碰| 亚洲图片激情小说| 精品小视频在线| A片 AV一级在线播放观看免费| 国产91美女视频| 人人操天天爽| 日日操丁香五月天| 中文三一区| 91伊人大香蕉| 免费综合亚洲中文| 女人天堂av在线播放| 欧美97视频| 色色99| 国产在线观看91精品一区| 熟女91网| 偷拍欧美综合| 无码WWW免费视频网站| 国产熟女一区二区| 综合网久久| 伊人久久婷婷| 日本性爱欧美性爱| 久久精品无码专区| 麻豆 亚洲 97| 深爱五月婷婷| 美国一区二区三区视频| 欧美宗合网| 久久亚码| 久久超碰爱| 亚洲日韩成人性爱视频| 欧洲在线性爱视频| 九九九九九九免费视频| 999久久久久久久精| 亚洲aV性爱| 思思视频免费看网站| 啊啊啊好大好深| 97精品97久久| 中文字幕日产av人| 综合色色婷婷| 成人激情无码在线视频| 国产91福利小视频在线观看| 天天综合站| 成人五月天色网| 无码99| 97色色婷婷| 夜夜影视四色| 亚洲精品乱码线路中文字幕| 97天天摸天天爽| 婷婷10月天青娱乐| 97免费视频在线观看视频| 观看视频图片一区二区三区| 色婷婷丁香五月天| 日韩免费看黄片| 欧美日韩不卡a片| 无码137片内射在线影院| 丰满人妻一区二区三区免费| 亚洲好色人妻| 亚洲综合69| 亚洲91网站| 久久只有精品一区二区三区| 天天日老熟妇| 啊啊啊啊嗯嗯嗯用力好爽| www.色婷婷色综合| 久久免费精品视频免一| 五月天社区| 一区二区三区四区姦女| 水澄无码AV| 五月天色五月| 激情综合五月| 亚洲中文字幕网| 综合欧美日本三级| 国产99久久99热这里只有精品15| 色黄污美女啪啪啪免费网站| 精品免费视频国产一区| 国产精品操| 屁股久久久久久久| 国产成人久久精品蜜臀| 天天干电影| 97免费在线观看| 亚洲另类天堂| 97在线免费观看| 操逼操2| 中文乱码字字幕在线第5页| 婷婷丁香激情| 黄片视频观看| 69av一区二区三区| ,成人免费啪啪视频| 蜜乳Av成人片网站| 国产黄色 A 片免费看| 91爆操视频| 亚洲精品亚洲人成人网| 色99在线| 91neishe| 成人色女网| 美女91av| 少妇精品| 欧美成人性爱视频在线播放| 国产精品爱欲|