久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

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

SpringBoot 4.0.3配置Swagger完整踩坑記錄:版本兼容與實(shí)戰(zhàn)指南

SpringBoot 4.0.3配置Swagger完整踩坑記錄:版本兼容與實(shí)戰(zhàn)指南 SpringBoot 4.0.3配置Swagger——從翻車(chē)到順手的完整踩坑記錄先說(shuō)個(gè)真實(shí)場(chǎng)景上個(gè)月有個(gè)老朋友找到我說(shuō)他們團(tuán)隊(duì)剛從SpringBoot 2.7升級(jí)到SpringBoot 4.0.3結(jié)果原來(lái)好端端的Swagger界面全掛了接口文檔白茫茫一片。他照著網(wǎng)上那些教程反復(fù)排查了兩天什么springfox、springdoc、knife4j全都試了一遍不是啟動(dòng)報(bào)錯(cuò)就是訪問(wèn)404整個(gè)人快崩潰了。我聽(tīng)完第一句話(huà)就問(wèn)“你用的springdoc-openapi是什么版本”他愣了一下說(shuō)“不就是最新版嗎”問(wèn)題就出在這里。SpringBoot 4.0.3是個(gè)大版本躍遷底層框架從javax全面切換到j(luò)akartaSpringfox早就停止維護(hù)了而舊版的springdoc-openapi也不兼容。如果還拿老經(jīng)驗(yàn)去做新配置翻車(chē)是必然的。這篇文章我會(huì)從版本兼容性、依賴(lài)引入、核心配置、鑒權(quán)集成到常見(jiàn)問(wèn)題排查把SpringBoot 4.0.3接Swagger這件事掰開(kāi)揉碎講清楚。尤其是版本對(duì)應(yīng)關(guān)系、過(guò)濾器放行規(guī)則、分組配置這些坑全是實(shí)測(cè)踩出來(lái)的經(jīng)驗(yàn)。適合正在做版本升級(jí)、或者其他項(xiàng)目要新接文檔服務(wù)的同學(xué)參考直接照著抄就行。1. SpringBoot 4.0.3與Swagger的兼容性真相1.1 版本選錯(cuò)一切白費(fèi)先說(shuō)結(jié)論SpringBoot 4.0.3搭配Swagger現(xiàn)在唯一靠譜的選擇是springdoc-openapi的3.x版本而且必須是某個(gè)具體的里程碑版本之后才行。我一開(kāi)始用的還是2.8.x的老版本啟動(dòng)直接拋NoSuchMethodError后來(lái)翻官方倉(cāng)庫(kù)的release notes才確認(rèn)從SpringBoot 4.0開(kāi)始Jakarta EE版本已經(jīng)從10升到了11Spring Framework也升級(jí)到了7.0整個(gè)Servlet API的語(yǔ)義都有變化舊版springdoc-openapi壓根無(wú)法感知這些新接口。如果你還想用springfox我勸你趁早死心。這個(gè)項(xiàng)目在2020年左右就停更了官網(wǎng)首頁(yè)寫(xiě)著“maintenance mode”它的底層依賴(lài)還是springfox-swagger2那套老路徑連OpenAPI 3.0規(guī)范都沒(méi)完整支持更別說(shuō)SpringBoot 4.x這種全新的自動(dòng)裝配機(jī)制。硬上的結(jié)果就是把整個(gè)項(xiàng)目拖垮連正常啟動(dòng)都做不到。我列一張?jiān)趯?shí)際項(xiàng)目中驗(yàn)證過(guò)的對(duì)照表SpringBoot版本推薦Swagger方案具體依賴(lài)2.xspringfox 3.0.0 或 springdoc 1.x/2.xspringfox-swagger23.xspringdoc 2.xspringdoc-openapi-starter-webmvc-ui4.0.3springdoc 3.xspringdoc-openapi-starter-webmvc-ui4.0.3WebFluxspringdoc 3.xspringdoc-openapi-starter-webflux-ui有個(gè)關(guān)鍵點(diǎn)SpringBoot 3.x和4.x用的Maven坐標(biāo)前綴都是springdoc-openapi-starter-*不是老式的springdoc-openapi-ui后者在SpringBoot 3之后就不再生效了我也踩過(guò)這個(gè)坑換成starter系列后一切正常。1.2 SpringBoot 4.0.3到底變了什么很多人會(huì)問(wèn)SpringBoot 4.0.3不就是3.x的延續(xù)嗎配置Swagger怎么就有這么大差別表面上只是版本號(hào)變了其實(shí)改動(dòng)相當(dāng)多。第一個(gè)大變化是完整的Jakarta遷移。SpringBoot 4.0.3的所有內(nèi)置組件包括spring-boot-starter-web、內(nèi)嵌Tomcat都基于Jakarta Servlet 6.1來(lái)構(gòu)建包名從javax.servlet.*變成了jakarta.servlet.*。如果第三方庫(kù)還引用老包名運(yùn)行時(shí)會(huì)直接找不到類(lèi)最典型的表現(xiàn)就是啟動(dòng)日志里出現(xiàn)ClassNotFoundException: javax.servlet.Filter。Swagger作為涉及Web層的一系列Filter和Servlet自然逃不過(guò)這個(gè)兼容性問(wèn)題。第二個(gè)大變化是自動(dòng)配置機(jī)制改了。SpringBoot從3.x開(kāi)始慢慢淘汰spring.factories到4.0.3已經(jīng)完全切換為AutoConfiguration.imports文件機(jī)制。Springfox這類(lèi)老庫(kù)還在用老方式注冊(cè)自動(dòng)配置SpringBoot掃描不到自然不會(huì)加載Swagger的配置類(lèi)。第三個(gè)變化是默認(rèn)路徑匹配策略。SpringBoot 4.0.3延續(xù)并且強(qiáng)化了PathPatternParser作為默認(rèn)策略替代了老式的AntPathMatcher。這會(huì)導(dǎo)致很多通配符寫(xiě)法失效比如原來(lái)只配了/v2/api-docs/**而不配/v3/api-docs/**就會(huì)出現(xiàn)明明配置了但訪問(wèn)不了的問(wèn)題。理解了這三個(gè)底層變化你就能明白為什么網(wǎng)上那些SpringBoot 2.x的教程在4.0.3下完全失效——不是Swagger變了而是整個(gè)生態(tài)變了只能用適配新生態(tài)的方案。2. 工程初始化與依賴(lài)引入2.1 環(huán)境準(zhǔn)備既然是跟著實(shí)操走我先說(shuō)清楚我這邊的基礎(chǔ)環(huán)境方便對(duì)照J(rèn)DK 17以上推薦JDK 21別用JDK 8Maven 3.9以上Gradle 8.x也可以SpringBoot 4.0.3springdoc-openapi 3.x具體子版本見(jiàn)后文JDK版本這塊沒(méi)什么好商量的SpringBoot 4.0.3的最低要求就是JDK 17如果你還在JDK 8上跑連項(xiàng)目都啟動(dòng)不了。好消息是Swagger本身對(duì)JDK版本沒(méi)有額外限制所以環(huán)境上只要滿(mǎn)足SpringBoot的基本要求就夠了。2.2 Maven依賴(lài)的精確寫(xiě)法Maven項(xiàng)目的pom.xml里需要引入這兩個(gè)核心依賴(lài)dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency dependency groupIdorg.springdoc/groupId artifactIdspringdoc-openapi-starter-webmvc-ui/artifactId version3.0.0/version /dependency截止到這篇文章寫(xiě)作時(shí)3.0.0是我實(shí)測(cè)下來(lái)最穩(wěn)定的一個(gè)版本它明確聲明支持SpringBoot 4.0.x。如果你用Gradle對(duì)應(yīng)寫(xiě)法是implementation org.springdoc:springdoc-openapi-starter-webmvc-ui:3.0.0有個(gè)細(xì)節(jié)需要留個(gè)心眼不要順手引入spring-boot-starter-validation之外的東西去“增強(qiáng)”Swagger功能。很多教程會(huì)說(shuō)引入springdoc-openapi-ui或者swagger-annotations但在SpringBoot 4.0.3下這些依賴(lài)往往和starter內(nèi)部依賴(lài)沖突反而導(dǎo)致/swagger-ui/index.html無(wú)法渲染。保持最小依賴(lài)集合能跑起來(lái)再逐步加?xùn)|西這是我認(rèn)為最省事的路徑。2.3 首次啟動(dòng)驗(yàn)證依賴(lài)加好之后直接啟動(dòng)項(xiàng)目正常情況下控制臺(tái)會(huì)打印一行特征日志o.s.springdoc.webmvc.ui.SwaggerWelcome: swagger-ui processed這說(shuō)明springdoc已經(jīng)成功注入了Swagger的UI組件。此時(shí)直接訪問(wèn)兩個(gè)地址做驗(yàn)證API文檔JSON地址http://localhost:8080/v3/api-docsSwagger UI頁(yè)面地址http://localhost:8080/swagger-ui/index.html如果兩個(gè)地址都能正常返回內(nèi)容說(shuō)明最基礎(chǔ)的鏈路已經(jīng)通了。如果訪問(wèn)/v3/api-docs返回404優(yōu)先檢查你是不是還在依賴(lài)?yán)习姹镜膕pringfox或者類(lèi)路徑里有沒(méi)有歷史遺留的Swagger依賴(lài)。我見(jiàn)過(guò)好多次項(xiàng)目里同時(shí)存在兩個(gè)Swagger相關(guān)依賴(lài)包沖突導(dǎo)致路由全部失效白白排查了一整天。3. 核心配置與常用注解實(shí)操3.1 配置文件里的關(guān)鍵參數(shù)Swagger接好之后不能直接扔著不管生產(chǎn)環(huán)境的文檔需要定制化。SpringBoot 4.0.3下application.yml里最常用的配置段是這樣的springdoc: api-docs: enabled: true path: /v3/api-docs swagger-ui: enabled: true path: /swagger-ui.html display-request-duration: true operations-sorter: method tags-sorter: alpha disable-swagger-default-url: true packages-to-scan: com.example.demo.controller paths-to-match: /api/**,/manage/** show-actuator: false幾個(gè)參數(shù)單獨(dú)解釋一下packages-to-scan用來(lái)指定掃描哪個(gè)包下的Controller。如果你有多個(gè)模塊可以寫(xiě)多個(gè)包名用逗號(hào)分隔。這個(gè)參數(shù)的本質(zhì)是限定文檔的展示范圍避免把項(xiàng)目里的監(jiān)控接口、內(nèi)部接口都暴露出來(lái)。paths-to-match是做路徑過(guò)濾的只匹配以/api/或者/manage/開(kāi)頭的接口。這兩個(gè)參數(shù)組合起來(lái)基本可以做到“文檔只看該看的”既白又干凈。operations-sorter: method表示接口按HTTP方法排序GET排在POST前面這樣UI上看起來(lái)更整齊。tags-sorter: alpha表示按控制器名稱(chēng)的字母順序排列多模塊項(xiàng)目里這樣排會(huì)更清晰。還有一個(gè)比較冷門(mén)的參數(shù)display-request-duration開(kāi)啟后UI會(huì)在每個(gè)接口旁邊顯示請(qǐng)求耗時(shí)這對(duì)后續(xù)做接口性能觀測(cè)挺有幫助建議開(kāi)發(fā)環(huán)境直接打開(kāi)。3.2 Java代碼里的注解實(shí)戰(zhàn)依賴(lài)和配置文件都搞定后代碼層面只需要補(bǔ)充少量注解Swagger就能把接口文檔生成出來(lái)。最常用的三件套是Tag標(biāo)在Controller類(lèi)上Operation標(biāo)在方法上Parameter標(biāo)在方法參數(shù)上。舉一個(gè)實(shí)際項(xiàng)目中最常見(jiàn)的寫(xiě)法Tag(name 用戶(hù)管理, description 用戶(hù)注冊(cè)、登錄、信息查詢(xún)等接口) RestController RequestMapping(/api/user) public class UserController { Operation(summary 查詢(xún)用戶(hù)詳情, description 根據(jù)用戶(hù)ID查詢(xún)用戶(hù)詳細(xì)信息) GetMapping(/{id}) public ResultVOUserVO getUser(Parameter(description 用戶(hù)ID) PathVariable Long id) { // 業(yè)務(wù)代碼略 } }這里有個(gè)容易忽略的坑如果項(xiàng)目里用了ResultVOT這種統(tǒng)一返回結(jié)構(gòu)springdoc會(huì)嘗試把這個(gè)泛型結(jié)構(gòu)里的每個(gè)字段都展示在文檔里。如果ResultVO里有一個(gè)code、一個(gè)message、一個(gè)data還好但如果你把Throwable異常對(duì)象也塞進(jìn)去了文檔會(huì)變得極其冗長(zhǎng)。解決辦法有兩個(gè)要么在DTO里加Schema(hidden true)隱藏不需要的字段要么用ApiResponse手動(dòng)指定返回結(jié)構(gòu)我一般推薦后者。3.3 Swagger注解與OpenAPI注解的差異這里要給從springfox遷移過(guò)來(lái)的讀者做個(gè)提醒springdoc體系使用的是io.swagger.core.v3的注解比如Tag、Operation、Schema不是以前springfox用的io.swagger.annotations.*。如果你發(fā)現(xiàn)代碼里寫(xiě)Api、ApiOperation編譯沒(méi)問(wèn)題但頁(yè)面怎么也不顯示那說(shuō)明你引入的還是舊注解需要全部替換。對(duì)照關(guān)系可以參考這張表舊寫(xiě)法springfox新寫(xiě)法springdocApiTagApiOperationOperationApiParamParameterApiModelSchemaApiModelPropertySchema(description xxx)ApiIgnoreHidden從數(shù)量上看新注解的語(yǔ)義更清晰參數(shù)也更簡(jiǎn)潔但如果你寫(xiě)習(xí)慣了老注解剛切換時(shí)會(huì)有些別扭。我的建議是直接改不要做兼容層因?yàn)閟pringdoc本身就不認(rèn)老注解留著只會(huì)造成文檔信息缺失。3.4 分組配置的進(jìn)階玩法如果你的項(xiàng)目是微服務(wù)架構(gòu)一個(gè)SpringBoot應(yīng)用對(duì)外暴露很多模塊接口不想讓所有接口混在一個(gè)文檔里可以用GroupedOpenApi做分組。這一步在我的日常開(kāi)發(fā)中用處非常大尤其是在聯(lián)調(diào)階段前端只需要看自己負(fù)責(zé)的那部分接口。新建一個(gè)配置類(lèi)Configuration public class OpenApiConfig { Bean public GroupedOpenApi userApi() { return GroupedOpenApi.builder() .group(用戶(hù)模塊) .packagesToScan(com.example.demo.controller.user) .build(); } Bean public GroupedOpenApi orderApi() { return GroupedOpenApi.builder() .group(訂單模塊) .packagesToScan(com.example.demo.controller.order) .pathsToMatch(/api/order/**) .build(); } }配置完之后Swagger UI頁(yè)面的右上角會(huì)多一個(gè)下拉框可以直接切換分組。這對(duì)接口量超過(guò)50個(gè)的項(xiàng)目來(lái)說(shuō)非常友好不用在長(zhǎng)長(zhǎng)的列表里翻來(lái)翻去找接口。這里有一個(gè)我踩過(guò)的坑GroupedOpenApi之間如果掃描范圍重疊會(huì)出現(xiàn)同一個(gè)接口在多個(gè)分組里重復(fù)展示的情況。所以分組的掃描范圍最好做到互斥要么靠不同包名要么靠不同路徑前綴。實(shí)在沒(méi)辦法重疊的用pathsToMatch把邊界劃清楚比在代碼里寫(xiě)exclude要省事得多。4. 鑒權(quán)集成與生產(chǎn)級(jí)配置4.1 給Swagger UI配置JWT全局鑒權(quán)實(shí)際開(kāi)發(fā)中很多后端接口都要帶Authorization頭才能調(diào)用。如果接口文檔里不帶這個(gè)鑒權(quán)能力前端拿去調(diào)試時(shí)每個(gè)請(qǐng)求都要手動(dòng)拼Token很煩人??梢栽谂渲妙?lèi)里聲明一個(gè)全局的安全方案Bean public OpenAPI customOpenAPI() { return new OpenAPI() .components(new Components().addSecuritySchemes(bearerAuth, new SecurityScheme() .type(SecurityScheme.Type.HTTP) .scheme(bearer) .bearerFormat(JWT))) .addSecurityItem(new SecurityRequirement().addList(bearerAuth)); }加上這段配置后Swagger UI上會(huì)多出一個(gè)“Authorize”按鈕點(diǎn)擊后輸入Bearer token之后調(diào)接口都會(huì)自動(dòng)帶上這個(gè)頭不用再手動(dòng)填。有個(gè)細(xì)節(jié)必須提醒a(bǔ)ddSecurityItem是全局生效的意味著所有接口都會(huì)帶上鑒權(quán)標(biāo)記。如果項(xiàng)目中有一部分接口是公開(kāi)的比如登錄接口、注冊(cè)接口你需要在那些Controller方法上加SecurityRequirements注解來(lái)取消這個(gè)全局鑒權(quán)否則前端看到登錄接口旁邊有個(gè)鎖的圖標(biāo)容易產(chǎn)生疑惑。4.2 Spring Security集成下的過(guò)濾器放行大多數(shù)SpringBoot項(xiàng)目都會(huì)配上Spring Security而一旦開(kāi)啟權(quán)限控制Swagger頁(yè)面默認(rèn)會(huì)被攔截掉顯示403或者跳轉(zhuǎn)到登錄頁(yè)。這個(gè)問(wèn)題的本質(zhì)是Swagger的路徑?jīng)]被Spring Security標(biāo)記為放行。我的處理方式是在Security配置里把相關(guān)路徑加進(jìn)白名單Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http.authorizeHttpRequests(auth - auth .requestMatchers( /swagger-ui/**, /v3/api-docs/**, /swagger-resources/** ).permitAll() .anyRequest().authenticated()) .csrf(csrf - csrf.ignoringRequestMatchers(/swagger-ui/**, /v3/api-docs/**)); return http.build(); }這個(gè)寫(xiě)法有兩個(gè)關(guān)鍵點(diǎn)一是所有Swagger相關(guān)路徑必須加permitAll()二是csrf也要對(duì)Swagger路徑放行否則即使權(quán)限放行了Swagger UI頁(yè)面可以打開(kāi)但從頁(yè)面發(fā)起API調(diào)用時(shí)會(huì)被CSRF校驗(yàn)攔下來(lái)前端看到的就是“請(qǐng)求失敗”的紅色提示。如果你用了自定義的登錄頁(yè)還需要額外留意Swagger UI里接口的調(diào)用流程。因?yàn)镾wagger頁(yè)面是在前端直接發(fā)Ajax請(qǐng)求的不走原先的表單登錄流程所以你不要指望通過(guò)配置一個(gè)formLogin就讓Swagger自動(dòng)拿到登錄態(tài)。要么用上面的Bearer Token方案要么在測(cè)試環(huán)境臨時(shí)放開(kāi)鑒權(quán)我一般推薦純Token方案對(duì)開(kāi)發(fā)聯(lián)調(diào)的影響面最小。4.3 OAuth2.0配置的完整示例部分項(xiàng)目走的是OAuth2.0認(rèn)證體系springdoc也支持對(duì)接。整體思路和JWT類(lèi)似只是SecurityScheme的類(lèi)型換成OAUTH2并額外聲明授權(quán)流程和端點(diǎn)。一個(gè)相對(duì)完整的寫(xiě)法new SecurityScheme() .type(SecurityScheme.Type.OAUTH2) .flows(new OAuthFlows() .authorizationCode(new OAuthFlow() .authorizationUrl(http://localhost:8080/oauth/authorize) .tokenUrl(http://localhost:8080/oauth/token) .scopes(new Scopes() .addString(read, 讀取權(quán)限) .addString(write, 寫(xiě)入權(quán)限))));這個(gè)方案寫(xiě)起來(lái)不難但我要潑一盆冷水OAuth2.0授權(quán)碼模式在Swagger UI里的體驗(yàn)其實(shí)不算好。如果你的網(wǎng)關(guān)或者認(rèn)證服務(wù)器做了跨域限制、Cookie策略調(diào)整前端彈出的授權(quán)窗口經(jīng)常會(huì)莫名驗(yàn)證失敗。我實(shí)際項(xiàng)目里遇到的情況是開(kāi)發(fā)環(huán)境勉強(qiáng)能用一上測(cè)試環(huán)境就各種跳轉(zhuǎn)問(wèn)題。后來(lái)大家還是改用JWT方案出問(wèn)題也更好定位。所以除非你們公司規(guī)定必須展示OAuth2授權(quán)流程否則我還是建議優(yōu)先用全局bearerAuth省心太多。4.4 生產(chǎn)環(huán)境的文檔安全策略最后一個(gè)部分聊一下發(fā)布問(wèn)題。很多人習(xí)慣把Swagger一直開(kāi)著無(wú)論什么環(huán)境都暴露對(duì)外這在安全層面是個(gè)隱患。接口文檔會(huì)暴露項(xiàng)目結(jié)構(gòu)、字段定義、接口調(diào)用方式一旦被有心人掃到等于把系統(tǒng)的攻擊面直接畫(huà)出來(lái)了。我自己的習(xí)慣是開(kāi)發(fā)環(huán)境打開(kāi)、測(cè)試環(huán)境打開(kāi)、生產(chǎn)環(huán)境關(guān)閉并且把開(kāi)關(guān)做成配置項(xiàng)springdoc: api-docs: enabled: ${SWAGGER_ENABLED:false} swagger-ui: enabled: ${SWAGGER_ENABLED:false}部署的時(shí)候通過(guò)環(huán)境變量SWAGGER_ENABLED來(lái)控制。生產(chǎn)環(huán)境設(shè)成false后/v3/api-docs和/swagger-ui.html都會(huì)直接返回404不占用額外的接口暴露面。如果你們生產(chǎn)環(huán)境確實(shí)需要在線(xiàn)文檔給運(yùn)維或者客服看建議把Swagger放在內(nèi)網(wǎng)環(huán)境或者通過(guò)網(wǎng)關(guān)做權(quán)限控制的路徑上不要直接暴露到公網(wǎng)。這是一個(gè)我從上線(xiàn)事故里學(xué)到的教訓(xùn)原因不方便展開(kāi)只能說(shuō)“接口文檔裸奔”的下場(chǎng)很不好。5. 常見(jiàn)問(wèn)題與排查技巧實(shí)錄5.1 典型報(bào)錯(cuò)與解決方案我把在SpringBoot 4.0.3下配置Swagger期間遇到的高頻問(wèn)題整理成了速查表每一條都是親手解決過(guò)的現(xiàn)象根因解決方案啟動(dòng)報(bào)錯(cuò)NoClassDefFoundError引入舊版springdoc或springfox統(tǒng)一用springdoc 3.0.0及配套starter訪問(wèn)/v3/api-docs返回404路徑掃描配置錯(cuò)誤或依賴(lài)沖突檢查是否有多套Swagger依賴(lài)清理干凈頁(yè)面打開(kāi)但接口列表為空packages-to-scan沒(méi)寫(xiě)對(duì)確認(rèn)Controller包路徑以及路徑前綴是否匹配接口返回字段全是空值統(tǒng)一返回類(lèi)型與泛型不兼容用Schema標(biāo)注字段描述避免復(fù)雜泛型UI頁(yè)面顯示403Spring Security攔截放行/swagger-ui/和/v3/api-docs/頁(yè)面能看但調(diào)用接口報(bào)405PathPattern匹配策略變化檢查Requestmapping路徑和Swagger路徑是否沖突啟動(dòng)后內(nèi)存明顯升高開(kāi)啟actuator且被掃描設(shè)置show-actuator: false或paths-to-match只選業(yè)務(wù)路徑這里特別點(diǎn)名一下第一條“NoClassDefFoundError”。你如果看了堆棧信息發(fā)現(xiàn)報(bào)錯(cuò)指向io.swagger.v3.oas.models.OpenAPI那基本就是依賴(lài)版本沖突。我用mvn dependency:tree看到過(guò)項(xiàng)目里同時(shí)存在了3.0.0和2.2.0兩個(gè)版本的swagger-models原因是某個(gè)內(nèi)部SDK傳遞依賴(lài)了一個(gè)老版本。解決辦法是在pom.xml中用dependencyManagement鎖定版本或者排除內(nèi)部SDK里不需要的Swagger依賴(lài)。5.2 請(qǐng)求路徑在Swagger中重復(fù)的坑SpringBoot 4.0.3中如果Controller類(lèi)上寫(xiě)了類(lèi)級(jí)別的RequestMapping(/api/user)方法上又寫(xiě)了GetMapping(/{id})按常理來(lái)說(shuō)Swagger展示的路徑應(yīng)該是/api/user/{id}。但如果你在application.yml里又額外配置了server.servlet.context-path: /demo文檔里會(huì)出現(xiàn)兩種情況一種情況是Swagger UI展示的路徑叫作/demo/api/user/{id}前端拿來(lái)直接調(diào)本地服務(wù)沒(méi)問(wèn)題另一種情況是Swagger只展示應(yīng)用的內(nèi)部路徑/api/user/{id}而前端實(shí)際跑的時(shí)候發(fā)現(xiàn)少了前綴怎么調(diào)都是404。這個(gè)問(wèn)題的根源在于context-path是容器層面的路徑Swagger UI無(wú)法自動(dòng)感知它的存在。我的建議是不要在本地開(kāi)發(fā)環(huán)境配置context-path統(tǒng)一由網(wǎng)關(guān)層做路由前綴這樣才能保證Swagger里看到的路徑和真實(shí)接口路徑一致。如果項(xiàng)目已經(jīng)用上了context-path沒(méi)法去掉那還有一個(gè)臨時(shí)方案在OpenAPI配置類(lèi)里手動(dòng)拼接全局前綴讓文檔路徑和實(shí)際路徑對(duì)齊。但這樣做會(huì)引入雙層路徑的風(fēng)險(xiǎn)一旦網(wǎng)關(guān)也做了前綴會(huì)出現(xiàn)兩個(gè)前綴疊寫(xiě)的情況維護(hù)成本很高。5.3 測(cè)試環(huán)境接口超時(shí)的排查一個(gè)很常見(jiàn)但不太容易定位的問(wèn)題是Swagger UI頁(yè)面打開(kāi)正常接口也能跑但單個(gè)接口執(zhí)行特別慢動(dòng)不動(dòng)就超時(shí)。很多人以為是Swagger影響性能其實(shí)多數(shù)情況下和Swagger本身沒(méi)有關(guān)系。我有一次排查到深夜才發(fā)現(xiàn)是某個(gè)接口的執(zhí)行鏈路里調(diào)用了對(duì)外部系統(tǒng)的同步HTTP調(diào)用而那個(gè)外部系統(tǒng)在測(cè)試環(huán)境不穩(wěn)定每次調(diào)用要卡上好幾秒。和Swagger完全無(wú)關(guān)只是以前沒(méi)有用Swagger直接調(diào)接口所以沒(méi)發(fā)現(xiàn)這個(gè)性能瓶頸。這個(gè)案例倒提醒了我一件事Swagger不只是文檔工具它還是聯(lián)調(diào)階段最輕量的接口調(diào)試工具。你完全可以在UI上觀察請(qǐng)求耗時(shí)快速定位哪些接口存在性能隱患。配合上面提到的display-request-duration: true這個(gè)效果會(huì)特別明顯能幫助你用很小的成本拿到接口級(jí)別的響應(yīng)時(shí)間對(duì)日常自測(cè)來(lái)說(shuō)非常實(shí)用。5.4 依賴(lài)沖突的終極排查思路前面多次提到依賴(lài)沖突這里給出一個(gè)標(biāo)準(zhǔn)的排查流程希望幫你少走彎路用mvn dependency:tree查看依賴(lài)樹(shù)重點(diǎn)搜索包含swagger、springfox、openapi關(guān)鍵字的依賴(lài)在pom.xml中對(duì)沖突依賴(lài)使用exclusion排除多余傳遞依賴(lài)全局鎖定Springdoc及Swagger相關(guān)組件版本避免不同模塊各自定義版本清空本地Maven倉(cāng)庫(kù)中殘留的舊包重新編譯啟動(dòng)時(shí)觀察日志中是否有“Swagger”相關(guān)的WARN或ERROR輸出這個(gè)步驟其實(shí)適用于所有涉及Swagger的SpringBoot版本不只是4.0.3。我在升級(jí)大版本時(shí)一定會(huì)做一輪這樣的清理因?yàn)闅v史遺留依賴(lài)是最容易埋雷的地方。6. 最后再分享兩個(gè)細(xì)節(jié)第一件事關(guān)于knife4j。國(guó)內(nèi)很多開(kāi)發(fā)喜歡用這個(gè)增強(qiáng)版的Swagger UI界面更美觀也增加了離線(xiàn)文檔導(dǎo)出等功能。但在SpringBoot 4.0.3下它的適配版本和springdoc一樣需要選擇新的就目前實(shí)際測(cè)試來(lái)看兼容情況不如官方Swagger UI穩(wěn)定。如果你不是特別依賴(lài)它增強(qiáng)的那些功能我的建議是直接使用官方UI減少一層適配風(fēng)險(xiǎn)。第二件事關(guān)于接口文檔的團(tuán)隊(duì)協(xié)作。Swagger做到“能看、能調(diào)、能分組”只是基礎(chǔ)更值得投入的是讓它作為團(tuán)隊(duì)內(nèi)部接口契約的唯一事實(shí)源。我們?cè)趯?shí)際操作中會(huì)把Swagger頁(yè)面的URL固化在團(tuán)隊(duì)文檔里所有新接手的開(kāi)發(fā)直接打開(kāi)頁(yè)面查找接口定義不再需要翻閱多人維護(hù)的Word文檔。這樣既避免了文檔內(nèi)容過(guò)期也大幅降低了新人的上手成本。回到開(kāi)頭那位朋友的問(wèn)題。他后來(lái)按我給的版本組合替換了依賴(lài)刪掉了多余的舊包并且把Spring Security的放行配置補(bǔ)上前后不到半小時(shí)就把Swagger恢復(fù)了。他的原話(huà)是“早知道版本對(duì)應(yīng)關(guān)系這么重要就不去瞎試了?!边@大概就是我們今天聊這一大圈的核心意義在技術(shù)選型和版本升級(jí)時(shí)多花點(diǎn)時(shí)間確認(rèn)生態(tài)兼容性遠(yuǎn)比試錯(cuò)來(lái)得高效。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
殴美日韩m| 永久电影三级在线观看| 厕所偷拍在线| 日本一区二区成人在线| 超碰日韩人妻| 丰满人妻一区二区三区色-百度| 人人妻人人色| 久久久久久久久久久久黄色| 麻豆AV短剧| 人妻久久久久久久久久久久久久久| 欧美日韩色综合网| 国产在线视频午夜精华在| 国产又长又大又粗的视频| 一区二区三区男女操逼黄色小电影| 日本性爱不卡视频| 男人的天堂一区三区| 国产色图乱伦| 啊啊啊好想要| 色悠久| 99热这里只有精品1| 亚洲天堂人人妻| 久久欧美按摩999| 色色亚洲| 天天干天天日天天射黄色片| 国产午夜视频| 色偷偷人人玩人人舔人人操人人摸人人爽| 香蕉大久久久| 中出20p| 久草线上视频免费看| 97干com| 亚洲天堂区| 91蜜臀在线久久久久| 久久久98网站免费视频| 黄呦呦在线| 东北女人的毛片| 91在线|亚| 日韩无码嘿咻黑热久| 久久熟女人| 蜜桃久久久久久久| 一品道视频一区二区三区| 射丝袜高跟鞋99| 精品999999| 色眯眯射| 亚洲学生妹高清av| 亚洲色图91欧美日韩| 亚欧视频在线| 欧美精品自慰系列寂寞少妇 | 青青操国产夫妻| 国产精品一级特黄aaa大片在线观看| 夜夜欧美 | 丰满人妻-区二区三区| 欲香欲色综合天天伊人| 精品一级| 日韩激情毛片一级久久久| 日韩成人精品| 五月天丁香婷婷综合网站| 精品一啪| 欧美老熟另类| 我爱搞逼综合网| 91成人亚洲色图| 欧美在线|亚洲| 少妇天堂| 九九精品无码专区免费| 久久综合激情| 婷婷色香| 夜夜性| 青青草中文字幕| 国产综合在线视频网站| 国产热RE99久久6国产精品首| 丁香五月av| 91大神电影天堂| 超碰天天操| 国语精品av| 亚洲成人在线高清| 午夜精品99久久久久传媒| 国产SV一线| 亚洲综合色在线| 精品午夜福利| 久久一级无码精品毛片6| 中文字幕在线日亚洲9| 射丝袜高跟鞋99| 亚州欧美总和| 成年人网站在线免费观看| 户外裸露刺激视频第一区| 天堂蜜桃无码视频一区二区| 熟妇一区,二区,三区。| 欧亚性爱视频免费看| 亚洲av夫妻操穴网| 嗯嗯啊啊啊好爽| 免费又黄又裸乳的视频| 天天插夜夜爽| 尹人免费观看视频在线| 亚洲影视综合网| 伊人宅男大香蕉| 人人扣人人操| AV色五月天| 97日韩欧美| 9久久精品| 豆1无夜无码| 亚洲色图尤物视频| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 91黑丝美女| 久久久久久久精| 国产一区二区啪啪视频| #NAME?| 蜜桃视频成a人v在线| 欧美在线啊啊啊| 91色综合| 久久精品视频久久久| 97chaopenrihan| 99久久婷婷丁香| 欧美人妻精品| av爱爱爱| 中文字幕乱碼在线| 五月丁香六月综合缴清无码| 激情文学 国产一二三aV| 亚洲欧洲激情卡通另类文学四射小说网站| 大奶啊啊好爽| 国产一进一出视频网站| 亚洲自拍一区夜夜操| A级在线视频| 91狠狠综合久久久久久| 欧美精品23| 麻豆伊人网| 高清无码在线播放网站| 久湿久久| 中文字幕 码 自拍 视频 区| 91丝袜美女视频| 亚洲日韩肥臀视频在线观看| 人妻少妇久久中文字幕一区二区 麻豆 | 99久久久er直播网址| 久久香蕉超碰97国产精品| 亚洲男人久久综合天堂| 91在线/欧洲| 自慰白浆在线观看| 午夜超碰| 日日夜夜模| 免费作爱一级视频| 精品人妻一区二区三区免费视频| 中文字幕91综合| 日韩/97| 五月丁香色婷婷| 五月天婷婷社区| 欧美中出1| 97日韩欧美亚洲| 玖玖视频在线资源一区二区三区| 人妻熟女一区二区| 99久久精品国产高潮| 久久久av爱| 欧美激情超碰777| 黄色一区二区秘书性感| 99re这里只有精品2| 婷婷五月天成人| 亚洲综合影院| 天天夜夜rb| 久操视频免费在线观看| www.av在线视频| 新怡红院| 青青草玖玖爱| 天天弄欧美| jk白丝没脱就开始啪啪| 国产精品久久久久久久久久久久久久吹| 婷婷色综合| 乱伦熟女专区| 亚洲综合草草| 国产精品第二页| 婷婷综合激情| 狠狠色狠狠色狠狠五月| 久久精品一区二区一8| 欧洲亚洲综合| 国产丰满少妇久久久精品影院| 国产在线视视频有精品| 国产一区二区免费福利片| 黑人粗大V S日韩女优视频| 涩五月婷婷| 国产精品亚洲一级av第二区| 久久性生大片免费观看性| 91少妇通奸网站| 富二代亚洲精品99| 色欧美天天| 国产在线视视频有精品| 国产欧美精选自拍一区| 操国产高清| 欧美人妻久久精品二区三区| 高清孕妇孕交 交| 久久↗↗| 性性久久| 91性高| 亚洲免费精品一区| 84YTCOM性无码| 试看60秒| 亚卅熟女乱色| 亚洲AV无码国产精品久久久久| 天天激色| 97视频在线视频| 久插综合| 青草精品视频日本久久久久网站在线| 大香蕉黄色一区| 日韩欧美水蜜桃人妻| 91香蕉视频在线观看免费| 综合久久97| 天天影视综合网欧美精品| 熟妇熟女一区二三区| 99免费在线视频| 动漫片子网站3黄| 欧美黄色大香蕉一区二区| 操一操摸一摸| 国产一区二区三区高清视频| 久久中文字幕一区不卡| 高清无码一区二区三区| 国产亚洲精品农村妇女| 久久riav中文精品| 一类av片在线看| 热无码中文亚洲H一道本一区二区| 99久久精品国产系列| 淫荡网址| 98人妻精品一区二区色欲| 色吧 综合| 人妻精品视频一区二区三区| 国产精品99精品视频网站| 日韩成人私密一级精品av| 欧美黑人熟妇精品91| 国内一级精品| 亚洲精品久久久久毛片A片拉屎 | 国产精品老熟女一区二区| 色综合久久888| 91超级碰碰| 五月天激情小说| 999日韩中文精品观看视频。| 啊a一区在线| 97视频7| 最新亚洲风情电影| 色眯眯av| 日少妇视频| 亚欧毛片基地国产毛片基地| 亚洲 欧美日韩 另类| 久/久精品99看9| 91爽啪| 大香蕉在线视频重口味毛片在线| 天天搞欧美| 欧美宗合色| 欧美日韩大香蕉| 久久精品国产亚洲AV片多多| 91狠婷| 亚洲有码第一页| 日韩91网| 一级做a爰片久久毛片图片| 人妻乱仑一区二区三区| 久久久影院| 蜜乳av一区二区三区四区不卡| 精品国产乱码久久久久久免费| 男人天堂欧美| 白嫩国模丰满一二三区| 一区二区三区成人 | 精品国产乱码久久久久久口爆网站| www.99热| 欧美天堂亚洲电影院一区在线播放| 啊啊啊水好多| 亚洲人妻中文高清| 热久日综合| 91精品人妻一品二品三品| 内射夫妻三片| 欧美性猛交美女自慰91| 99精品丰满人妻| 久久啊啊啊| 国产熟女完整版中字| 色婷婷小说| 国产视频第2页| 欧美综合91| 夜夜影视四色| 91总综合网| 国产精品久久久久婷婷二区次| 亚洲欧美色图小说| 欧美色棕合| 超碰欧美97资源| 久久九九视频九九视频| 亚洲五区熟女| 深夜福利黄片| 97视频网站在线观看| 91美女高潮| 成人免费看吃奶视频网站| 久久久一区二区三区四曲免费听| 亚洲色图 91| 金莲网址| 欧美日韩亚洲高清不卡一区二区三区| 天天爱天天操| www.99热| 九九九只有精品| 五月激情在线| 99.色网| 久久精品国产亚洲粉嫩| 欧美嫩性色| 三级日本一区二区三区| 天天做日日做| 日韩欧美丝袜诱惑| 国产日韩精品无码去免费专区国产| 五月综合视频| 婷婷五月天激情四射| 五月天婷婷色色| 人人妻人人爽| 亚洲性爱高潮影院| 好吊色综合| 九九无码久久精品视频| 人人摸人人入| 亚洲情色在线| 成人亚欧免费视频| 亚洲丨在线| 综合色99| 国产亚洲色婷婷久久99精品91 - 百度 | 另类一区| AV女优男人的天堂| 色综合潮| 强奸a片网| 九九九国产| 另类综合另类| 肏逼福利网站| 69久久久久久久久久久久久| 久草视频分类在线| 亚洲天天做日日做天天谢日日| 91 亚洲 欧洲| 先锋影音av先锋一区| 97视频在| 一区二区娱乐网站| 97超碰护士| 色爱欲亚洲| 日本成人A片网站| 亚洲熟久久| 色综合色综合网| 女人综合网| 日韩精品第3页| 日韩一级片在线看| 中文人妻av高清一区| 91处女在线视频| 天天色香欲综合网| 久久av成人无码免费| 亚洲精品97p| 黄色污污污污污污网站| 亚洲欧美日韩精品久| 青青在线视频日韩欧美| 日韩精品9999| 九一综合网| 成人av动漫在线观看| 激情小说在线视频| 激情婷婷丁香网| 亚洲国产综合久久天堂| 国产福利精品最新在线| 嫩草美女久久| 91骚熟女| 少妇贴图| 综合久久99亚洲人妻中文在线| 97中文超碰| 人人摸人人添人人操| 亚洲色狠| 粉嫩av一区二区三区天美传媒| 躁躁日曰躁2020| 婷婷操逼| 91九色在线| 高潮的A片激情扒开一区| 亚洲综合97| 色97综合中文字幕| 青青草日韩无码| 一级aaaaa欧美中文字幕录像片| 青青国产在线拍揄自揄拍| 激情五月激情综合网| 一区二区三区四区免费视频| 亲子敌伦对白在线播放| 67914在线兔费成人视频| 97免费免费视频网| yiren97| 啊啊啊啊啊啊啊啊啊啊在线观看| 日韩一级性爱无码| 日韩有码专区| 中文字幕一区二区无码成人| 综合情欲网| 亚洲成人妻日韩在线| 中亚精品极乱| 激情五月综合网| 久久香蕉国产线看观看猫咪av| 日婷婷| 精品无码一区二区三区| 国产家庭乱伦表演| 狠狠久久手机视频精品| 亚洲男人综合| 国产一区二区三三视频| 一级日本牲交大片好爽在线看| 中文乱码字字幕在线第5页| 操逼1区| 91亚洲狠狠色| 天天影视91看看| 亚洲清纯唯美| 美女天天干| 中文字幕精品三级久久久| 亚洲天天精品| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 午夜福利av电影在线| 一级成人性爱| 1024人妻熟女一区二区三区| 精品性爱无码在线播放| 欧美日韩性感| AV天堂电影网| 日韩综合97P| 亚洲AV人人澡人人爱| 男女香蕉一区二区| 美女久久久| 中文AV制服乱伦| 国产午夜福利电影免费在线观看| 欧美人与性动交a美精品| 黑人无码一区二区| 激情第四色| 偷拍欧美激情| 欧美一二级| 传媒在线观看一区二区三区| 国产一级内射高清视频 | 欧美在线l亚洲| 欧洲亚洲综合| 成人性交免费视频| 久久久精品91八戒| 国产一级做a爰大片免费久久| 久久99精品视频| 久久精品欧美一区蜜桃| 男生通女生屁股| 97这里有精品| 日韩在线一区高清在线| 五月婷色| 亚洲成人色情五月天丁香花| 欧美性夜| 亚洲一级特黄大片在线播放91| 精品国产肉丝袜在线拍国语| 天美传媒婬乱在| 日本阿v天堂在线观看| 午夜福利激情在线视频| 精品一区二区三区蜜桃臀赵总| 黄色十八禁网站| 欧美激情 亚洲色图| 亚洲啪AⅤ永久无码| 色综合色综合网| 97精品视频免费| 精品日韩产品在线,日韩在线不卡视频,欧美日韩免费专区/久, | 囯产精品久久久久久久久久梁医生| www.av在线视频| 性色一线| 国产又粗又长又大的视频| 成人自拍三级在线观看| 久久精品欧美一区蜜桃| 91痴汉| 亚洲一曲日韩精品| 亚洲综合码| 人妻第一页| 日韩 欧美 另类 人妻| 91在线综合网| 国产精品九九九| www.色综合| 日韩色女精品| 亚洲一曲日韩精品| 久久久久久久国产| 成人av影院在线观看| 啊啊啊不要好疼视频| 熟女熟妇伦久久影院毛片一区二区| 超碰97人妻| 伊人97超碰| 超碰在线欧美性爱激情| 91痴汉| 综合久久久久久久综合网| 国产夜夜艹| 大奶的诱惑| 人妻久久久久久| 91超碰在线观看| 久操网线| 啊啊啊在线看| 欧美国产伊人久久久久| 亚洲极品| 国内精品久久久久影院亚洲| 91热| 综合熟女| 少妇久久| 少妇天堂网络| 国产福利小视频高清在线观看| 亚洲视频一二区| 麻豆综合一区av| 欧美一区二区在线资源| 色综合V| 国产精品午夜成人福利| 人人操人人操人人人操| 97精品在线| 欧美性爱十八禁| 快播电影网日韩新片| 超碰碰碰碰| 日韩无码一区二区三区| 97中文字幕色| 91强奸乱轮| 中文字幕激情小说| 中文字幕精品人妻丝袜| 男女激烈网站最新| 日本精品一区二区三| 国产伦乱91| 国产sv美女内射| 亚洲AV免费在线观看| 欧美传媒| 91 偷| 亚洲中文人妻色| 日韩精品碰碰| 操熟女91| 性色av一区二区| 国模精品娜娜一二三区| 亚洲超碰97| 97精品97| 亚洲AV小说| 黄片视频,下载| 偷拍欧美亚洲| 亚州成人A√| 亚洲AV无码AV吞精久久久久| 男人的天堂一区| 欧美精品久久96人妻无码| 日本视频一区二区三区| 97日韩超碰超碰中文字幕| 欧美色图亚洲特色| 99热超碰| 18禁美女裸体无遮挡啪啪| 欧美亚洲系列| 老女人碰碰在线碰碰视频| 国产日韩欧美三级片| 青娱乐国产剧情av一区| 国产丝袜美女在线一区| 超碰欧美97资源| 日韩伦理视频| 欧美激情综合色综合啪啪五月| WWW啪啪的com| 精品九九九| 蜜桃午夜视频一区二区| 国产盗摄美女如厕大神作品在线观看 | 色欲久久综合| 日韩人妻中文视频| 97资源视频| 亚洲精品97久久| 色香欲天天天天综合色| 丁香婷婷激情五月天无毒不卡 | 婷婷综合伊人一区| 久久有码视频| 免费99精品国产自在在线| 国产不卡中文字幕免费avi| 91国产精品在线看| 久久五月丁香| 亚洲精品成人激情在线| japan日本高清乱xxxx| 无码精品久久| 免费精品国偷自产在线在线| 久久久久久久97| 97精品一区二区视频在线观看| 蜜桃视频一区二区三区| 国产精品久久久蜜臀| 嗯嗯嗯啊啊啊在线免费观看| 大香蕉日韩| www.acm成人黄色毛片| 亚洲第91页 | 久久网亚洲| 欧美成人综合| 黑人精品久久97| 男人天堂久久日韩| 夜夜嗨av午夜成人| 男生女生啊啊啊啊| 九九九九九九成人| 白丝在线一区| 伊人午夜福利视频| 爱丝福利| 91老司机精品| 91青青草| 欧美激情性久久久久久| 100啪啪视频大全| 99e久久国产精品| 自拍偷拍国产欧美日韩韩| 亚洲av无码国产精品字幕| 欧美性生活男人的天堂| 国产免a费看黄片在线| 色五天伊人| 日韩av不卡在线观看| 国产视频一区二区免费| 一本道综合色图| 日韩97视频!在线| 97色色色综合网站| 国产和美国毛片| 舔人妻中文免费视频| 日韩欧视频| 久久精品国产亚洲5555| 色操逼网| 婷婷性爱| 白 大 人妻 区 在线| 99蜜月精品久久| 九九草| 成人一道本免费视频| 亚洲av影音先锋| 五月天激情小说网| 爱啪精品一区| 久久亚洲一区二区色婷婷| 91高潮| 天天草夜夜草高潮片| 人看人人摸人人操| 久久综合日韩亚洲欧美| 久久久久久久久久久久久女过产乱-少妇高潮一区二区三区喷水-成人AV | 操死我了啊啊啊| 超碰2017| 每日更新AV| 99999精品视频| 色区97| 欧美大战久久久伊人| 色情五月综合婷婷| 日本日日色视频| 夫妻AV网站| 84YTCOM性无码| 一本正道久久熟女| 啊灬啊灬啊灬啊灬高潮奶出了免费视| 精品无人区麻豆乱码1区2区图片| 中文操逼字幕| 国产版a级片直播在线| 中文字幕乱码人妻一区二区三区,99精品 | 国产精品久久久久久久久久久久久久久久久久 | 亚洲无码一区成人免费午夜| 色天使亚洲综合在线观看| 一本久道久久综合狠狠爱| 欧美天堂亚洲电影院一区在线播放| 黄页av| 91强热人妻| 人妻出轨一区二区三区| 欧美日韩久久精品爱爱| 日韩成人性爱电影在线播放| 91夜夜蜜桃臀1区2区3区| 99999国产| 亚洲精品人妻吞精av| 日han少妇无码| 国产精品久久久久久久久久久久| 成人日本视频人妻在线| 亚州色阁| 青青久久手机线视频| 亚洲涩图欧美| 裸体美女久久久| 亚洲**2021在线观看| 九九热免费视频| 免费观看网黄| 久久男人精品| 日韩成人午夜精品久久高潮| 99色网| 激情在线青青操| www.91视频网| 久操不卡视频| 国产2.3.4区| 91成人精品在线播放| 欧美97视频| 亚洲 自拍偷拍 欧美| 91亚洲欧美色图| 在线观看不卡一区二区三区| 国产夜夜艹| 日本中文熟女视频| 欧美色图亚洲色图成人在在线| 久久国产乱子伦精品免费女,网站| 一区二区三区机械有限公司| 91超碰在线观看| 亚洲中文字幕av| 蜜桃天美传媒AV一区二区三区| 操逼操操操91| 伦理第一页| 色五月婷婷麻豆在| 亚洲国产成人精品女人久久久| 蜜臀少妇一区二区| 午夜精品久久一区二区| 国产白嫩精品久久| 国产操伦| 91青青在线视频| 免費黃色視頻觀看一| 偷窥自拍亚洲| 欧美在线官网| 国产a片操逼| 色女免费在线观看视频网址| 国产AV高清AV无码| 青娱乐91| 91国产大片| 色哟哟511老熟女| 99超碰碰| 日本A级视频| 8050无码八戒| 综合97| 淫乱图区| 亚洲综合激情五月久久| 亚洲AV无码秘 蜜桃臀国精产品| 亚洲网自拍| 图片区小说区| 精品无码久久久久久久久果冻糖心 | 中文字幕超碰CAO| 99精品久久久久久久婷婷蜜桃| 三级色影综合网| 1区2区3区中文字幕日韩| 欧日a| 国产精品点击进入在线影院高清| 偷拍色图| 久久欧美1卡2卡3| 高清无码 国产精品| 国产精品毛片| 欧美精品另类人妖xxxx| 国产精品青草综合久久| 日韩综合无码一区久久92| av线电影| 夜夜爽爽爽| 多毛小伙内射老太婆 | 色婷婷电影| 岛国在线免费视频| 91中文字幕制服丝袜免费视频| 超碰1024久久| 精品一区二区啪啪啪| 黄色在线网站| 中国熟女老妇仑乱一区二区三区| 91AV国产精品| 久久婷婷亚洲欧| 女色视频社区| 五月丁香综合啪啪| 强奸国产在线| 奇米四色网| 黑人综合网| 久伊人网78| 超碰97在线中文| 99999精品成人| 嗯啊不要在线| 午夜色婷婷| 日韩精品1区2区中文字幕| 91福利网在线观看| 色噜噜国产精品视频一区二区| 国产丸一视频| 国产久久日| 十八禁黄色成人网站观看| 女人的久久久| 婷婷综合| 大香蕉久久| 日本 欧美 国产一区| 国产精品一级特黄aaa大片在线观看 | 欧美视频一区二区在线| 隔壁邻居波多野结衣中文字幕 | 伊人一区二区三区| 日本一区99| 黑人中出21连凳花野真衣| 女人天堂AV五区在线| 午夜天堂精品久久久久91| 黄片在线免费在线观看| 一级性爱aaaa| 日本护士高潮| 亚洲成人久久美女| 国模精品娜娜一二三区 | 啊啊啊 在线| 青青草AV色| 久久有码视频| 4虎在线观看| 精品国产AV一区天美传媒| 美女9118禁| 蜜臀久久99精品久久久久久婷婷| 阿姨一区二区免费视频-高清正片西瓜视频下载app-T450AV | 91狠狠综合久久| 久久婷五月天| 人妻天天夜夜爽一区二区| 亚洲精品视频二区| 日本天堂网| 日夜干射色啊| 婷婷精品国产欧美精品亚洲人人爽| 啊灬啊灬啊灬啊灬高潮奶出了免费视 | www.四虎在线| 综合色图,成人综合网| 1区2区3区视频| 美女诱惑久久| 国内精品嫩模A∨私拍小视频| 东北少妇高潮zzzz| 蜜乳AV.COM| A 天堂在线观看视频| 中文字幕在线免费观看视频| 欧美一级三级| 欧美亚洲丝袜美女电影| 亚洲精品美女操逼| 18+91网站| 久久国产成人精品国产成人亚洲 | 91人人爽人人爽人人人,gav福利视频导航,日韩欧美亚洲国产字幕四区 | 亚洲成人激情小说视频| 午夜福利激情在线视频| 国产亚洲色婷婷久久99精品91葵花宝典| 337p大胆噜噜噜噜噜91Av| 欧插网站| 男人成人黄色视频在线观看免费下载| 欧美se综合| 黄色人人| 99色视频| 1000午夜黄色| 97亚洲在线| 密乳无码| 骚货人妻偷情自拍在线视频| 色九九九九| 天天干人人乐| 亚洲av综合色区无码一| 亚洲天堂电影精品一区| 久干网| 97综合国产| 中日韩久久久| 人妻在线臀日韩| 久超碰这里只有精品| 日韩欧美大片免费高清啪啪| 五月综合婷婷久久网站| 抽查国产福利主播| 人妻激情视频| 26uuu性物| 97色在线观看| 最好看的中文字幕在线2018| 亚欧性爱在线无码| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 操www| 午夜天天碰综合视频| 日韩欧美蜜桃精品久久中文字幕久久 | 青春草莓视频在线观看网址| 国产一区二区三区精品观看啪| 亚州综合电影| 亚洲情欲| 色色色综合网| 一二三四区电影| 强奸乱伦Av网| 九九九影院| 日本高清免费一本视频在线观看| 9久超碰| 少妇高潮一区二区三区在线| 99久久精品无码一区二区| 97硬碰| 秋霞一集毛片观看| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 亚洲成人碰碰| 亚洲 欧美 第一页 | 久久久少妇诱惑精品视频| 久久久亚洲Av| 日韩ab网| 欧美1区二区三区公司| 色婷婷成人综合| 亚洲色婷婷久久91| 九月丁香婷婷| 极品国产内射| 无码91| 日韩中文字墓| 尤物av网站| 老熟女乱伦片| 欧亚第一综合网| 欧美A片中文字幕| 亚洲91网。| 日本操逼视频不卡直接放| 中文字幕制服欧美久久一区| 人人模人人看| 躁躁日曰躁2020| 日本一久是| 日本色色网| 99rre在线精品99re8| 抽插一区二区视频| 东京热综合久久一区二区| 99操碰| 伊人超碰97| 91丨国产丨白浆| 96久久久| 中文字幕乱碼在线| 欧美午夜视频免费观看| 91欧美性| 久久亚洲精品成人av| 久久大香蕉97| baisiav| 日本熟女不卡视频| 91真人天天在线| 中文字幕成人理论在线| 亚洲一区二区中文字幕| 草草影院在线视频| 久久av无码| 试看60秒| 五月丁香啪| 香蕉国产精品麻豆亚洲欧美日韩| 一区二区三区 丝袜高跟| 天天搞在线综合网| 0755午夜福利视频| 91色鬼| 国模艳艳啪啪一区| 亚洲 欧美综合| 美女的肌被草喷水视频| 天天干夜夜一操| 欧美色性情| 欧美综合在线91| 色欲久久综合| 久久久国产av美女私房| 极品出轨视频网站| 蜜臀亚洲中文| 九九综合久久| 三级日本一区二区三区| 97人人色| 久久久av爱| 狠狠色婷婷| 天天操夜夜操狠很操| 蜜臀网 一区| 另类av综合久久| 91色情黑丝搞鸡在线观看一区二区三区三州 | 日韩三级伦理中文字幕| 久艹99| 欧美日韩黄色片一区二区三区四区人与兽做爱| 色综合av男人天堂| 欧美片第一页| 欧美色老汉| 性性久久| 北条麻妃99精品青青久久| 亚乱色| 三级日韩一区二区三区| 大逼色网站| 欧美久久久| 欧洲中文字幕| 伊人色综合网| 成人三级片无码| 国产乱色国产精品免费视| 97天堂| 日日骚网站| 97超碰欧美手机在线| 人人妻人人色| 黑丝少妇麻豆| 啊啊啊操一区| 久操热线| 伊人女女资源在线观看| 强奸乱伦AV网站| 狠狠色伊人亚洲综合网站色| 色五月AV| 天天cao在线| 97日韩欧美亚洲| 伦理日韩国产久久| 97资源免费视频| 69综合网| 内射中出日韩在线观看视频| 小少妇| 日本天天操| 国内三级自拍小视频在线观看| 成人a大片在线观看| 成人性爱AV在线免费观看| 成人精品在线免费视频| 羞涩视频| 神马九九| 一区在线观看中文字幕| 加勒比久久综合网高清| 综合免费无码中文| 久久夜黄色无码A级大片| 中国一级特黄大片护士| 69少妇一区二区| 午夜AV人气不卡| 综合五月婷婷亚洲一区| 国产91精品福利在线| 精品久久久久av影院| 中文字幕交换人妻| 国产熟女免费观看久久| 久久久久亚洲Aⅴ无码| 久久精视频美日韩在线视频| 唐山老熟妇露脸啪啪叫| 99久久精品国产高潮| 中字乱伦AV| 五月天婷婷基地| 欧美黑人猛交春色影视大全| 九九九综合精品| 欧美白嫩在线放| 97资源免费视频| 高清不卡 中文 人妻| 91久久精品美女高潮喷水| 欧美96在线|欧| 超碰97人妻在线| 最新av网站在线观看| 日本一区二区三区四区免费观看| 亚洲无码久久久久久久| 久久婷婷伊人| 伊人五月天青青草婷婷| 无码视频一区二区| 国产人妻精品一区二区三区秋霞 | 在线观看无码三级少妇| 国产99久久99热这里只有精品15| 成人黑料社久久| 又黑又大又粗| 97爱b| 午夜传煤十二区精品| 97超碰人人操人人操| 欧美一级久久久久久久大片动画 | 91在线国产后入风骚翘臀美女素人| 阿姨一区二区免费视频-高清正片西瓜视频下载app-T450AV | 老女人综合网| 男女性感激情网站| 九九黄色网| 天堂精品小草| 凹凸 69堂 在线播放| 久久久久久久强迫| 亚洲成人久久一区二区| 伊人色综合网| 国产亚洲日本| 中文字幕乱亚洲美女精品一区| 美女操逼A A| 中文字幕在线高清男人的天堂| 久久精彩视频9| 欧美性Fer办公室秘书| 日韩无码极品| 日亚韩精品视频二区三| 蜜桃中文字日产乱幕4区| 一区二区三区四区在线不卡| 中文操逼字幕| 国产99热| 操91| 91av一区二区在线观看| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 欧美一级久久久丰满| 女优视频第10页| 啊啊啊啊啊啊啊在线| 激情小说在线视频| 国产久久久久久久久一区二区| 无码人妻丰满熟妇奶水区毛片| 色原狠狠天天天| 日本日逼高清| 有码人妻系列| 青青草一区二区高清无码视频| 伊人精品久久网站| 国产精品一区二区在钱播放| 少妇高潮九九九九九九九| 色翁荡息又大又硬又粗又爽| 老鸭窝亚洲毛片| 欧美九九九| 国产亲戚伦亲在线| 蜜臀99999| 中文字幕丰满人妻日本| 97色色色| 91色射| 熟女色综合久久| 狠狠夜色午夜久久综合在线| 2020中文字幕在线观看| 婷婷五月天久久久| 妇女乱色二区| 国语国产操逼伊人AV网| 蜜臀色乳| 飘花国产午夜精品不卡| 欧美日韩222| 亚洲无线观看久久| caopeng97| 亲子敌伦对白在线播放| 少妇高潮99p| 亚洲精品人体| 91黑丝在线播放| 九九热国产| 92福利社视频| 男女国产精品| 嗯嗯啊中文字幕| 最近二区三区视频大全| 亚洲精品丝袜-不卡成人免费……| 久草精品在线| 成人婷婷丁香| 精品午夜福利| 97视频在线观看播放与子乱对白在线……| 99re欧美| 中亚精品极乱| 九九综合九九综合| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 97在线视频免费| 人妻天天操天天爽视频免费| 综合网欧美| 色九月综合| 天天插夜夜操| 好吊爽好吊爽在线视频,中文字幕精品一区二区日本,国产良妇出轨视频在线观看, | 欧美一区二区观看在线| 熟女91网| 色婷婷99| 新亚洲无码| 欧美性爱一区二区三区四区| 蜜桃视频成a人v在线| 久久久久幕乱码| Julia在线播放亚洲久久| 天天插网| 国产亚洲色婷婷99精品91| 东京热男人的天堂精品| 亚洲在线观看| 亚州色交| 激情抓乳插进去啪啪啪日韩| 91视频综合在线| 深爱五月婷婷| 欧美精品久久久久久久丰满| 人妻五十路在线| 色婷婷网| 一级做受视频免费是看美女| 夜精品久无码| 翔田千里av一区二区三区| 天天综合-91入口| 中文字幕78| 99热国产| 国产中文字幕在线点播| 51一区二区三区| 强奸少妇AV导航网| 91爆操视频| 蜜臀久久99精品久久久久| 久久久久密臀一区二区| 97精品综合久久| 天天射天天| 99re99在线视频| 亚洲日韩青青草色月| 在线观看日韩av不卡| 日产操逼| 中日韩久久久免费看| 亚洲丰满很很操| 日本黄色精品专区网站| 欧美久久久| 狠狠欧美| 免费A V在线播放| 一中国女人毛片水真多| 青青草国产一区二区三区| 2001天天操| 大香蕉中文网| 亚洲精品第一| 亚洲欧美高清无码| 精品少妇一区二区| 九九英色视频| 人妻丝袜无 码视频专区| www.伪伪| 测评在线观看AV| 高颜值美女口爆高潮浪叫| 久久综合女优| 欧美熟女少妇| 丰满人妻大屁一区二区| 国产狂喷潮在线精品| 91老司机精品| 亚洲熟女少妇免费视频| 精品国产99| 青娱乐亚洲热| 97人人干| 国产一级做a爰大片免费久久| 亚欧毛片基地国产毛片基地| 天堂综合网| 91痴汉| 久久超碰av在线| 日本超碰97日韩精品人妻| 欧洲综合视频| 高清无码网址| 三级三久久线久久99久目本WW| 国产高清在线观看欧美| 一区操逼| 精品蜜乳AV免费观看| 亚洲综合九九| 欧美性91| 男人天堂新在线| 欧美自拍网| 午夜操一视频一区| 激情婷婷丁香网| 91九色蝌蚪在线观看| 欧美狠狠操| 99久久久无码| 精品国产一区二区久久| 91亚洲黑人| 91原创在线观看| 蜜臀久久久久久999| 欧美亚洲玖玖玖| 色色色色色色色色色色色色色色综合 | 亚洲欧美综合区自拍另类| 内射夫妻三片| 久久久久久久久久va| 无码久久亚洲高清,| 大肥女高潮bbwbbwhd视频| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 欧美,亚洲,日韩,v,天堂,手机在线观看| 91性感网站| 伊人久久亚洲色欲综合网站| 91欧美丝袜| 欧美淫乱视频| 日韩综合97p| 亚洲图片欧美色图| 国产丝袜美女在线一区| 欧美 日韩 亚洲 春色|