為什么要設計匿名用戶

      網友投稿 779 2022-05-30

      匿名用戶是很多同學不理解的一個概念,這一章胖哥嘗試來解讀一下匿名用戶,希望能幫你更好的理解這個概念。、再看、轉發走一波。

      流程一致性

      通常情況下所有的資源訪問都應該是有條件的。用來驗證這些條件的流程也應該是一致的。我們來看實際生活中的一個例子,老王是一家公司的老板,他的車進地下車庫是免費的,其他人進地下車庫是計費的。我們來思考如何實現這個需求。

      如果流程不一致的話,需要兩條道,一條是VIP通道(讓老王走),一條是大眾通道(給其他人用),這兩個通道的維護成本會很高,還有人會經常走錯道,甚至招致不滿,憑啥他要搞特權;如果流程一致,這事就好辦多了,不管是誰都得按同一個通道流程進入停車場,只需要維護一個VIP標簽就行了,成本大大降低,流程也簡化了,還顯得老王沒有架子。這個VIP標簽就是所謂的“匿名用戶”。

      Spring Security匿名用戶

      Spring Security中專門設計了匿名用戶,它的作用其實也是為了在保證流程一致的前提下去執行一些特殊的認證邏輯,比如程序的登錄、主頁的數據接口,這些未認證的用戶場景需要繞過訪問控制檢查,通過引入一個特殊的“匿名身份”可以做到這一點,匿名用戶可以做什么、不可以做什么都可以輕松定義, 這就是我們所說的匿名身份驗證。

      請注意:“經過匿名身份驗證”的用戶和未經身份驗證的用戶之間沒有真正的差異,你可以認為匿名用戶就是未認證用戶,你也可以認為匿名用戶是執行了匿名認證流程后的認證用戶。

      匿名用戶的配置

      匿名用戶是認證體系最后的一道認證流程,負責匿名認證的過濾器是AnonymousAuthenticationFilter,當發現請求不具備任何其它認證條件后,會生成一個AnonymousAuthenticationToken,它包含三個屬性:

      keyHash 僅僅在AnonymousAuthenticationFilter和AnonymousAuthenticationProvider之間共享, 以避免一些惡意客戶端去偽造AnonymousAuthenticationToken。

      權限控制只需要針對ROLE_ANONYMOUS進行限制即可,也可以通過認證投票器AuthenticatedVoter的IS_AUTHENTICATED_ANONYMOUSLY屬性來限制。

      下面這幾種配置都可以用來控制匿名用戶的訪問權限:

      http

      .authorizeRequests()

      .mvcMatchers("/anonymous0").access("hasAuthority('ROLE_USER')")

      .mvcMatchers("/anonymous1").hasAuthority("ROLE_ANONYMOUS")

      .mvcMatchers("/anonymous2").hasRole("ANONYMOUS")

      .mvcMatchers("/anonymous3").access("isAnonymous()")

      .mvcMatchers("/anonymous4").access("IS_AUTHENTICATED_ANONYMOUSLY")

      .mvcMatchers("/anonymous5").anonymous()

      獲取匿名用戶

      Spring MVC中使用它自己的參數解析器來獲取當前Principal:

      @GetMapping("/")

      public?String?method(Authentication?authentication)?{

      if?(authentication?instanceof?AnonymousAuthenticationToken)?{

      return?"anonymous";

      }?else?{

      return?"not?anonymous";

      }

      }

      以上方式將永遠返回not anonymous,即使是匿名請求。如果您想獲取匿名請求的Authentication,請改用@CurrentSecurityContext:

      @GetMapping("/")

      public?String?method(@CurrentSecurityContext?SecurityContext?context)?{

      Authentication?authentication?=?context.getAuthentication()

      if?(authentication?instanceof?AnonymousAuthenticationToken)?{

      return?"anonymous";

      為什么要設計匿名用戶

      }?else?{

      return?"not?anonymous";

      }

      }

      你想一想還有沒有其它方式去獲得匿名用戶?

      Java的前沿分享(1):value或許成為java的新關鍵字

      2022-01-18

      歡迎加入胖哥技術內卷群

      2022-01-14

      Spring

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:TypeScript開發環境入門
      下一篇:又一年,畢業季,堅持學習甜蜜蜜~
      相關文章
      亚洲精品在线免费观看视频| 亚洲AV无码专区国产乱码4SE| 亚洲国产精品久久久久| 77777亚洲午夜久久多人| 亚洲精华国产精华精华液好用| 亚洲精品一区二区三区四区乱码 | 亚洲精品乱码久久久久久按摩 | 亚洲日韩精品无码AV海量| 国产精品亚洲专区在线观看 | 亚洲人成亚洲人成在线观看| 亚洲色精品aⅴ一区区三区| 国产亚洲?V无码?V男人的天堂| 久久亚洲av无码精品浪潮| 中文亚洲成a人片在线观看| 国产gv天堂亚洲国产gv刚刚碰| 亚洲中文字幕无码一区二区三区| 亚洲午夜久久久久久久久久| 亚洲成AV人片在WWW色猫咪| 亚洲第一福利视频| 自怕偷自怕亚洲精品| 亚洲国产精品免费在线观看| 99久久国产亚洲综合精品| 亚洲国产高清国产拍精品| 小说专区亚洲春色校园| 亚洲va中文字幕无码| 国产亚洲人成A在线V网站| 亚洲三区在线观看无套内射| 亚洲VA中文字幕不卡无码| 久久亚洲精精品中文字幕| 亚洲六月丁香六月婷婷色伊人| 国产 亚洲 中文在线 字幕| 麻豆亚洲AV成人无码久久精品 | 亚洲人成网国产最新在线| 亚洲第一成年网站视频| 另类小说亚洲色图| 在线亚洲午夜理论AV大片| 久久亚洲精品成人| 91嫩草亚洲精品| 亚洲精品理论电影在线观看| 伊人久久亚洲综合影院| 亚洲综合国产一区二区三区|