色五月色开心色婷婷色丁香,五月婷婷丁香花综合网,婷婷丁香五月激情综合在线,五月婷婷六月丁香动漫,婷婷丁香五月激情综合在线,丁香花中文字幕在线观看,播五月色五月开心五月网,开心激情综合网,狠狠色丁香婷婷综合最新地址,丁香视频在线观看,狠狠做六月爱婷婷综合av,久久激情五月丁香伊人

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(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)證回答的是“你是誰(shuí)”它關(guān)心身份的真實(shí)性比如用戶提交用戶名和密碼服務(wù)端確認(rèn)這個(gè)身份確實(shí)存在且憑證匹配。授權(quán)回答的是“你能做什么”它發(fā)生在認(rèn)證之后關(guān)心權(quán)限邊界比如這個(gè)用戶是普通員工還是管理員能不能刪除訂單。為什么一定要把這兩者拆開理解因?yàn)樗鼈兊氖√幚矸绞酵耆煌?。認(rèn)證失敗是“我不認(rèn)識(shí)你”通常返回 401 未授權(quán)狀態(tài)碼前端應(yīng)該跳轉(zhuǎn)登錄頁(yè)授權(quán)失敗是“我認(rèn)識(shí)你但你不能這么做”返回 403 禁止訪問前端應(yīng)該提示無權(quán)操作。如果代碼里把兩者揉在一起就會(huì)出現(xiàn)“權(quán)限不足卻把用戶踢回登錄頁(yè)”這種體驗(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ò)展變得簡(jiǎn)單任意實(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 庫(kù)方面本文使用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ù)庫(kù)查。3.2 簽名算法與密鑰長(zhǎng)度本文使用的是 HMAC-SHA256HS256對(duì)稱加密簽發(fā)和校驗(yàn)用同一個(gè)密鑰。它的優(yōu)點(diǎn)是性能好、實(shí)現(xiàn)簡(jiǎn)單缺點(diǎn)是所有校驗(yàn)方都持有密鑰等于所有校驗(yàn)方都能簽發(fā)。如果你的系統(tǒng)里調(diào)用方很多、安全邊界復(fù)雜應(yīng)該考慮 RS256 這種非對(duì)稱算法私鑰簽發(fā)、公鑰校驗(yàn)校驗(yàn)方拿不到簽發(fā)能力。密鑰長(zhǎng)度是一個(gè)必須重視的點(diǎn)。Keys.hmacShaKeyFor()對(duì)密鑰有最小長(zhǎng)度要求HS256 要求至少 256 位32 字節(jié)。如果你圖省事寫一句secret運(yùn)行時(shí)就會(huì)拋WeakKeyException。這不是框架在刁難你而是短密鑰確實(shí)容易被暴力破解。密鑰的管理方式更需要強(qiáng)調(diào)絕對(duì)不能硬編碼在代碼里提交到倉(cāng)庫(kù)。正確做法是通過環(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 注入不要提交到倉(cāng)庫(kù) 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 { /** 簽名密鑰長(zhǎng)度至少 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; // 密鑰長(zhǎng)度不足 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ù)密鑰長(zhǎng)度自動(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ù)庫(kù)查詢 */ 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ù)庫(kù)或緩存并且要注意無論用戶是否存在都不要在響應(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)髯詈?jiǎn)單也最容易踩坑的方案服務(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í)長(zhǎng)線性上升。輪換的難點(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密鑰長(zhǎng)度不足 32 字節(jié)換用足夠長(zhǎng)度的密鑰或改用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 分鐘刷新令牌有效期長(zhǎng)比如 7 天刷新令牌一次性使用并且可撤銷。這樣既控制了泄露后的風(fēng)險(xiǎn)窗口又不會(huì)讓用戶頻繁重新登錄。刷新令牌必須存儲(chǔ)服務(wù)端狀態(tài)否則就失去了“可撤銷”這個(gè)核心價(jià)值。密鑰管理納入發(fā)布流程。密鑰不要放在代碼倉(cāng)庫(kù)、不要放在前端、不要出現(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í)從簡(jiǎn)單的角色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
返回資訊列表
欧美人妻中出| 第45页一区二区| 性色综合网| 天堂资源站| 久热大香蕉| 东京热男人的天堂精品| 女性91网站| 欧洲亚洲综合| 亚洲综合在线91| 欧美 亚洲 另类 综合| 五月花婷婷| 久草免费福利在线播放| 欧美不卡五十路| 夜夜免费视频| 四虎免费视频| 久久6热精品99视频| 婷婷香蕉欧美在线一区二区三区| 超碰在线看| 亚洲最大的综合性av| 免费一级精品啪啪视频| 黄色免费一级在线毛片| 日韩久久.一级黄色片| 青娱乐老司机视频| 熟妇综合一区二区三区| 性色aV一区二区三区噜噜| 欧美最大综合网| 超碰综合色| 夜夜高潮夜夜爽高清视频一 | 97久久视频| 久久黄色视频一区二区三区| 日韩性爱免费观看视频| 毛片久久| 精品无码一区二区三区| 日韩有码 一区二区三区| 天天射天天色成人| 日韩无码三级影院| 国产高清26uuu| 国产精品分类在线观看| 熟妇的味道HD中文字幕| 可以在线观看AV的网站| 中国乱伦一区二区| 一级特级aaaa毛片免费观看| 色综合色| 啊啊啊好爽快点啊啊啊嗯嗯| 日本一二区免费| 久久神马影院| 四虎在线免费视频| 91骚熟女| 日韩激情电影中文字幕| 老司机天天操| 亚洲天堂无码| 精品人妻1237| 玖玖爱一区在线| 日韩视频小说在线观看| 99视频自拍区| 日本精品中文字幕视频| 日本午夜操逼| 蜜桃成人1区2区3区| 四虎永久在线精品免费网址 | 99re视频在线播放青草| 亚洲国产精品V?在线播放| 免费av在线播放二区| AA级电影三区| 日本欧美成人片AAAA| 久久精品人体| 91丝袜激情在线 | 九九探花视频在线观看| 色999偷自拍拍| 精品九九九九九九九九九| 亚洲中文字幕久久无码精品| 97免费在线视频| 国产精品亚洲无码| 国产一级片| 中文字幕一区二区三区蜜臀| 99在线精品观看视频中文 | 国产67194| 91 丝袜在线| 2020中文字幕在线| 国产精品无码成人精品| 午夜精品99久久久久传媒| 九月AV| Aa东京男人的天堂| 囯产精品久久久久久久久久梁医生| 一本精品日本在线视频精品| 五月婷婷激情网| 欧美 亚洲 大香| 无码人妻毛片丰满熟妇精品区| 干我久操| 夜夜嗨一区二区| 亚洲素人网| 日语五十路和六十路亚洲国产精品 | 亚洲精品官网在线观看| 国产乱码久久| 91亚洲人| 亚洲性综合9| 91男人天堂网| 亚欧性爱ab| 91啪9色| 国产97av| AV免费在线播放一区| 97久精品| 97国产精品一区二区传媒公司| 一本一道波多野毛片中文在线| 6080yy午夜理论三级一区二区三区无码 | 九九热精品视频六| 日韩在线观看中文字幕视频| 亚洲精品人体| 久久久激情| 亚洲综人网| 嫖老熟女A片一二三区| 亚射在线| 秋霞成人一级在线观看| 午夜天堂网| 国产精品久久久| 99在线精品观看99| 久久春色| 日本一区三级韩国| 超碰97人妻在线| 五月天偷拍| 欧美在线大香999| 草草网站影院白丝内射| 大屁股国产在线视频| 免费日韩黄片| 成熟熟女国产精品一区二区| 国产午夜无码片在线观看影视| 啊啊啊啊啊好大好舒服想要| 亚洲一级特黄大片在线播放91| 精品久久97| 中文操嬖片。| 亚洲资源吧| 免费视频a级毛片免费视频| 亚州色阁| 婷婷丁香熟妇综合网| 亚洲色婷婷综合久久一区二区三区| 日本国产成人亚洲精品无码| 97手机日韩| 97超碰69| 国产一区二区精品久久99| 欧美色图下一页| 婷婷视频在线免费观看| 久久久无码精品人妻二区 | 欧美日韩超碰在线| 国产欧美岛国精品一区| 在线视频资源| 97天天做| 九九综合久久| 麻豆久久精品亚洲精品88 | 中文一区二区三区影院| 中文字幕55555| 少妇干B| 久久中文字幕女同性恋一区| 亚洲高潮少妇| 在线中文字幕极品av| 超碰超碰超碰超碰的大鸡吧操黑丝袜 | 97综合在线观看| 欧美福利视频啊啊啊啊| 神马麻豆福利院| 用力操死我| 日本在线激情一区二区三区| 人人性爱视频免费| 玖玖资源视频一区二区三区| 美女的肌被草喷水视频| 婷婷五月天久久久| 日本熟女免费視颖| 男同专区一区二区三区在线| 欧美综合网1| 亚洲黑丝在线| 太久视频| 国产美女自拍AV| 中日992视频| 久久av色| 久久久久久久少妇| 欧美亚洲国产自久久| 国产真实野战在线视频| 大香蕉免费3| 亚洲高清91| 乱老熟女一区二区三区| 天无日色综合| 色色色色综合网| 综合伊人激情| 高清孕妇孕交| 三四中文字幕| 一二三四区操操Av| 日本男人插女人的逼黄色| 久久人妻精品| 蜜桃无码AV一区二区| 久草精品国产99| 日本媚薬中文字幕在线| 欧美丝袜中文字幕07在线| 欧美72网页| 欧洲综合视频| 熟妇人妻精品一区二区视频色欲| 五月激情小说| 亚洲人妻AV| 色呦呦呦在线观看视频| 1人人看人人摸人人操| 91激情| 99视频自拍区| 97视频免费在线| 亚洲男人的天堂网| 国产精品久久久久久久久久久久久久久 | 黑操B| 九九九九九九九精品视频| 日韩,欧美,中文在线| 国产91啪| 欧美性爱十八禁| 无码WWW免费视频网站| 色操逼网| 日韩精品碰碰| 国产精品视频一区二区三区八戒| 国产精品亚洲天堂网址| 久精品无码av一区二免费国产在线观看| 日韩中文字幕视频| ,成人免费啪啪视频| 国产亚洲精品精AV.| 毛片久久| 久久五月天婷婷丁香中文字幕| 人人妻碰人人免费| 亚洲视频1区| 黄色片一区二区三区四区五区| 日本精品中文字幕视频| 午夜福利一区二区影院| 91成人久久| 人人操人人操草草| 日韩精品区二区三区不卡| 亚洲色色色| 欧美熟爽综合| 久久久久久波多野吉衣高潮| 天天干夜夜操一区二区| 啊啊啊好多水| 精品人妻中文字幕4399| 最新日产中文在线麻豆| 国产一区麻豆免费观看| 死我十八禁| 91人妻在线视频| 在线免费观看高清无码视频| AA特级绝黄| 99操逼| 日本天堂网| 亚洲成人妻日韩在线| 少妇蹲下买菜露大唇0| 欧美日韩小说| 午夜亚洲WWW湿好大| hd成人一区二区在线| 色五月综合网| 999综合色| 亚洲a色| 无码高清少妇久久| 殴美,日韩国产伦精品| 综合网久久| 欧美综合色图片| 操逼网站网站| 91操人| 天操老女人| 91中出视频| 亚洲三区视频| 成 人 影视 一区 二区 三区 四区| 女人的天堂大香蕉网| 国色综合天| 日韩性爱毛片操骚逼| 久久久一区二区三区四曲免费听| 99久久9| 亚洲影院成人| 99热婷婷| 中文一区二区| 性色av大全| 国产一区二区三区中文字幕| 日本精品九九九| 人人搞人人插人人操| 色综合尤物| 无码操逼天堂| 国产操伦| 日本大香蕉| 大香蕉一级黄色片久久| 懂色AV一区二区三区| 国偷自 一区| 午夜国产乱伦视频| 岛国小电影| 亚洲高清91| 国产无码一二三区| 天天操天天7| 豆花视频操逼网址| 91天美传媒精品| 久久久性| 开心六月色| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 九九精品美女高溯喷水| 天天日天天干少妇日| 久久久久婷婷| 欧美视频一区二区三区| 大香蕉综合网| 国产精品96久久久久久| 色五月婷婷麻豆在| 福利视频合集| 999久久久九| 久久97超碰| 久久久久久久久久久久久9999| 啊啊啊想要| 一本一道人妻久久一区二区三区 | 欧美少妇第一页| 亚洲日韩在线a不卡99精品| 九九热男人天堂| 欧美色女人| 日韩美女久久一区二区三区| 亚洲欧美一区二区网址| 啊啊啊不要啊啊受不了了视频在线| 亚洲天堂久久久久久粉红视频| 中文无码一二三区| 国产网红精品| 999久久芭蕾| 99精品在线| 久久一区二区三区四区五区| 日韩美女久久一区二区三区| 操逼逼福利视频| 啊啊啊慢点| 天天操av懂色| 人妻乱仑一区二区三区| 97国产精品一区| 69精品在线| 亚洲精品一区二区精品| 后入式999| 久久草大香蕉| 国产狂喷潮在线精品| 91国产丝袜美女| 99热91| 热思思免费视频| 亚洲黄a三级三级三级看三级| 婷婷综合激情| 蜜乳成人AV| 亚洲伊人青青草| 青青草原狼av| 日韩成人色图| 999国产精品999| 色色毛片| 久久超碰日韩精品| 91在线一起| 91扒丝袜综合在线| 国产99 中文字幕日韩小视频| 神马久久久久久久| 久久9免费视频| 黄页大片在线观看| 欧美大香蕉专区网| 婷婷操视频| 精品超碰色| 无码视频一区二区| 天天狠| 欧美网站免费| 欧洲亚洲国产综合在线| 亲子敌伦对白在线播放| 成人九九| 色69大色97香蕉| 伊人网在线观看| 狠狠狠狠狠狠| www.人人cao| 在线观看亚洲成人精品| 亚洲国产精品无码AV久久| 日本熟妇精品九九| 91性| 男人的天堂欧美| 伊人久久88国产女| 九月丁香婷婷| 色色色999| 亚洲第一精品在线视频| 蜜乳视频网站| 久久精品 六十路 熟女 欧美| 日韩电影中文字幕| 日本精品一区二区三| 国产精品高潮久久AV| 久久色人体 | 国产AV线| 99精品综合久久久久五月天| 亭亭在线资源| 精品少妇一区二区三区| 看看日B真人视频| 天堂射| 精品9区| jiujiujiujingpin| 91激情网| 亚州图片第一页| 91草草草| 久久6热精品99视频| WWW.加勒比人妻一区不卡.com| 久热69九色熟妇97| 美日韩一卡二卡三卡免费人妻精品| 性吧在线视频| 亚洲成人一二三区| 操人妻逼91| 狠肏骚人妻| 人人澡综合涩| 精品久久九| 韩日自拍| 外国免费性情大片| 欧美少妇色图| 性爱综合一区二区| 爽极品影院| 99在线无码精品秘 入口黑人| 亚洲国产ⅴ高清在线观看| 久久黄片国产一区二区| 美国人人操人人操| 天天爽天天| 天无日色综合| 在线观看视频91| 97精品视频在线播放| 日韩精品午夜操呦呦不卡影院| 综合色一区三区二区| 1769成人国产精品视频| 久久青青草原免费视频| 秋霞曰韩R级| 国产精品一区人妻精品阁在线| 曰韩欧美国产传媒麻豆第一区| 蜜臀AV成人精品蜜臀AV久久| 九九免费影片| 国产精品日日摸夜夜添骚逼| 欧美aa一级片| 久热免费视频| 99蜜桃臀久久久欧美精品网站| 亚洲国产蜜臀系列在线观看| 欧美一级二级三级| 亚洲精品一区二区精品| www色婷婷| 男人的天堂欧美| 精久久久| 国产操伦| 欧美亚洲性爱一区二区| 久久久久幕乱码| 婷婷久久五月综合激情| 在线观看av区| 欧美中字二区| 九九草| 日韩性爱再线视频| 丝袜喷水在线| 久久尹人大香焦视| 国产精品婬乱一级毛片彝族| 熟妇高潮一区二区免费视频| 天天操福利视频综合网站| 国产成人亚洲精品无码最新在线| 亚洲一区中文字幕一区| 日韩电影天堂视频一区二区| 啊啊啊好多水| 大香蕉九九| 亚洲天天影视色综合| 白丝一区| 91丝袜美女国产| 日本最新1区2区3区| 在线视频亚洲无码| 五月色综合| 欧美人妻熟女在线| 思思热久久成人| 精彩视频日韩| 欧美亚洲中文| 91爱综合| 亚洲国产日韩精品久久久| 国产亚洲中文不卡二区| AV在线资源| 国产女大学生AV| 丁香五月成人| 国产9l 大屁股| 亚洲成?V人片在线观看福利| 少妇内射视频| 亚洲成人福利电影免费| 98福利在线视频| 国产精品ⅴ无码大片在线看.| 96精品在线| 欧美亚洲首页| 亚洲AV小说| 91 丝袜在线播放| 成人夜夜爽| 好爽免费视频| 四月丁香婷婷| 天天操人人操狠狠插| 四季AV综合网址| 国产无码精品久久久久久| 久久天天摸| 亚洲福利影院一区久久| 裸体女人草逼视频播放一区,二区,三区,四区,五区 | 精品 码产区一区二-1080P高清在线www-B029AV| 加勒比av网| 亚洲免费人妻在| 日本ZZ高免费A级视频| 成人网站 免费观看| 亚洲精品黑丝| 久热超碰| 日韩成人无码| 午夜毛片高清免费不卡| 亚洲免费人妻在| 99热这里只有精品1| 成人精品在线观看| 大香蕉伊人网| 另类av综合久久| 囯产乱伦一区二区三女| 午夜美女诱惑电源网| 日韩人妻精品久久久久| 免费A片三p视频| 97超碰资源网| 色婷婷狠狠| 久久丁香久草综合网| 美女丝袜激情小说| 麻豆天美电影一区二区| 国产日韩精品无码去免费专区国产| 91综合国产精品| 人人透人人操| 操B视频日韩无码| 欧美黑人91| 曰韩欧美国产传媒麻豆第一区| 久久久一区二区三区三州| 久久视频,这里只有精品| 综合色播| 男女性感激情网站| 99热销国产这里有精品| 久久有码| 国产欧美美女免费观看视频| h4610国产人妻| 久久久人妻| 狠狠爱AV| 在线视频一区二区传媒| 婷婷久月| 91精品国产日韩欧美综合| 亚洲交性| 亚洲图片 欧美电影| 久久綜合很很很| 色色99| 免费亚洲黄色视频在线观看| 99re9| 99精品综合久久久久五月天| 天操老女人| 丰满人妻一区二区三区四| 精品v日韩欧美国产| 综合激情二| 日韩97在线| 欧美性五月| 欧美91在线+|+欧美| 无码人妻1727| 亚洲一区日韩精品中文字幕| 久操大香蕉手机视频在线看| 嗯啊抽插大香蕉网页| 亚洲人妻在线精品| 精品一区二区三区蜜桃| 亚州欧美综合| 久久久九九九九| 97人人中文网| 精品久久99| 97色色色| 99综合免费视频| 26uuu国产免费观看| 亚洲国产av中文字幕久久| 亚洲欧美人妻| 欧美色图20p| 日日摸日日碰夜夜爽视频| av草草在线电影| 精品人妻无码一区二区三区不卡-精品人妻无码一区二区...|精品少妇一区二区三 | 国产精品一二三免费网站| 中文自拍欧美影视| 国产视频一区二区免费| 无码国产精品久久久久| 探花熟女,姿勢到位,體驗感也到位| 国产中文字幕在线点播| 91香蕉视频在线观看免费| 三级精品三级在线观看| AV一起草在线| 超碰无码加勒比| 精品久久久久久无码| 国产精品爆乳懂色蜜乳| 69XX一中文字幕人妻91| 在线亚洲 欧美 日本专区 | 在线视频五十市| 97亚洲资源| 女人的天堂大香蕉网| 青青草五月天| 日本国产二线女色| 欧美男人的天堂| 91亚洲人| 亚洲AV成人无码一二三久久| 97人人操人人摸| 久久久成人国产精品无码| 国产高潮AA片免费看| 婷婷色网| 精品乱子一区二区三区99| laoshunv91| 蜜桃臀一区二区三区久久| 国语精品av| 蜜臀久久99精品久久久久| 亚洲 欧美 日韩 国产一区二区| 欧美日韩性爱电影在线| 国产亚洲禁久一区二区| 精品丰满人妻一区二区三区免费观| 日韩女优中文字幕| 久久人妻无码毛片A片麻豆| 日本高清视频在线观看黄已三辽| 亚洲黑人在线| 日韩欧美中文| 日韩高潮一区| 亚洲男人的天堂在线看| 男女国产精品| 色婷婷激一区二区三区| 超碰97欧美在线 | 操逼操逼逼操操逼91| 久热这里| 日韩精品怡红院| 久久久久白虎| 国产探花精品在线| 男人的天堂,欧美亚洲另类国产日韩,日本高清一区二区 | 精品国产自在在线99| 成人在线午夜视频一区| 97天天操| 久久鲁干| 香港日本韩国人妇99www.wccm20| 91N综合网| 一级特黄aaa大片在线观看成人一级片在线观看 | 3p国产欧美99热| 成人色女网| 激情综合 婷婷五月 红杏| 国产丝袜美女在线一区| 亚洲第一综合| 久久久久久中文| 久久日韩精品一区二区| 久久精品国产精品亚洲艾通辽熟妇 | 国产不卡片| 久久久久久99999国产精品| 熟女激情综合网| 99热精品在线观看| 亚洲综人| av无码av无码专区| 久操九九九九九九九九九九九九九九九九九九九九九九九九九九九九 | www.夜夜操| 色天使AV天堂| 在线一道啪| 亚洲精品欧洲精品| 91狠狠| 乱精品一区字幕二区| 熟妇无码视频三区| 亚洲美女自拍偷拍视频| 999 久久久| 青草草免费网站av| 插老姨肥穴| 亚洲一区中文精品| 嗯嗯,啊啊,国产精品| 91A欧美电影网站| AV电影在线播放| 亚洲国产97在线精品一区| 国产不卡免费在线视频| 久草男人天堂| 日韩色欲久久一二三四区| 诱惑人妻欧美一区在线播放| 国产精品午夜福利亚洲综合网| 伊人五月天青青草婷婷| 亚洲综合第一页| 欧美 亚洲 制服 精品| 香蕉视频欧美一卡二卡| 亚洲色偷偷色噜噜狠狠99网| 五十路熟女人妻一区二区在线观看| 久久精彩视频| 九九九九精品九九九九| 艳美熟妇先锋一二三区| 日韩欧美亚洲自拍偷拍| 91久久久视| 99re国产精品视频| 破处bbq| 午夜精品视频777| 久夜操| 国产丝袜美女诱惑| 黄色香蕉视频网站一区| 国产精品天干天干综合网麻豆| 国产人伦a片信息免费片| 我爱搞逼综合网| 日韩不卡av一二三| 激情欧美97| 日本伦理一区二区| 精品人妻一区二区视频| 丁香7月婷婷| www.夜夜操| 一级做受视频免费是看美女| 久久久久久波多野吉衣高潮| 福利色色| 人妻夜夜爽天天爽三区麻豆AV网站| 夜夜爽妓女| 99久久精品无码一区二区| 色欧美在线| 射丝袜高跟鞋99| 男女激情黄色网址| 九热久| 制服少妇欧美| 色五月婷婷中文字幕| 偷拍 欧美 日韩| 综合色久欲| 福利风月五月天影院| 殴美在线AⅤ| 夜色综合| 中文字幕精品三级久久久| 中文字幕 人妻不满 在线视频| 中国操逼无码| 日本久久久久久久久久| 91偷拍欧美亚洲| **一级毛片国产| 黄片qw| 午夜欧美精品久久久| 久久欧洲| 五月丁香六月| 国产三级日产三级韩国三级| 日韩在线观看三级电影| 天天综合网视频91| www.高清无码诱惑一区.com| 首页亚洲国产高跟丝袜诱惑视频 | 人人爱夜夜爱| 婷婷五月天基地| 欧美另类综合久久| 亚州熟女乱伦| 伊人骚琪琪亚洲天堂网站| 少妇色综合| 色爱综合网欧美| 在线黄页看毛片| 牛牛aV| 天天操夜夜操狠很操| 狠狠超| 97超级久久| 亚洲青青草| 精品亚州18| 成人日韩中文字幕| 伊人影院中文字幕| 99精品视频在线观看| 亚洲码专区| 伊人五月天激情| 97在线视频观看网站| 黄片免费日韩| 色姑娘综合网| 中文字幕99999| 一二三区精品视频| 亚州欧美在线| 夜夜嗨一区二区三区直播内容| 午夜精品久久久久久久| 小明看看网址| 久草草一二三四区久久| 久久精9| 欧美暴力猛交| 影音先锋一区二区在线资源| 青青草伊人久久| 色老汉色| 无码视频一区二区| 欧美aⅴ99久久黑人专区| 亚洲欧洲无码97久久精品| 福利风月五月天影院| 国产久久久9999| 99久久com免费视频′| 97色冈| 超碰97资源大奶| 少妇一区二区三区在线观看| 欧亚不卡| 校园春色中文字幕AV| 久偷拍欧美日韩三区| 色哟哟av网址| 人妻少妇无码| 亚洲国产天堂| 精品无码欧美三级| 涩综合导航| 18禁美女裸体无遮挡啪啪| 一级黄色性爱A级片| 92人人操人人| 日日狠狠久久偷偷色综合免费| 国产精品天美传媒| 又黄又粗又硬又长又大| 校园春色综合香蕉| 久久有码视频| 日韩成人高清一区二区| 吖在线不卡一区二区国产剧情| 色欲蜜臀AV| 激情小说五月天| 97国伦国色| 蜜桃狠狠色伊人亚洲综合 | 一区二区三区黄片免费观看| 人妻中文字幕日韩电影| 国产丝袜视频| 麻豆精品天美| 东北熟女91| 国产精品蜜臀久久久久无码AV| 久草网站免费在线观看| 色综合五月天| 亚洲精品国产av天美传媒| 色哟哟av| 桃花色综合影院| 中国探花熟女| 成人老鸭窝人人在线视频| 欧美骚少妇| 在线免费观看高清无码视频| 屁屁影院一区二区三区国产| 日韩中字av一区| 热热色国产一二区AV| 在线观看中文字幕| 亚洲黄网在哪免费看| 熟女在线视频| 久久久999国产| 日韩综合成人免费视频| 亚洲五月天激情| 裸体1区| 精品人妻一区二区三区在| 中国国国产一级特黄毛片| 欧美在线官网| 丰满熟妇大乳做爰| 国产对白刺激视频| 97操97色| 99999亚洲| 国产成人自拍视频在线| 大香蕉欧美国产日韩高潮| 国产传媒日韩欧美| 午夜男女爽爽爽在线视频 | 综合久久六月久久婷婷| 老熟女熟妇| 超碰78| www.婷婷| 91痴汉| 一级啊性爱在线视频| 欧亚日韩三区| 少妇一级无码精品| 精品国产少妇高潮视频| 久热这里| 欧美劲爆视频一区二区| 超碰综合色| 午夜福利1区2区3区| 欧美天天拍| 午夜欧美精品久久久| 1769精品一区二区三区| 日韩一级二级三级免费看完整版国语版 | 97超碰日韩| 久热这里| 国产白丝AV| 五月天伊人| 91精品人妻一品二品三品| 天天躁日日躁XXXXYY| 99精品久久久久久| 999亚洲国产视频| 九九热在线精品视频| 另类TS人妖一区二区三区| 国产黄色动态精品| se吧提供国产乱老熟视频胖女人 | 国产激情视频一区区三区| 亚洲nv男人的天堂网| 亚洲欧美97√| www.91色综合| 92一区二区| 亚洲。日韩。欧美| 国产操逼网站亚洲一级黄色| 99久久无色码| 国产极品粉嫩馒头一线天av| 国产高清不卡视频| 国产一区二区a毛片| 日本久久999| 九九无码视频| 五月天伊人网| 日韩一999精品| 另类小说综合网| 欧美大干日韩| 97人人模人人爽人人| 超碰碰97资源站| 嗯啊啊啊轻点视频| 天天躁日日躁AAAAXXXX国产 | 思思热在线视频免费| 黄网站黄视频网站进入口| 18禁中文字幕| 欧美丝袜亚洲| 久久伊人在线五区| 天天操天天干一区二区 | 久久国产成人精品国产成人亚洲 | 日韩精品中文字幕一| 欧美97se| 9999伦理视频| 国产区性爱在线视频秋霞豆| 国产97色在线 | 亚洲| 嗯嗯啊中文字幕| 色y情视频免费看| 天天综合网合集91| 97国产超湿| 亚洲人妻在线一区| 九九九国产| 久久久久久91香蕉国产| 在线观看日韩av不卡| 欧美色涩| 日本加勒比无码专区一二三| 色婷婷综合久久久久中文国产精品一区中文字幕,国产福利电影一区二区三区 | 97色综合中文网| a人欧美综合天堂麻豆| 天天看,天天做| 午夜男女爽爽大片免费观看| 加勒比av网| 人人操天天爽| 337p大胆噜噜噜噜噜91Av| 国产毛片毛片4p懂色| 久久精品99| 日韩天堂av电影在线观看| 久久精品亚洲成a人天堂| 国产精品 视频| 久艹视频在线| 精品一区二区三区四区女| 亚洲AV免费在线| 午夜啪啪片| 免费在线看黄片av| 97中文综合| 九九九九九精品十六| 95精品在线| 免费一级毛片在线视频观看| 强奸乱伦AV网址| 色汉综合| 0755午夜福利视频| 欧美 综合 亚洲| 天天影视激情欧美| 欧美激情综合色综合啪啪五月| 国产av强奸美女| 亚洲 欧美 精品专区 极品| 啊啊在线| 97情超碰色| 精品无码一二三四区| 青青草密桃在线播放| av婷婷色婷婷色六月| 99在线免费公开视频| 久久AV无码AV| 美女诱惑久久| 超碰超碰超碰超碰的大鸡吧操黑丝袜 | 亚洲瓯美色图| 青青草九九九九九| 啪啪综合网| 国产成人无码久久精品| 国产精品自在线发布| 正在播放国产精品一区| 黄色免费网| 亚洲欧美高清无码| 亚洲国产另类在线中文| 我要色综合网| 天天综合欧美| 欧美AB在线| 中文久久久| 欧美一二三| 高清孕妇孕交| 翔田千里A片一区二区| 91色交| 亚洲春色一区二区三区| 人人操人人色网| 精品免费视频国产一区| 2017大香蕉| 国产中出内射一区二区| 偷拍 欧美 日韩| 韩国三级一线观看久| 日本东京热久久久电影| 综合伊人网12色| 1769一区| 天天做日日做| 欧美日韩国产中文精品字幕自在自线| 日韩精品一区二区日韩| 先锋色眉乱伦资源| 91精品人妻电影| 色综合色欲色综合色综合色综合| 成人午夜视频免费播放| 男人的天堂啪啪| 国产视频三区四区| 久超超碰| 欧美洲精品一级| 97色操| 亚洲国产综合图区中文字幕| 精品一级毛片在线观看| 日韩极品无码B| 一区二区三区免费岛国片| 破苞ⅩXXX性无码动漫无码| 国产精品亚洲美女久久久久| 人妻少妇久久久| 亚洲天堂女优在线| 青青草字幕AV| 日韩欧美久久婷婷网站| 97超碰香蕉| 伦激情人妻另类人妻| 大香网站| 日韩啪啪啪啪啪| av午夜玫瑰| 亚洲素人综合| 欧美后入| 亚洲欧综合另类无码一区| 国产成人+综合亚洲+天堂| 奸色色 男人天堂 天天射| 欧美日韩国产电影| 91丝袜人妻| 亚洲无码精品AV久久久| 中文字幕亚洲热播人妻| 丁香六月天| 日韩欧亚中文在线| AV女资源| 欧美性爱免费短视频| 韩国一级婬片A片AAAAA| 综精品久久久aaaa| 亚洲第一男人天堂| 强奸乱伦 亚洲一区| 天天干天天狼在线视频| 男人的天堂2018东京热啪啪啪| 99re这里| 97在线视频观看| 日韩AV熟女乱伦| 天天爽夜夜欢视| 大香蕉中文网| 人人人人插| 国产自产91区13区| 蜜汁欧美| 国产一区二区精品久久99| 超碰资源亚洲97| 四虎影视国产精品| 97人人夜夜精品视频| 99性爱视频| 嫩草 我啊~嗯~在线| 天天做天天爱夜夜爽毛片试看| 综合一区中亚洲国产成人综合精品| 欧美少妇一区二区三区| 亚洲同性aV综合| 青草青草久热| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 蜜臀99久| 欧美精品自慰系列寂寞少妇 | 欧美极品性爱天天射| 国产视频一区二区在线| 欧美欧美少妇| 日韩精品在线观看网站| 九九九九九用不成了| 在线视频亚洲无码| 伊人AAA| 78精品在线| 亚洲国产高清福利视频| 天天日天天操VV| 日韩免费中文字幕视频| 亚洲 日本 一 二 三| 超碰天天去日穴| 日本操BAV| 人妻少妇久久中文| 亚洲va有码在线天堂| 在线观看A啊啊啊| 欧美性爱综合,免费| 91久久国产综合久久| 丝袜足交视频| 精品区9| 亚洲欧美日韩不卡人妻| 激情婷婷| 欧美成人精品一区| 操一区| 亚洲中文字幕熟女少妇一区二区| 伊人色综合网电影| 久久久精品九| 去干网最新版| 亚91网| 天天日少妇逼AV| 黄页av| 国产四虎在线| 一级黄色性爱裸体视频| 蜜桃视频一区二区三区在线观看| 色哟哟 日韩精品| 99re95| 精品人体无圣光凹凸| 成人精品欧洲亚洲| 在免费jIzzjIzz在线视频| 激情四射婷婷六月天| 免费中文在线| 中文字幕一区二区无码成人| 91啪啪| 日韩一级欧美一级国产一级台湾| 色诱中文字幕| 熟女乱伦A| 91狠狠狠| 欧美日不卡| 国产亚洲精品一区二区三区| 欧美亚洲美少妇一区二区| 欧美日韩国产中文精品字幕自在自线| 九七人妻在线| 五月丁香在线| 情趣丝袜无码操逼视频| 秋霞福利网| 日本片日本片祼观看网站在线看中文版网页在线看| 超碰97男女| 操香逼| 18禁的网站在线| 日日躁天天躁狠狠躁| 久久精品人体| 亚欧视频在线| 国产精品一区二区密臀| 亚洲丝袜天堂| 久久6热视频免费观看| 91亚洲综合在线| 四虎视频在线观看| 国产精品午夜高潮呻吟久久av| 亚洲欧美不卡线| 亚av顶级裸体一区二区三区四区五区 | 操逼1区| 亚洲影视综合| 2019午夜福利视频| 激情文学网伊人| 国产精品点击进入在线影院| 久久久无码精品人妻二区| 日日天天久久啊啊aaa| 一区二区三区激情在线观看| 男女一进一出视频久久| AV色五月天| 国产视频一区二区在线观看| 26uuu国产成人综合| 午夜精品久久久| 97超碰中文字幕| 亚洲色图a| www.婷婷五月天| 中文字幕日韩人妻视频一区二区三区| 97亚洲中文| …中文字幕亚洲乱,97人妻无码费视…| 日韩另类色图| 亚洲欧美国产成人综合不卡| 视频国产成人精品日本亚洲18| 骚日日av| 色欲色香天天天综合网www-亚洲综合国| www.丁香五月| 日韩成人精品视频自拍| 无码一区免费在线不卡| 免费视频观看60秒| 成人久久久精品| 国产极品999| 日本在线一二| 日韩欧美国产高清视频| 亚洲无线码欧洲精品区别| 人妻少妇精品| 超碰色大香蕉| 91日日夜夜| 久久人妇| 青春草A| 日韩精品人妻中文字幕有码午| 99精品网| 色九区| 免费一级视频特黄色大片| 免费精品人妻一区二区三| 国产福利电影| 91福利网在线观看| 九热中文字幕| 大奶的诱惑| 狠狠入| 超碰碰97资源站| 在线看污网站| 欧美色图片色哟哟| 日本国产二线女色| 涩亚洲欧洲| 蜜桃臀一区二区三区久久| 成人免费福利网站国产| 少妇一线天久久久久久| 91干熟女| 久久婷婷综合国际产色怕| 国产女人与拘做受视频免费| 一级成人性爱| 最新av中文字幕高清| 国产二区三区免费视频| 插入逼91| 影音先锋每日最新资源在线观看| 欧美成人一级麻豆| A 天堂| 亚洲97成人在线观看| 98人妻精品一区二区色欲| 日韩成人无码| 国产美女自拍AV| 影视综合无码少妇| 秋霞久久亚洲精品成人| 国产精品久久久久亚洲av| 艹少妇网站| 人人看人人摸人人色| 色色色色电影网| 99色| 中文97国产| 日韩无码久久熟女一级片| 色97综合中文字幕|