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

ARTICLE DETAIL

資訊詳情

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

若依RuoYi-Vue匿名訪問核心:PermitAllUrlProperties源碼解析

若依RuoYi-Vue匿名訪問核心:PermitAllUrlProperties源碼解析 做 Java 后端開發(fā)的多多少少都會跟 RuoYi 這套框架打交道尤其是 RuoYi-Vue 前后端分離版本。如果你在它上面做過二次開發(fā)大概率會在某個(gè)深夜對著“明明放行了為什么還是 401”這種問題撓頭。這時(shí)候你需要認(rèn)識一下PermitAllUrlProperties。這個(gè)類負(fù)責(zé)一件聽起來很小、但實(shí)際很關(guān)鍵的事在應(yīng)用啟動時(shí)掃描所有 Controller 里標(biāo)注了Anonymous注解的接口把這些接口的 URL 收集成一張“匿名白名單”。后續(xù)請求進(jìn)來時(shí)只要命中這張名單就不需要解析 token、不需要登錄態(tài)直接放行。換句話說它決定了哪些接口可以“不穿衣服”跑在路上是若依匿名訪問機(jī)制的核心入口。這篇文章我會從若依的鑒權(quán)鏈路講起拆解PermitAllUrlProperties的源碼、運(yùn)行時(shí)機(jī)、實(shí)際用法再把我踩過的坑和排查思路一并整理出來適合正在做若依二開、或者想徹底理解若依接口鑒權(quán)機(jī)制的開發(fā)同學(xué)。1. 先從若依的鑒權(quán)鏈路說起這個(gè)類到底在解決什么問題1.1 登錄、Token 與動態(tài)權(quán)限校驗(yàn)的基本流程RuoYi-Vue 的鑒權(quán)鏈路可以拆成三步登錄拿 token、請求帶 token、后端驗(yàn) token。用戶在登錄接口輸入用戶名密碼后端校驗(yàn)通過后生成一個(gè)隨機(jī) token把LoginUser對象和用戶權(quán)限信息緩存到 Redis 里token 本身返回給前端。前端每次請求在請求頭里帶上Authorization: Bearer token。后端收到請求后TokenFilter會從請求頭解析這個(gè) token再拿著 token 去 Redis 里換取LoginUser。換到了就把用戶的登錄狀態(tài)放進(jìn)SecurityContextHolder后續(xù)方法級權(quán)限注解PreAuthorize(ss.hasPermi(system:user:list))才能從當(dāng)前上下文里拿到用戶信息判斷這個(gè)用戶有沒有某個(gè)菜單或按鈕權(quán)限。如果換不到那就看這個(gè)接口是不是匿名接口如果是就走放行邏輯不是就直接返回 401。所以這里隱含了一個(gè)問題像/login、/captchaImage、/register這類接口用戶本來就沒登錄不可能帶 token后端必須把它們當(dāng)成“匿名可訪問”的接口單獨(dú)放行。若依的做法就是用Anonymous注解標(biāo)記這些接口再用PermitAllUrlProperties統(tǒng)一收集。1.2 為什么不在 SecurityConfig 里寫死而要引入 Anonymous 掃描機(jī)制很多剛接觸若依的同學(xué)會問Spring Security 不是有permitAll()嗎在SecurityConfig里把這些路徑一個(gè)個(gè)配進(jìn)去不就行了確實(shí)可以傳統(tǒng)單體版若依就是這么干的在SecurityConfig的authorizeRequests()里把/login、/captchaImage等地址permitAll()。但這種方式在前后端分離的 RuoYi-Vue 上有一個(gè)明顯的痛點(diǎn)接口數(shù)量一多集中式配置會變得很難維護(hù)。想象一下這個(gè)場景你負(fù)責(zé)的一個(gè)后臺管理系統(tǒng)有 200 個(gè)接口其中 15 個(gè)是公開的。如果全部集中在SecurityConfig里寫死每次新增公開接口都要去改這個(gè)類改著改著就漏了而且后來的人根本不知道某個(gè)接口是不是故意放行的。更麻煩的是不同業(yè)務(wù)模塊的開發(fā)者改同一個(gè)安全配置文件沖突是遲早的事。Anonymous這種設(shè)計(jì)把“是否匿名”的決策權(quán)下放到了接口方法本身屬于聲明式編程思路。開發(fā)者想開放哪個(gè)接口直接在方法上標(biāo)一個(gè)注解剩下的交給框架去掃描收集。新增接口時(shí)不需要碰全局安全配置改錯(cuò)了也只影響單個(gè)接口風(fēng)險(xiǎn)范圍小得多。兩種方式的差別用大白話講就是集中式寫死路徑像是學(xué)校門口門衛(wèi)手里的一沓紙質(zhì)名單每次有新人進(jìn)來就要改名單Anonymous像是給每間允許自由進(jìn)出的教室門上貼一個(gè)“無需刷卡”的標(biāo)志教室變了門衛(wèi)照常巡邏就行了。1.3 傳統(tǒng)若依和若依-Vue 在這個(gè)機(jī)制上的差異很多網(wǎng)上的教程混著講導(dǎo)致初學(xué)者容易懵。這里把兩個(gè)版本的區(qū)別說清楚。傳統(tǒng)單體版 RuoYi就是那個(gè)用 Thymeleaf 做頁面的版本使用的是直接配置 Spring Security 的方式它的匿名 URL 配置在SecurityConfig里寫死類名不一定叫PermitAllUrlProperties。而 RuoYi-Vue 前后端分離版因?yàn)橐肓烁?xì)粒度的接口權(quán)限模型才在ruoyi-framework模塊下單獨(dú)提供了PermitAllUrlProperties這個(gè)配置類配合Anonymous注解來管理匿名 URL。所以你如果是在 RuoYi-Vue 或它的衍生版本上做開發(fā)才會遇到PermitAllUrlProperties。如果你用的是傳統(tǒng)單體版搜Anonymous可能壓根搜不到就只能去SecurityConfig里找permitAll()的配置了。搞清這個(gè)前提看代碼時(shí)才不會張冠李戴。2. PermitAllUrlProperties 源碼拆解掃描、收集、匹配三步曲2.1 類的骨架InitializingBean 和 ApplicationStartedEvent 的作用PermitAllUrlProperties在若依-Vue 中位于com.ruoyi.framework.config包下完整實(shí)現(xiàn)大致是實(shí)現(xiàn)InitializingBean接口同時(shí)監(jiān)聽ApplicationStartedEvent事件。它有兩個(gè)核心時(shí)間點(diǎn)。第一個(gè)是afterPropertiesSet()這是InitializingBean接口的回調(diào)方法Spring 在完成 Bean 屬性注入后會執(zhí)行它。為什么若依不直接用PostConstruct因?yàn)檫@里需要確保RequestMappingHandlerMapping已經(jīng)初始化完畢能拿到容器里所有接口映射afterPropertiesSet在依賴注入完成后才調(diào)用正是干這件事的合適時(shí)機(jī)。第二個(gè)是onApplicationEvent(ApplicationStartedEvent event)應(yīng)用啟動完成后觸發(fā)。這個(gè)時(shí)機(jī)比 Bean 初始化更晚一點(diǎn)此時(shí)所有接口已經(jīng)掃描完可以安心對白名單列表做排序和歸檔。類里面最關(guān)鍵的兩個(gè)成員變量一個(gè)是注入進(jìn)來的RequestMappingHandlerMapping它就是 Spring MVC 保存所有 URL 映射關(guān)系的地方另一個(gè)是內(nèi)部維護(hù)的ListAnonymousResource anonymousResources這個(gè)列表就是最終生成的匿名白名單。2.2 afterPropertiesSet 中如何掃描所有接口這是整個(gè)類最核心的邏輯。代碼大致長這樣Override public void afterPropertiesSet() { requestMappingHandlerMapping.getHandlerMethods().forEach((key, value) - { SetString urls extractUrls(key); if (CollectionUtils.isEmpty(urls)) { return; } if (value.hasMethodAnnotation(Anonymous.class)) { for (String url : urls) { anonymousResources.add(new AnonymousResource(getPattern(url), false)); } } }); }requestMappingHandlerMapping.getHandlerMethods()返回一個(gè)MapRequestMappingInfo, HandlerMethod。RequestMappingInfo里保存的是這個(gè)接口的完整映射信息包括 URL pattern、請求方式、參數(shù)條件等HandlerMethod則是真正對應(yīng)的 Controller 方法。拿到HandlerMethod之后調(diào)用value.hasMethodAnnotation(Anonymous.class)判斷這個(gè)方法上有沒有標(biāo)Anonymous。這里有個(gè)細(xì)節(jié)要注意這個(gè)判斷只看方法本身如果Anonymous標(biāo)在了 Controller 類上這個(gè)分支是判斷不出來的。實(shí)際若依源碼里還會額外處理類級注解但不同版本實(shí)現(xiàn)有差異后面實(shí)操章節(jié)我再展開講。extractUrls說白了就是從RequestMappingInfo里把路徑取出來。Spring MVC 很貼心地幫我們處理好了類上RequestMapping與方法上GetMapping的路徑拼接所以這里拿到的 URL 是完整路徑不需要自己再去拼一次。真正有點(diǎn)技術(shù)含量的在getPattern方法。比如你寫的接口路徑是/system/user/{userId}運(yùn)行時(shí)真實(shí)請求可能是/system/user/1。如果白名單里存的是帶{userId}的模板后面的匹配邏輯就要額外處理變量。若依的做法是用正則把{xxx}統(tǒng)一替換成*這樣/system/user/{userId}就變成/system/user/*在matches時(shí)用 Ant 風(fēng)格的*通配符就能輕松匹配任意參數(shù)。2.3 啟動后排序別讓通配符搶了精確路徑onApplicationEvent里的邏輯相對簡單就是給anonymousResources列表按照 URL 長度做降序排序代碼大致是Override public void onApplicationEvent(ApplicationStartedEvent event) { anonymousResources.sort(Comparator.comparingInt(resource - resource.getUrl().length()).reversed()); }為什么要排序因?yàn)閙atches匹配的時(shí)候是順序遍歷列表一旦某個(gè) URL 命中就直接返回 true。如果有兩條規(guī)則一條是/*一條是/system/config/list假設(shè)請求是/system/config/list要是先匹配了/*那精確路徑就被通配符吞掉了永遠(yuǎn)沒有機(jī)會走到第二層判斷。雖然很多匹配器內(nèi)部會做盡量匹配但若依這里用的是PatternMatchUtils.simpleMatch是“匹配到就返回”的邏輯所以順序直接影響結(jié)果。把長的、精確的路徑排在前面是一種簡單粗暴但非常有效的防誤判手段。這一點(diǎn)在實(shí)戰(zhàn)中特別容易被忽略。我有一次給某個(gè)模塊的所有接口統(tǒng)一加了Anonymous結(jié)果同模塊下一個(gè)更具體的接口怎么調(diào)都進(jìn)不了登錄態(tài)保護(hù)查了半天才發(fā)現(xiàn)是排序規(guī)則把精確路徑擠到了后面。后來養(yǎng)成了習(xí)慣凡是自己往白名單里加通配路徑都會特別留意它和已有規(guī)則之間的匹配優(yōu)先級。2.4 matches 的匹配規(guī)則為什么不是簡單 equals最后是matches方法public boolean matches(String requestURI) { for (AnonymousResource resource : anonymousResources) { if (PatternMatchUtils.simpleMatch(resource.getUrl(), requestURI)) { return true; } } return false; }PatternMatchUtils.simpleMatch是 Spring 自帶的輕量路徑匹配工具支持*匹配任意字符但不支持**跨目錄匹配。若依在收集 URL 時(shí)已經(jīng)做了模板變量到*的轉(zhuǎn)換所以用這個(gè)工具類就夠了夠輕、夠快也不用引一整套AntPathMatcher進(jìn)來。AnonymousResource是若依自己定義的一個(gè)小類內(nèi)部有兩個(gè)字段url和isAuth。isAuth這個(gè)字段有點(diǎn)意思它表示這條匿名 URL 是否“即使帶著 token 也要繼續(xù)走鑒權(quán)流程”。默認(rèn)情況是false也就是不管帶不帶 token 都直接放行。在某些二次開發(fā)場景里你可能希望一個(gè)接口允許匿名訪問但如果用戶帶了 token又想順便識別出身份這個(gè)字段就能派上用場。3. 它是怎么被調(diào)起來的從 TokenFilter 到 SecurityContextHolder3.1 過濾器鏈中的關(guān)鍵一票PermitAllUrlProperties本身不會攔截任何請求它是一個(gè)被動的“查詢服務(wù)”。真正在請求進(jìn)來時(shí)調(diào)用它的是TokenFilter這是若依-Vue 里繼承OncePerRequestFilter的一個(gè)過濾器。TokenFilter的執(zhí)行流程大概是這樣的請求進(jìn)來它先從 header 里解析 token如果 token 能換到LoginUser就把登錄態(tài)放進(jìn)SecurityContextHolder然后繼續(xù)走后續(xù)邏輯。如果 token 解析不出來或者根本沒帶 token它會調(diào)用permitAllUrlProperties.matches(request.getRequestURI())判斷當(dāng)前地址是不是匿名白名單里的接口。命中白名單就直接調(diào)filterChain.doFilter(request, response)放行不再強(qiáng)制要求登錄狀態(tài)。沒命中白名單就拋一個(gè)AuthenticationException由全局異常處理器轉(zhuǎn)成 401 返回給前端。所以PermitAllUrlProperties是整個(gè)鑒權(quán)鏈條里一個(gè)很關(guān)鍵的“閘口”。這個(gè)閘口一旦失效后果很極端要么所有帶Anonymous的接口全部變成需要登錄要么因?yàn)槟承┡渲缅e(cuò)誤導(dǎo)致整個(gè)過濾鏈被繞過白名單形同虛設(shè)。3.2 登錄用戶信息是在哪里寫入的熱搜里有個(gè)問題很有代表性“ruoyi在哪里寫入登錄用戶的信息”。如果你翻過TokenFilter源碼這個(gè)問題其實(shí)很好回答。在TokenFilter里拿到loginUser之后會執(zhí)行類似下面這段邏輯Authentication authentication new UsernamePasswordAuthenticationToken(loginUser, null, authorities); SecurityContextHolder.getContext().setAuthentication(authentication);SecurityContextHolder底層是ThreadLocal所以每個(gè)請求的登錄態(tài)是互相隔離的。一個(gè)請求從進(jìn)入到返回只要線程不切換、不走異步SecurityContextHolder里的Authentication就一直有效后面的PreAuthorize(ss.hasPermi(...))就是通過讀取這個(gè)上下文來判斷用戶身份的。但要注意如果接口走了匿名放行分支TokenFilter不會往SecurityContextHolder里寫任何東西上下文就是空的。這也就解釋了為什么Anonymous接口里如果再加PreAuthorize大概率會報(bào)“沒有用戶信息”的異常。3.3 Anonymous 與 PreAuthorize 的分工邊界很多初學(xué)者會把“匿名訪問”和“權(quán)限校驗(yàn)”混在一起以為兩個(gè)是互斥的其實(shí)它們是兩個(gè)不同維度的事。Anonymous解決的是“要不要登錄”的問題它控制的是請求能不能不帶 token 進(jìn)來。PreAuthorize解決的是“登錄了之后有沒有權(quán)限”的問題它控制的是某個(gè)用戶能不能訪問某個(gè)資源。一個(gè)內(nèi)部接口比如刪除用戶需要同時(shí)滿足“已登錄”和“有刪除權(quán)限”這種就應(yīng)該只寫PreAuthorize(ss.hasPermi(system:user:remove))不要寫Anonymous。一個(gè)公開的頁面接口比如獲取驗(yàn)證碼它需要“不登錄也能訪問”這種才寫Anonymous。一旦一個(gè)接口同時(shí)標(biāo)注了Anonymous和PreAuthorize語義就會變模糊Anonymous說你不需要登錄但PreAuthorize要求上下文里有用戶信息這本身就是自相矛盾的。所以我在工作中會跟團(tuán)隊(duì)強(qiáng)調(diào)拿到需求先判斷接口是“公開”還是“內(nèi)部”再決定用哪套機(jī)制兩個(gè)別混著寫。4. 實(shí)操如何用 PermitAllUrlProperties 開放一個(gè)匿名接口4.1 最小示例方法級別加 Anonymous在若依-Vue 中想讓某個(gè)接口支持匿名訪問最小操作就是在 Controller 方法上標(biāo)一個(gè)Anonymous注解Anonymous GetMapping(/demo/publicInfo) public AjaxResult publicInfo() { return AjaxResult.success(這是公開信息); }啟動項(xiàng)目后直接用瀏覽器訪問/demo/publicInfo或者用 curl 不帶任何 header 請求都能正常返回 JSON不會彈出 401。如果這個(gè)接口在 Controller 類上還有一層RequestMapping(/api)那完整路徑就是/api/demo/publicInfoRequestMappingInfo會自動拼接不需要你手動處理前綴。還有一點(diǎn)要注意如果項(xiàng)目配置了server.servlet.context-path比如部署在/dev-api那訪問時(shí)的完整 URL 還要加上這層上下文路徑。TokenFilter里的request.getRequestURI()是包含 context-path 的所以白名單里的路徑也要跟著帶上前綴否則永遠(yuǎn)匹配不上。4.2 類級別加 Anonymous 的坑把Anonymous寫在 Controller 類上表示該類下所有方法都允許匿名訪問Anonymous RestController RequestMapping(/demo) public class DemoController { GetMapping(/a) public AjaxResult a() { ... } GetMapping(/b) public AjaxResult b() { ... } }這種寫法在需求上很常見比如對外數(shù)據(jù)同步接口、開放查詢接口等整組方法都不需要登錄態(tài)。但它有個(gè)隱患如果一個(gè)類里既有公開接口又有需要登錄的接口類級注解會讓后者的鑒權(quán)形同虛設(shè)等于你辛辛苦苦寫的PreAuthorize全部被忽略了。少數(shù)衍生版本對類級Anonymous的支持還不一致有些版本可能壓根沒有解析類上的注解導(dǎo)致“明明標(biāo)了卻還是 401”。我自己的經(jīng)驗(yàn)是盡量在方法級別加注解只有確認(rèn)整個(gè)類的所有方法都必須公開時(shí)才考慮類級寫法。畢竟方法級語義最清楚排錯(cuò)也最簡單。4.3 有版本差異嗎RuoYi 傳統(tǒng)版、RuoYi-Vue、RuoYi-AI、Sa-Token 改造版這個(gè)問題我覺得值得單獨(dú)拿出來講因?yàn)樘嗳瞬冗^坑。如果你用的是傳統(tǒng)單體版 RuoYi沒有PermitAllUrlProperties這個(gè)類匿名配置直接在SecurityConfig里寫permitAll()。這個(gè)是第一代方案。如果你用的是 RuoYi-Vue 前后端分離版才是本文講的這套AnonymousPermitAllUrlProperties機(jī)制。這是第二代方案。現(xiàn)在市面上還有很多衍生版本比如 RuoYi-AI、RuoYi-Vue-Pro以及各種基于 Sa-Token 改造的 SSO 版本。這些版本大多繼承或改寫了原來的鑒權(quán)邏輯。比如基于 Sa-Token 的若依可能用SaIgnore注解代替Anonymous同時(shí)把原來的TokenFilter換成了 Sa-Token 自己的過濾器。這時(shí)候你再翻代碼可能根本找不到PermitAllUrlProperties被調(diào)用的地方因?yàn)殍b權(quán)過濾器整條鏈都被替換掉了。還有若依-Vue-Pro 里開啟 BPM 工作流功能那是業(yè)務(wù)模塊的擴(kuò)展不影響這個(gè)配置類的定位但業(yè)務(wù)接口里哪些被放行、哪些沒被放行還是值得順著這套鏈路重新理一遍特別是工作流回調(diào)這類端口經(jīng)常出現(xiàn)匿名配置漏配或過寬的問題。4.4 動態(tài)擴(kuò)展白名單的一個(gè)可行思路PermitAllUrlProperties是啟動時(shí)一次性掃描的想加白名單就得改代碼重啟服務(wù)。但實(shí)際業(yè)務(wù)中經(jīng)常有這種需求運(yùn)營后臺想臨時(shí)放行一個(gè)接口又不想發(fā)版重啟。這時(shí)候可以模仿這個(gè)類的設(shè)計(jì)自己做一套數(shù)據(jù)庫動態(tài)白名單。大致思路是先建一張配置表字段包括 URL 模板、啟用狀態(tài)、備注。啟動時(shí)把啟用的 URL 加載到內(nèi)存緩存里同時(shí)暴露一個(gè)刷新接口后臺改了配置之后調(diào)一下刷新接口或者用定時(shí)任務(wù)周期性加載。然后在TokenFilter的判空邏輯里把原來的單一判斷擴(kuò)展成多判斷。除了permitAllUrlProperties.matches(request.getRequestURI())再加一個(gè)dynamicAnonUrlService.matches(request.getRequestURI())兩者只要有一個(gè)命中就放行。代碼改動不大但靈活性提升了一個(gè)量級。這里必須強(qiáng)調(diào)一個(gè)安全原則動態(tài)白名單的入口一定要嚴(yán)格做權(quán)限控制不是誰都能配置。我見過一個(gè)項(xiàng)目把動態(tài)白名單管理接口放在了一個(gè)公開模塊里結(jié)果別人只要知道接口地址就能給自己加匿名權(quán)限等于把整個(gè)系統(tǒng)的安全防線給拆了。白名單這種東西寧可笨一點(diǎn)、慢一點(diǎn)也不要敞開口子。5. 常見問題與排查實(shí)錄5.1 加了 Anonymous 卻依然 401這是我在群里被問得最多的問題。我把排查思路整理成一個(gè)速查表遇到問題可以照著過一遍??赡茉蚺挪榉椒ń鉀Q思路注解標(biāo)在了類上但版本不支持解析查看框架版本源碼看afterPropertiesSet是否處理了類級注解改成方法級注解接口路徑與白名單不匹配確認(rèn)context-path是否包含在請求 URI 中在完整 URL 上做匹配必要時(shí)打印request.getRequestURI()注解加在了非 Controller 方法上確認(rèn)注解是不是標(biāo)在真正被 Spring MVC 映射的方法上只標(biāo)在 handler 方法上不要標(biāo)在普通私有方法過濾器鏈被其他框架替換查項(xiàng)目里有沒有引入 Sa-Token 等第三方鑒權(quán)框架統(tǒng)一用第三方的放行注解或調(diào)整過濾器順序項(xiàng)目上下文有多次轉(zhuǎn)發(fā)或重寫反向代理、網(wǎng)關(guān)層對 URL 做了改寫在網(wǎng)關(guān)層同步放行規(guī)則或使用更寬松的通配符如果項(xiàng)目是若依-Vue 原生版本我建議先做一件事寫一個(gè)臨時(shí)接口在TokenFilter里加一行日志把每次請求的request.getRequestURI()和permitAllUrlProperties.matches()的結(jié)果打出來。不用猜日志會告訴你答案。5.2 路徑匹配不上或匹配了不該匹配的拿到白名單之后先留意*和**的區(qū)別。若依把{xxx}替換成的是*而 Spring 的PatternMatchUtils里*只能匹配路徑中一個(gè)層級不跨/。比如/system/user/*能匹配/system/user/1但匹配不了/system/user/1/2。如果你希望整個(gè)子目錄都匿名手寫的 URL 應(yīng)該用/system/user/**。還有一種常見情況是精確路徑和通配符互相干擾。例如你已經(jīng)有一條/system/**的通配規(guī)則又單獨(dú)放行了/system/user/list由于列表是按 URL 長度降序排序的/system/user/list會更早被匹配所以結(jié)果反而是正常的。但如果通配路徑寫得太寬把本來要保護(hù)的接口也吞進(jìn)去這個(gè)問題就麻煩了。排查思路很簡單把當(dāng)前系統(tǒng)的匿名白名單完整打印出來逐條看有沒有“看起來不該公開”的路徑。若依的anonymousResources是內(nèi)存列表你可以在onApplicationEvent或者matches方法里臨時(shí)加一行日志把列表內(nèi)容輸出到控制臺一目了然。5.3 多模塊項(xiàng)目里 Controller 掃描不全前后端分離的大型項(xiàng)目經(jīng)常拆成多個(gè) Maven 模塊。如果你的 Controller 不在啟動類默認(rèn)掃描的包路徑下就不會被注冊到 Spring 容器里RequestMappingHandlerMapping自然拿不到這個(gè)接口Anonymous就算標(biāo)了也不會被掃描到。排查時(shí)先看啟動類上的SpringBootApplication默認(rèn)掃描范圍再看有沒有自定義ComponentScan。如果業(yè)務(wù)模塊放在com.company.business這種和啟動類不同根的包下就需要顯式擴(kuò)展掃描路徑。這是很基礎(chǔ)的問題但往往藏得很深因?yàn)榻涌诒旧硎悄茉L問的只是白名單掃描漏了表現(xiàn)就是“同一個(gè)Anonymous有的接口生效有的不生效”。5.4 接入 Sa-Token / SSO / BPM 后白名單失效如果你在若依上接入了 Sa-Token 或者做了 SSO 改造要意識到一個(gè)事實(shí)過濾器鏈變了原來的TokenFilter可能已經(jīng)被替換掉PermitAllUrlProperties也就變成了一個(gè)沒人調(diào)用的“僵尸配置類”。這時(shí)別去改PermitAllUrlProperties的源碼應(yīng)該找到新的鑒權(quán)過濾器里對應(yīng)放行的那個(gè)判斷邏輯看它有沒有兼容舊的Anonymous沒有的話就加入兼容處理或者干脆統(tǒng)一遷移到新注解。SSO 場景里特別要關(guān)注回調(diào)地址比如第三方系統(tǒng)登錄成功后跳回本系統(tǒng)的地址。這個(gè)回調(diào)通常要求匿名訪問但這種匿名應(yīng)該精確到具體的回調(diào)路徑而不是直接把/**整條放開。我見過一個(gè)項(xiàng)目為了調(diào)試方便把整個(gè)系統(tǒng)都設(shè)成了匿名上線后忘改回來相當(dāng)于所有接口都裸奔了一段時(shí)間還好是內(nèi)網(wǎng)系統(tǒng)否則后果不堪設(shè)想。5.5 如何寫一個(gè)簡單的自動化測試來守住這條鏈框架改來改去最容易出問題的環(huán)節(jié)就是匿名白名單。我建議在項(xiàng)目里針對這個(gè)點(diǎn)寫幾個(gè)接口測試守住底線。用 Spring Boot Test 配合 MockMvc最簡單的一組用例是這樣SpringBootTest AutoConfigureMockMvc public class PermitAllUrlTest { Autowired private MockMvc mockMvc; Test public void anonymousUrlShouldPassWithoutToken() throws Exception { mockMvc.perform(get(/demo/publicInfo)) .andExpect(status().isOk()); } Test public void protectedUrlShouldRejectWithoutToken() throws Exception { mockMvc.perform(get(/system/user/list)) .andExpect(status().isUnauthorized()); } }第一條規(guī)定了白名單接口必須能匿名訪問第二條規(guī)定了受保護(hù)接口沒 token 時(shí)必須拒絕。這兩條用例只要跑通說明過濾鏈的基本行為沒問題。以后誰在改造鑒權(quán)邏輯時(shí)誤刪了匿名判斷測試直接就會報(bào)紅避免問題流到生產(chǎn)環(huán)境。這里有個(gè)小技巧測試類盡量用AutoConfigureMockMvc它會自動配好 Spring Security 的 Mock 環(huán)境不需要額外起真實(shí)端口跑起來很快。如果你改動了過濾器鏈再補(bǔ)幾個(gè)“帶 token 訪問受保護(hù)接口”的用例整個(gè)鑒權(quán)鏈路就基本有保障了。5.6 最容易忽視的Anonymous 接口里的業(yè)務(wù)代碼前面講的都是框架層面的問題最后補(bǔ)一個(gè)業(yè)務(wù)層面的坑。有些接口標(biāo)了Anonymous但從 Redis 里拿用戶信息的代碼卻依然寫在業(yè)務(wù)方法里。匿名請求沒有登錄態(tài)LoginUser從SecurityContextHolder里取出來是 null然后業(yè)務(wù)代碼直接 NPE。這種問題框架層面沒有任何提示只有接口被匿名訪問時(shí)才會暴露。我的建議是凡是標(biāo)了Anonymous的接口業(yè)務(wù)邏輯里就不要再依賴任何用戶上下文。如果有部分邏輯需要當(dāng)前登錄用戶那就拆成兩個(gè)接口一個(gè)匿名版一個(gè)登錄版用不同的地址區(qū)分開。這樣既保證了匿名接口能正常調(diào)用也不會讓登錄態(tài)缺失的邏輯在不知不覺中出問題。6. 我在二次開發(fā)中最后想提醒的三件事6.1 別把匿名接口當(dāng)成“免檢通道”匿名接口不是說“寫個(gè)注解就完事了”它意味著這個(gè)接口會暴露給任何能訪問到你系統(tǒng)的人。登錄、驗(yàn)證碼這種接口放行沒問題但涉及用戶數(shù)據(jù)、系統(tǒng)配置、敏感操作的接口一定要慎之又慎。我見過一個(gè)項(xiàng)目把個(gè)人信息的查詢接口標(biāo)了Anonymous本意是讓小程序端不登錄也能查到基本信息結(jié)果接口返回的是完整手機(jī)號和身份證號等于把用戶隱私直接掛在公網(wǎng)上。白名單是用來解決“無法帶 token”的問題的不是用來繞過權(quán)限設(shè)計(jì)的。真正合理的做法是需要公開的數(shù)據(jù)只返回公開字段或者改成帶 token 的登錄查詢。6.2 上線前用全局搜索掃一遍所有 Anonymous這個(gè)習(xí)慣我保持了很長時(shí)間樸素但非常有效。每次提測或者上線前在 IDE 里對Anonymous做一次全局搜索逐個(gè)確認(rèn)這些接口是否真的應(yīng)該匿名。尤其是項(xiàng)目經(jīng)歷過多次迭代之后往往會出現(xiàn)一種情況某個(gè)接口早期為了聯(lián)調(diào)方便加了Anonymous后面功能正式上線了注解卻一直沒刪。這種“歷史遺留匿名接口”是最危險(xiǎn)的因?yàn)樽龉δ荛_發(fā)的人已經(jīng)忘了它存在安全測試的人也沒注意到它就在角落里默默公開著。如果搜索出來的注解數(shù)量比較多建議在項(xiàng)目里單獨(dú)建一個(gè)文檔維護(hù)白名單清單把每個(gè)匿名接口的用途、開放時(shí)間、負(fù)責(zé)人記下來。流程聽起來繁瑣但真出了事這張表能幫你快速定位是誰、什么時(shí)候、為什么開的這個(gè)口子。6.3 多租戶和 AI 衍生框架的匿名邊界要額外小心現(xiàn)在很多項(xiàng)目是基于若依做多租戶改造的或者接入了 AI 能力變成 RuoYi-AI 這類衍生框架。這些場景下匿名接口的邊界問題會被放大。多租戶項(xiàng)目里租戶信息通常是從 token 里解析tenantId拿到的。匿名請求沒有 token也就沒有租戶上下文業(yè)務(wù)代碼如果默認(rèn)“當(dāng)前租戶 0”或者“默認(rèn)租戶”就可能出現(xiàn) A 租戶的公開接口返回了 B 租戶的數(shù)據(jù)。遇到這種場景匿名接口要么不做租戶隔離要么在網(wǎng)關(guān)層根據(jù) IP、域名等外部標(biāo)識做租戶識別。接入 AI 功能的產(chǎn)品還容易踩另一個(gè)坑為了讓用戶先試后登把提問、對話這類接口全部匿名。這本身沒問題但要注意調(diào)用外部 AI 服務(wù)時(shí)成本是真實(shí)發(fā)生且不可控的。我的經(jīng)驗(yàn)是匿名接口必須配套限流和頻控哪怕只是最簡單的 IP 維度限流也能在大流量沖擊時(shí)保住成本底線。回到最開始那個(gè)問題PermitAllUrlProperties表面上只是一個(gè)“掃描注解、收集 URL、匹配請求”的小工具但理解了它你其實(shí)就理解了若依整個(gè)鑒權(quán)鏈路的入口邏輯。我自己在做若依二次開發(fā)時(shí)最深的一個(gè)體會是白名單這種東西配置越分散、越隱蔽越容易出問題。尊重Anonymous加統(tǒng)一掃描這套模型把規(guī)則盡量收斂到一個(gè)清晰的清單里排錯(cuò)時(shí)才能真正做到心中有數(shù)。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
欧美激情专区| 丁香五六月啪啪| 偷拍在线观看视频| 日韩性爱播放| 激情视频图片| 亚洲另类电影| 午夜操一操| 婷婷中文字幕| 清纯唯美亚洲综合| 99久久无色码| 在线无码网站| 国产熟女高潮一区二区三区| 男女真人网18| 91插B网站| 美中日韩无码| 俺去啦自拍| 亚洲欧美一区二区三区一猛片| 亚洲成人妻日韩在线| 久热影视| 啊啊啊啊,啊啊好多水| 艳美熟妇先锋一二三区| 国产性久久久| 激情五月天中文字幕色| 红杏大香蕉| 成人小电影网站tex| 男人天堂一区二区| 国产精品久久久久中文字幕| a片偷拍视频| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区 | 国产精品无码av| 精品国产一区二区三区四区在线看 | 在线视频资源| 四虎AV在线播放| 日韩人人精品| 超碰色97| 91精品国产91综合久久蜜臀| 免费国产视频| 亚洲情色综合| 日韩精品在线放| 91操操操操| 国产精品久久久| 欧美高清无码免费视频高清版| 亚洲综合在线第一页| 色狠狠一区二区三区香蕉| 天天综合网合集91| 久久精品国产97欧美精品亚洲| 欧美日韩97在线| 嫩草 我啊~嗯~在线| 亚洲色丰满少妇高潮| 目产99999久久999| 欧美 亚洲 综合 制服 另类| 后入日本1234| 亚州综合色| 97超碰人人模人人拍人人| 成·人免费午夜在线观看| 啪啪性爱免费视频| 亚洲 欧美 手机在线观看| 国产中文字幕曰本毛片| 翘臀vidoes| 久久男人网| 性交一区二区在线播放| 超碰久久.com| 中文字幕人妻资源在线| 另类小色呦| 欧美激情综合色综合啪啪五月| 天天日天天舔天天喷天天射| 超碰性爱97| 内射黑丝袜| 亚洲自拍小说| 欧美一二三级精品在线| 国产精品亚洲美女久久久久| 嗯嗯啊啊用力视频免费| 91国产丝袜美女| 99久久99久久免费精品蜜臀| 天天搞在线综合网| 久久久人体| 欧美变态激情网| 肥臀熟女一区二区三区视频| 国产三级多多影院2022国产AA一级毛片无码 | 久久鲁夜| 精品一区二区三区18| 国产精品999aaa| 久久精品中文字幕无码l| 六六久久日韩不卡| 日本精品九九九| 91操熟女| 99热这里是精品| 天天综合色| 97无码视频在线播放| 国内外毛片在线观看| 粉嫩av在线| 欧美日韩 强奸乱伦| 欧美一级欧美三级在线观看| 超碰97男女| 免费啪啪一级视频| 国产精品动态一区二区三区四四| 秋霞一级鲁丝片A片| 色优久久| 久久精品无码熟妇一区二区三区视频导航 | 色97欧美| 国产伦乱91| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 6080yy午夜理论三级一区二区三区无码 | AV天黑人| 色欲日韩欧美在线一区| 亚洲成人色情五月天丁香花| 91性高朝久久久久久久久| 色五月婷婷中文字幕| 亚洲Av噜噜一区二区三区妖精| 99re免费| 亚洲影视综合网| 人妻精品一区二区| 私色综合网| 超碰吊日色| 99久久久久| 超碰1997| 欧美一级国产一级| 999 久久久| 自拍偷拍 日韩欧美| 亚洲色图超碰在线| 四虎国产精品永久在线囯在线| 久久久蜜桃一区二区三区| 夜夜夜夜久久久久| 婷婷六月色| 人妻天堂三区| 人妻碰碰碰碰碰碰| 黄视频免费| 欧美激情视频一区二区三区不卡| 一级成人性爱| 午夜AV污污污| 色爱综合网| 久久久999国产精品| 久久综合激情| 搡老熟女免费视频| AV色五月天| 日韩一级片在线看| 国产中文字幕曰本毛片| 青青青青青手机视频| www.色五月| 丁香五月天婷婷姐| 夜夜爽夜夜高潮夜夜爽| 久草视频制服诱惑| 脫衣舞一区二区三区| 美女极品一区二区三区| 熟女五十路一区二区三| 天天日夜夜| 天天综合91| 午夜毛片高清免费不卡| 伦理片秋霞免费影院| 欧美日韩精品久久久久久久久东北老熟妇| 九色 人妻 大香蕉| 操比国产| 日本一区不卡| 欧美女同在线| 特级大荫道BBwBBwBBW| 一区操逼日比视频| 欧美999| 大香蕉之青青草原| 97视频网站在线观看| 黄色av网站在线播放| 精产品久久| 神马午夜久久久| 亚州AV无码国产精品| 女优大全 - 91n| 日产中文字幕2020| 97色五月天完| 国产亲戚伦亲在线| 国产精品白领在线观看| 密臀成人视频久久久| 久草成人福利导航| www久| 国产精品久久aV| 四虎AV影视国产精品亚洲精品| 韩国一级做A片免费的| 日韩不卡网操逼中文字幕日韩| 91影视亚洲| 婷婷超| 伦理片秋霞免费影院| 精品国产乱码久久| 99国产精品自在自在| 精品区9| 欧美东京热精品A∨| 成人五级久久| 国产午夜精品理论片一二三区区| 亚洲欧洲综合| 国产精品熟女一区二区三区| 天天天肏屄肏屄肏屄欧美欧美| 亚洲中文电影| 中文字幕少妇色 | 成人热久久精品| 精品夜夜澡人妻无码| 日本精品一区二区中文字幕| 多毛小伙内射老太婆| 亚洲一区二区三区春色| 超碰成人人人爽人人爽| 操屄日韩| 国产综合永久精品日韩鬼片| 黄片视频观看| 男女做爰猛烈动高潮A片免费应用| 97国产精品国| 免费av在线播放二区| 色综合99999| 日韩欧美麻豆大片| 蜜臀av一区二区三区免费观看| 色官网在线| 一区二区娱乐网站| 狠狠干婷婷| 色狠狠色| 极品白嫩福利在线| 欧美91精彩| 少妇内射www在线观看视频 | 亚洲成人性爱网站在线播放| 都市久久精品激情亚洲| 91爆操视频| 性色av网站| 噜噜吧,噜噜色,噜噜| 中文字幕在线日亚州9| 人妻人人操| 国内外色色色色色成人视频| 啊啊啊啊嗯嗯嗯用力好爽 | 美日韩在线不卡人妻| 久久久av爱| 99热色这里只有精品| 67194无码不卡| 国产丰满熟夫69mpp| 国产一区二区在线播放,久久亚洲精品中文字幕第一区,亚洲精品在线中文字幕视频 | 清纯唯美亚洲另类| 亚洲资源站| 亚洲综合电影| 国产自产自拍| 五月天综合网| 大香蕉伊利av| 欧美青青草视频| 公司1区2区3区精产精| 精品免费囯产一区二区三区| 欧美在线播放| 国产黄色av大片网站| 婷婷五月在线视频| 精品一区二区三区四区外站 | 亚洲av综合色区图片亚洲| 午夜黄色免费在线观看| 江都AV在线| 国产天美传媒精品| 骚鸭AV| 97激情97激情| 青娱乐蜜桃臀AV色婷| 亚洲综合另类色图| 黄人人操人人操| 国模艳艳啪啪一区| 男人的天堂2018.| 亚洲资源网| 超碰97综合| 26uuu偷拍亚洲欧洲综合| 最近的最新的中文字幕视频| 99r九九| 大屁股熟女一区二区三区| 亚洲熟女人妻中文字幕一区二区| 亚洲aV性爱| 日本不卡二三区| 日本一线产区和二线产区伦理片| 天天日天天搞天天干| 综合激情五月丁香| 色哟哟精品1精品2| 亚洲国产成人精品999| 精品久久人妻成人网| 国产白嫩精品久久| 麻豆视频一区二区| 亚欧国产无码精品在线| 伊人久久大香线综合无码| 亚洲男人天堂手机版| 日韩色欲久久一二三四区| 无码heyzo高清一区| 少妇熟女视频一区二区三区| 欧美强奸乱能| 精品久久大胆人体| 日本东京热加勒比久久| 欧美日韩国产男人| 国产极品粉嫩馒头一线天av| 97亚洲国产影视| henhen91| 99热亚洲| 中文区中文字幕免费看| 国产亚洲日本精品在线| 亚洲97网站| 99在线无码精品秘 入口黑人| 翘臀vidoes| 96一区二区| www.色操逼| 欧美综合 站| 亚洲国产ⅴ高清在线观看| 青青草吊丝| 午夜性生活av免费在线看| 久久国产视频性吧 | 国产精品爱欲| 精品然女一区二区| 欧美激情性爱视频网站| 国产一区二区三区久久精品太古里| 国产精品视频内谢女人| 国产蜜臀精品一区免费尤物| 国产成人在线观看网址| 图色综合网| 亚洲无码超碰免费| 无码九九九九| 一二三四免费视频| 亚洲福利影院一区久久| 熟妇一区二区三区| 欧美麻豆成人同性GⅤ在线| 少妇久久久免费| 欧美αv.com| 91免费看一区二区三区| 日韩精品 视频一区二区| 欧美影音在线| 丝袜AV一二三区| 日本孕妇一区二区视频操逼免费看 | 丁香婷婷九月| 曰韩无码777| 91九色首页| 亚洲天堂一区| 国产欧美日韩女同性恋ww喷水精品| 亚洲四虎熟女精品| 久热69九色熟妇97| 亚洲永久永久永久永久一级一级一级精品 | 日本狂喷奶水在线播放212| 国产高清精品福利| 五月婷婷色| 婷婷情色综合网| 日韩欧美水蜜桃人妻| 超碰97导航| 春色91| 被窝影院午夜看片无码| A片三级无码| 五月花婷婷| 91久久久视| 自拍第一页| 日韩啪啪视频| 国产精品亚洲高清在线| 六月丁香五月婷婷| 色婷婷久久综合超碰| 日韩AV噜噜噜一区二区三区四区| 国产一国产一级毛片古装| 北约熟女超碰| 亚洲无套久久嗯嗯| 99国产在线绯色一区| 先锋音影AV| 欧色综合| 中文字幕成人理论在线| 亚洲玖玖爱| 60秒免费视频| 精品毛片久久久精品毛片| 一级一性爱免费视频| 激情久久久| 日本不卡五区| 国产农村妇女一区二区| 亚欧无码在线| 国产精品人妻免费精品| 2019天天操天天爽天天拍| 91精品婷婷国产综合久久| 91人妻尻屄视频| 大香蕉www.超碰| 欧美亚洲AN| 亚州欧美综合| 九九成人精品| 中文一区二区| 久久超碰爱| 中文字幕激情小说| 立川理惠被中出无码| 97色视频在线| 园内精品自拍视频在线播放| 中文字幕啊啊啊在线观看视频| 碰人碰碰人人开房人肉| 久久草草亚洲蜜桃臀| 亚洲色图a| 一道本东京热加勒比一区二区三区| 人妻天堂网| 2019AV天堂| 97香蕉碰碰人妻国产欧美| 91日本在线观看| 一区二区三区黄色片a| 色九九九九久| 一线黄色免费性爱片| 97日韩| 久久视频,这里只有精品| 亚洲少妇喷视频看| 乱伦av国产| ai欧美亚洲小说| 日韩乱伦影音先锋| 免费精品人妻一区二区三| 婷婷性网| 欧美一二在线| 97神马久久| 欧美丝袜美女电影一二三四区| 国产精品扒开腿做爽爽爽视频| 五月综合色| 老司机午夜福利视频一区二区| 国内一区二区免费| 国产夫妻性生活视频| 天美传媒av一区二区| 女人天堂AV五区在线| A片 AV一级在线播放观看免费| 日韩三级伊人| 最新亚洲黄色免费电影| 青青草福利视频| 高清无码91| 久久亚洲日韩国产欧| 国产乱不卡| 夜夜精品视频一区二区| 欧美精品一区二区少妇免费A片 | 色女网日韩| 941超碰| 久久九九视频九九视频| 强上我不卡卡| 日日夜夜精品视频| 欧美图片偷拍| aa片毛片| 91激情国产| 五月丁香色色网| 国产老太乱伦一区| 久久人妻97久久久久久久| 天堂8在线新版官网| 久久久久久久久久8888| 北京专精特新企业招聘信息| 麻豆一区在线| 黄色不卡视频| 男女激情黄色网址| 熟女AV一区| 亚洲毛片一级带毛片基地| 少妇色综合| 亚洲国产日韩欧美熟妇在线| 嫩草美女久久| 亚洲中字慕不卡| 99这里只有精品| 3d成人精品一区二区| 97在线视频网站| 精品九九九九九九九九九| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 色欲蜜臀AV| 亭亭丁香激情| 97爱综合| 99国产精品久久久久久久成人热| 国产精品一二三区18| 欧美劲爆视频一区二区| 欧美夜夜骑视频| 成人av性爱电影在线观看| 精品久久久亚洲AV成人网站| 国产性爱欧美性爱在线| 强被迫伦姧在线观看无码网站| 91午夜无码| 蜜臀th| 一个色导综合| 秋霞福利网| 蜜桃久久久久久久| 婷婷五月天小说| 日本在线不卡v二区| 91视频伊人| 亚洲色图 欧美| 噜噜噜亚洲精| 麻豆a'v电影| 啊啊啊97视频| 久久久久久久久久久久黄色| 操屄日韩| 欧美中字不卡| 久久中文字幕一区不卡| 青青操在线亚洲视频观看欧美在线 | 精品国产三级av韩国在线| 韩国一级婬片A片无码天美| 亚洲97在线观看| 欧美自拍偷拍综合图片| 激情图片亚洲色图| 国产成年精品高清在线观看91| av网站在线观看了| 久久大香蕉97| 亚洲欧洲小说图片视频| 天天躁日日躁XXXXYY| 久久性爱精品一区| 超碰亚洲97| 加勒比东京热五月天天堂网| 思思热一热婷婷热一热| 秋霞Av理论一级在线| 噜噜噜在线视频| 丝袜美腿诱惑亚洲欧美视频在线观看| 亚州春色| 亚洲春色欧美激情自拍| 99热免费| 亚洲日韩精品一区二区| 丝袜熟女一区二区三区| 欧美性爱无码一区二区三区| 色欧美亚洲| 亚洲1区2区三区高清中文字幕| 99色在线| 一本色道久久综合狠狠操| 欧美激情另类一区二区| 青女在线| 新久久AV| 中文字幕久久亚州无码| 国产AV天美传媒一区二区三区 | 操逼操逼操| 色综合色综合网| 亚洲 综合 第一页| 日韩亚洲Av人人夜夜澡人人爽| 男人的天堂.com| 久久97精品久久久久久久不卡| 亚洲中文字幕av| 一本久久久精品| 亚洲超碰在线| a'v在线资源| 在线 亚洲 网爆 自拍| 国产亚洲99久久精品熟| 福利操逼| 99在线啪| 午夜男人一级A片7777| 九九九网站| 加勒比AV网| 狠狠入| 国产亚洲色婷婷久久99精品91 - 百度 | 日韩精品资源专区二区| 操逼国产免费| 久久久青青草| 操操操操网黑人| 天天精品| 国产无码高清操逼视频| 亚洲女人毛茸茸91| 啊啊啊啊啊操我视频| 国产精品亚洲天堂网址| 精品91日日夜夜超清资源| 欧美97在线观看| 久久老子无码午夜伦不卡| 亚州一区二区| 色欧美色交综合| 色婷婷婷五月天激情四射| 欧美啪啪女女| 性在久久久久久| 91国模| 舔人妻中文免费视频| 99re69| 亚洲熟妇乱女区二区三区| 超碰人人色| 天天做日日做天天欢。| 国产又黄又粗的视频| 久久精品电影在线| 黄色工厂这里只有精品| 乱操9999| 亚洲 暴爽 AV人人爽日日碰| 99视频内射三四| 精品久久久av无码免费| 国产精品久久久久久久久久久久久久吹 | 国产九九九九九九九九| 色色香蕉| 手机看片1024你懂的国产| 久久日韩精品一区二区| 91黑人狂躁丰满熟妇| 综合久久97| 欧美91精品国产自产| 久九色| 国内亚洲高清无码| 自拍偷拍第26| 国产精品香蕉热久久新品| 乱伦日本色图AⅤ| 久久曰曰| 国产视频一区二区在线观看| 99精品网站| www.色吧5.com| 国产精品一二三免费网站| 久久精品无码一区二区三区| 亚洲美女 晚间男人天堂 | 丁香五月色情| 综合网欧| 久久久久白虎| 国产极品精品美女视频| 91丨九色丨大屁股| 黄色成品网站| 操一对老熟妇爽上天视频| 国产精品熟女一区二区三区| 丰满高潮18xxxx| 久久国产三区| 亚洲色图 91| 操逼日批| 97玖玖人妻| 97伦综合| 人妻在线视频| 蜜臀久久久国产| 啊啊啊无码| 麻豆国产免费影片| 丝袜亚洲91| 欧美熟妇成人一区二区| 色婷婷激情| 老司机福利社视频在线观看| 日本三级A片网站com| 后入 亚洲 美女 射| 热热色AV| 国产精品亚洲免费| 久久久免费视频18| jizz啪啪| 女生看匆91网站| 操逼操网| 大香蕉综合久久| 精品人妻一二三| 激情婷婷五月天| 99热婷婷一区二区三| 成人午夜小视频手机在线看| 国产精品人妻无码久久久互動交流| 人妻激情视频| 久久综合亚洲色1080p| 欧美 综合| 熟妇xxxxx性春色| 男生女生啊啊啊啊| 国产精品网址| 美国三级日本三级久久99| 久久免费精品视频免一| 97精品一区| 天天综合网~69| 天天综合91| 天天躁日日躁AAAXX| 蜜色网色哟哟| 日韩视频精品在线观看| 久久精品国产亚洲妲己影视| 中文伊人大香蕉视频| 凹凸视频在线一区二区| 美女AV一区二区| 久久‘黄片视频| 亚洲深夜福利| 曰本熟女视频| 激情五月天色色| 青娱乐999| 国产精品国产精品国产| 国产精品久久久久久无码红治院| 天天日熟妇| 炮色五月| 25国产精品免费观看| 欧美一区二区福利在线| 麻豆天美电影一区二区| 国产综合网站在线播放 | 香港日本韩国人妇99www.wccm20| 欧美黑人91| 清清草影| 97精| 日本在线一二 | 爱媛媛久久国产福利| 亚洲图片另类| 大逼色网站| 天天天操天天天爱| 日本久久综合| 丝袜内射| 97超级久久强资源| 日本操逼视频在线| 在线只有精品| 国产 日韩 另类 视频一区爱| 人人爱人人乐人人操| 国产精品97视频| 精品二区三四区五电影 | 精品无码一区二区三区| 国产成人精品一区| daxiangjiao你懂的| 99热精品国产| 午夜无码熟妇丰满人妻| 久久成人午夜狠狠| 在线 欧美 亚洲| 蜜臀AV一区二区三区| 91性片| 天久久久噜噜噜久久国产精品爽爽| 另类av天堂| 一区二区三区色综合| 亚洲欧洲无码一区夜| 国产丁香精品露脸视频| 99999久久精| 亚洲天堂精品日韩电影| 久操操AV电影| hd成人一区二区在线| 久久久中文| 欧亚第一综合网| 九九九九日本| 91网站18+| 在线a亚洲视频播放在线| 伦在线97| 少妇二级| 久久9精品视频| 超碰在线国产| 一区二区三区男女操逼黄色小电影| 97爱亚洲综合色| 久久后入制服| 亚洲国产精品V?在线播放| 日韩不卡在线一区二区| 国内黄色精品| 亚洲少妇自拍中文字幕懂色| av影片在线观看不卡| 无码视频黄色网战| 久久av网| 97在线观看| 日本免费中文一区二区三区四区 | 九热大香蕉| 翔田千里AV无码秘 三区| 97任你吞精| 麻豆a'v电影| 欧美精品日韩久久久九| 青青草视频久久久久| 蜜臀久久99精品久久久久久无删减 | 99色婷婷中文字幕乱色| 欧美国产精品久久九九| 亚洲图片欧美91N| 91高清欧美| 超碰碰碰碰| 9美女超碰在线免费观看| 99精品久久久久久久婷婷| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区 | 抽插爽| 性夜影院爽黄A爽免费动漫| 久久久久久久一级黄色打同平台| 蜜桃传媒视频第一区入口在线看| 色色色色网站| 欧美亚洲系列| 久久欧美1卡2卡3| 人妻精品免费一二三区| 色五月天AV| 无码高清专| 91精品国产91久久久久久久久久久久| 96AV精品| 懂色av中文字幕一区二区三区天美| 青娱乐欧美激情一区二区| 日韩色女精品| 极品色社| 日韩成人大片在线观看| 九九精品99| www老逼91| 亚洲激情综合另类男同| 职场同事知名国产国产精品久久欧美日韩| 91成人久久| 欧美性xxxxx狂欢| 国产丸一视频| 国产第12页| 欲色综合| 精品二区三四区五电影 | 国产精品熟女乱伦| 丰满搜索结果 -第18页- 久久高清无码 | 国精综合一二三区影视| 日韩国产欧美伦理在线| 97超碰欧美精品| a片亚洲一本通视频| 亚州少妇| 操一区| 国产 无码 一区二区| 操操逼视频| 欧美AB在线| 加勒比综合在线| 国产成人天堂| 亚洲 欧美 另类 日韩 人妻一区| 五月丁香啪| 亚洲人妻av| 福利视频一区二区微拍| 香伊人在线| 啊啊啊啊好爽好舒服一区二区易域| 精品人妻一二三四区视频| 91欧美偷拍| 九月丁香婷婷| 强奸少妇AV导航网| 男人的天堂,欧美亚洲另类国产日韩,日本高清一区二区 | 欧美日日操| 乱操乱伦AV| 国语对白露脸XXXXXX| 亚洲资源一区| 97中文字幕一区| 亚洲综合色在线| 96免费视频在线| 青娱乐蜜桃臀AV色婷| 激情四射婷婷四五月天| 久久色人体| 一区在线观看中文字幕| 手机看av网站在线看| 中文字幕成人理论在线| 国产乱伦性爱AV| 99热综合| 91麻豆天美传媒HD| 欲女人妻性色av| 超碰99re| 国产女人和拘做爰视频| 激情五月天丁香社区| 日本有码影片下载| 色婷五月| 色色色综合| 大香蕉国产中文自拍| 91伊人久久在线| 蜜臀久久99精品久久久久久-DVD| 国产精品区在线12p| 成人精品在线| 男人天堂 天天射| 婷婷综合伊人一区| 操我无码| 色www精品视频在线观看| 天美91| 操美女高潮抽搐白浆| 蜜臀久久99精品| 少妇久久久久久| 色色色色电影网| 98福利在线视频| 国产精品久久久久久久久AV大片| 91四海无码日韩欧美| 人妻丝袜二区| 91无码人妻精品一区二区三区蜜桃| 国产精品白丝| 亚洲五月丁香花狠狠干一区二区三区| 你草精品在线视频| 老熟女91| 日本不卡卡一区| 亚洲欧美首页| 台欧久久精品视频| 极品另类| 丰满少妇人妻久久久久久| 国产熟女无套内射| 狠狠狠狠狠狠| 国产极品馒头逼| 亚洲国产一区二区三区在线| site:sinbotex.com| 女色视频社区| 国产精品亚洲色婷婷久久久| 人妻天天爽夜夜爽爽| 午夜国产成人精品视频| 欧亚不卡| 粉嫩不卡一区二区性爱| 色拍偷亚洲| 操91| 精品国产一区探花在线观看| 国产大片精久久久久久| 91香蕉视频在线观看免费| 97bbn| 亚洲欧美精品91| 自怕偷自怕亚洲精品| 久久久久久久久国产| 99色色网| 日本天天操| 亚洲欧美情色| 国产一区二区久久| 久久超碰久| 超碰人妻天天干| 久久久人体| 一区操逼日比视频| 日韩欧美传媒一区国产| 丁香六月激情| 亚洲丝袜少妇在线| 美女写真| 国产久久av| 人人澡综合涩| 秋霞网无码| 97操B| 欧美日韩性爱精品| 亚洲色婷婷综合久久久久中文| 欧美性爱97超碰 | 东京热AV男人的天堂| 亚码激情| 激情丁香五月婷婷| 精品78| SS久久| 精品成人av一区二区三区在线| 少妇九九九九| 中文字幕一区二区三区蜜桃视频| 肉丝网站91| 黑人精品成人一区二区三区 | 玖玖爱在线视频免费观看| 1024精品在线| 日本少妇va7777| 国产亚洲 中文欧美久久| 国产树林里野战在线看| 中文字幕亚洲永久精品| 国产精品一级毛片不卡视| 国产亚洲色停停久久99精品91| 久久人妻少妇| 六月丁香网| 亚洲男人天堂视频| 亚欧无码在线| 国产精品69人妻无码久久久| 丁香婷婷五月| 欲射影视| 激情五月天校园春色网| 欧美A√综合网| 久插综合| 狠狠操狠狠燥| AV女优男人的天堂| 91欧洲国产成人久久精品网站| 亚洲美女av无码| 午夜操逼不卡| Blackedraw视频一区二区| 夜夜夜爽www精品视频| 嗯嗯啊啊啊好爽| www.男人天堂| 欧美美逼| 乱性AV| 中文字幕日韩专区精品系列| 欧美一级特黄淫片在线观看| 欧美亚洲激情| 自拍视频一区在线观看| 男女日B国产| 亚洲高清自拍| 亚洲欧美高清| 一区二区三区精品视频| 青青草在线视频人人想人人上| 亚洲春色激情小说| 国产2.3.4区| 亚洲人妻中文在线视频| 日韩性爱播放| 国产毛片精品一区二区色欲黄A片| www.91逼逼.com| 午夜男人av| 色91综合网| 亚洲图片另类| av在线不卡一区二区三区| 国产大学生口爆吞精合集| 国产成年女人免费视频播放a| 九九热超碰| 96精品一区| 日韩啪啪视频| 成人婷婷丁香| 久久久999| 97蜜桃综合| 亚洲97成人在线观看| 按摩中文字幕| 先锋激情∨在线视频播放| 亚洲欧美中日韩| 两女互慰AV高潮喷水在线观看| 91人妻视频在线| 国产JDAV无码视频在线观看| 色爱综合网欧美| 成人精品一区二区91毛片不卡| 九九九九九九九九九五码| 亚洲天堂2020| 欧美很很操视频| 97国产精品一区| 18精品一区| 国产精品视屏| 五月丁香六月婷综合成人综合| 欧美高清91| 天天色悠悠激情| 17c嫩草51久久91嫩草| 极品粉嫩少妇视频| 97天天综合| 亚州色阁| 日本成人电影资源网| 九九九九九用不成了| 日韩三A大片在线观看| 后入式999| 久久精彩视频9| 色999五月色| www亚洲免费| 日韩超碰精品综合| 人妻少妇久久久| 精品人妻一区二区三区日产乱码| 欧美精品系列| 好一吊区二区| 丁香六月激情| 欧美性高潮在线| 三级片大波波| 久久99精品九九久久久婷婷| 色综合一区二区三巨| 综合影院永久入口国产| 亲子敌伦对白在线播放 | 亚洲情色五月天| 黄色电影在线播放综合网站| 麻豆国产精品午夜视频| 老熟女乱伦一区| 操www| 免费在线黄片视频| 日韩熟女操逼| 强奸国产精品视频| 国产精品午夜AV完会免费| 大香蕉一人| 99热大香蕉伊在线| 夜夜狠狠躁日日躁色视频| 大香蕉免费中文| 成人性爱全视频观看| 天天插天天操| 亚洲综合春色| 麻豆精品A片免费观看| 久日综合网| 欧亚三区动漫| 亚洲自拍偷拍视频在线| 中国国产精品一区视频| 翔田千里av一区二区三区| 国产一区二区欧美日本| 精品久久久亚洲AV成人网站| 8050无码八戒| 97人妻色| 久久发布国产伦子伦精品| 欧美午夜精品久久久久久超碰| GVH-003 母子姦 青木玲-麻豆视频,麻豆视传媒短视频网站入口,麻豆视传媒官网直 | 亚洲巨爆乳一区二区三区四季网| 丰满人妻一区二区三区性色| 中文字幕 国产区| 偷窥自拍A片| 蜜色网色哟哟| 91精品久久久久久77777| 干B网| 亚洲国产综合图区中文字幕| 欧美性性性| 日韩有码 一区二区三区| 人看人人摸人人操| 十八禁啪啦拍视频无遮挡| 91在线欧色| 欧美性爱一内片一区二区三区| 中文字日本乱码| 蜜桃午夜视频一区二区| 日韩一级二级三级| 亚洲av综合色区图片亚洲| 99啪啪| 色女网日韩| 亚欧美色图| 操逼日批| 午夜免费视频1000| 9热9热综合网| 大粗鳼巴久久久久| 一区二区影院| 九九热视频在线观看| av72网| 香港澳门日本三级网站| 色噜噜狠狠色综合日日| 日本亚洲vr欧美不卡高清专区| 97干色天堂| 三四中文字幕| 性爱av网站| 蜜色网色哟哟| 欧美激情精品| 国内毛片无遮挡国产| 大香蕉碰碰| 日韩精品 欧美激情| 午夜福利视频在线一区| 中文字幕日韩综合| 最新中文字幕av| 免费精品无码一级毛片牛牛影视| 婷婷色五月激情| 99操| 免费αV在线视频| 日本不卡卡一区| 久久久精品久久| 色噜噜狠狠色综无码久久合欧美| 综合色色婷婷| 国产精品另类一区大香蕉| 伊人黄色视频免费观看| 日本九九久久99播| 91搡老女人老妇女老熟女歌词翻译| 九九久久综合| 97久久超碰日韩精品| 欧美黄片视频在线观看免费| 啊啊啊在线看| 爱媛媛久久国产福利| 精品国产乱码久久久久久日本公司| 天堂无码| 亚洲国产精品久久久久婷婷青年| 五月丁香激情四射| 亚洲精品一区二区三区新线路| 欧美综合另类| 有码免费观看| 在线无码视频| 91国产精品熟女| 国产一级舔足在线观看| 四季AV综合网址| wwwxxx日本爽| 伊人综合色网| 国产欧美在线观看免费观看| 欧美性色综合网| 久久91视频| 久久综合精品一区二区三区| 亚洲性高潮| 国产超碰国产97| 91精品网站| 欧美少妇一区二区三区| 亚洲久久久| 国产精品国产拍高清AV| 久久 精品| 欧美美女在线高潮999| 91亚洲网| 欧美成人精品A片免费一区99| 亚洲视频精选| 久久綜合很很很| 家庭乱伦网站国产| 骚逼一区二区| 在线观看精品国产免费| 美欧色综合| 人人超碰在线观看黄| 成人性爱高清视频免费看| 色综合91好| 午夜免费视频1000| 欧美自拍偷拍综合图片| 激情视频图片| 操九九九九九九| 在线视频97| 丝袜亚洲91| 天天爽爽爽爽| 中文字幕91页| 青娱乐91| 91美女视屏| 日韩欧美大片免费高清啪啪| 精品久久久久黄少妇| 日韩有码 一区二区三区| 97伦乱| 欧美日综合| 国产亚洲日韩欧| 亚洲综合性网址| 五月丁香六月激情| 国产一级特黄大片处女| 天天日天天屌天天操| 欧美另类综合久久| 97在线观看免费视频| 大香蕉92| 亚洲精品天天影视综合网 | 粉嫩av一区二区三区四季| 九月丁香综合网| 男人天堂毛片| 1000午夜黄色| 岛园激情| 最新岛国大片| 亚洲人成在线放东京热| 亚洲第一页综合在线| 欧美情色贴图| 青青青操| 色综合天天| 欧美人体性爱互联网第一页婷婷日本| 色哟哟-国产专区| www.大香| 青青草一区二区高清无码视频| 天天看特黄的免费网站 | 超碰97丝袜| 色哟哟精品1精品2| 啊啊啊啊啊好大好舒服想要| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 超碰这里有精品| 极品少妇99| 日本人体九九九九九九| 婷婷在线视频在线观看| 天欧美在线| 日本不卡码黄色| 东京日日夜夜| 人人操人人摸人人看人人插| 777超碰| 老司机香蕉| 精品十八在线观看| 亚洲精品欧美专业| 玖玖97综合| 色狠狠 - 百度| 91亚洲色人| 97超碰9| 五月开心久久AV官网| 第45页一区二区| 日日日啊啊啊| 色哟哟-国产专区| 色婷婷丁香| 欧美国产日韩高清在线| 女人被添高潮免费视频| 亚洲美女AV无码| 日韩综合第八区国产精品| 日韩一999精品| 夜夜高潮夜夜爽| 桃色六月天| 色婷婷丁香五月| 国产精品免费日韩| 精品人妻av在线播放| 国产h片在线观看视频| a'v在线资源| 天堂v无码免费视频| 国产成人拍国产亚洲精品| 成人av在线播放| 老女人综合网| 欧美综合综合| 一本久道久久综合狠狠爱一密臀精| 亚洲日本天堂| 超碰97.com|