<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          SpringBoot集成Milton(webdav)應(yīng)用實例(二)

          共 7310字,需瀏覽 15分鐘

           ·

          2023-05-13 20:16


          原來愛沒有

          遺棄我

          你的愛會將我灌醉

          我沒有所謂

          太過清醒怎么陶醉

          你的愛

          像是杯太濃的咖啡

          讓我失眠徹夜

          好愛這種感覺





          這里接著前面的繼續(xù),上次有了一個簡單的demo,這里對上次的代碼進行一些說明,SpringMiltonFilter類中,有個MiltonProperties配置類,該配置類,主要用于配置一些webdav服務(wù)用到的一些參數(shù)設(shè)置,目前主要用到了2個,一個是用于判斷哪些請求用來識別為使用milton來處理的webdav請求,一個是配置milton的Resource控制器掃描包路徑。這里利用的是SpringBoot的元數(shù)據(jù)配置,即在META-INF/spring-configuration-metadata.json中定義配置信息,然后在yaml文件中指定值,


          e5681e0757aad91847986e124b8e9183.webp

          之后,在yaml文件中,就可以指定配置屬性的值了:


          0a29c5ba53ce791f677ddf69bcafc157.webp

          同時配置類MiltonProperties

          需要添加Configuration和ConfigurationProperties注解

          ConfigurationProperties注解需要設(shè)定prefix的值,如上面截圖,prefix的值為milton.deal,此時spring會根據(jù)配置,獲取MiltonProperties類中的setXXX方法,給相應(yīng)的屬性賦值:


                
                  package?com.lgli.webdav.config;
                
                
                  import org.springframework.boot.context.properties.ConfigurationProperties;
                
                
                  import?org.springframework.context.annotation.Configuration;
                
                
                  import java.util.List;
                
                
                  
                    
          /** ?*?milton配置類 * * @author lgli ?*/ @Configuration @ConfigurationProperties(prefix = "milton.deal") public class MiltonProperties {
          private List<String> httpUrl;
          private String controller;
          public List<String> getHttpUrl() { return httpUrl; }
          public void setHttpUrl(List<String> httpUrl) { this.httpUrl = httpUrl; }
          public String getController() { return controller; }
          public void setController(String controller) { this.controller = controller; ????} }

          即這里spring或通過調(diào)用setController 方法將配置文件中的

          milton.deal.controller的值賦予給controller屬性,類似的會給httpUrl集合賦值。

          之后,就可以獲取MiltonProperties中的屬性值了。


          此外,上次demo中的SpringMiltonFilter攔截器中的Bean依賴注入,在高版本的SpringBoot中會產(chǎn)生循環(huán)依賴,這個需要處理下,demo就無所謂了,了解關(guān)聯(lián)關(guān)系了,每個人都可以重新整理下了。


          這里再次圖解下,milton的過程:


          c8acff8ff09780e97051854cd441a332.webp

          HttpManagerBuilder通過ResourceFactory生成一個HttpManager用于處理來自客戶端的webdav請求。


          下面接著分析具體的處理類Controller,即上次提到的

          ResourceManageController類



          01

          Milton區(qū)分文件或者文件夾


          首先webdav要先根據(jù)注解@Root,識別到根文件夾方法,根文件夾,肯定是一個文件夾,這個毋庸置疑,但是這個文件夾中,可能會有文件,也可能有文件夾,那么Milton是如何來識別并告知客戶端,哪個是文件,哪個又是文件夾呢?


          通常來說,Milton會根據(jù)@ChildrenOf注解標準的方法,來判斷是不是有子文件,也就是說,某個實體,在后端能通過@ChildrenOf找到子集,那么這個實體就是文件夾,否則就是一個文件。


          所以來看下@Root方法和@ChildrenOf方法:


          7444680b983276493471fd6d8f693646.webp



          @Root注解方法返回了一個實體,這個實體在本例中表示一個文件夾,上面已經(jīng)說到,根文件夾一定是個文件夾,然后看到@ChildrenOf注解方法,需要傳入一個FolderEntity實體,也就是說,父實體如果是FolderEntity類型的,則是一個文件夾,它擁有子集,否則的話,則是一個文件??梢钥吹剑珸Root注解方法返回的是一個FolderEntity實體,它是一個文件夾,就自然有子集,也就因此會調(diào)用@ChildrenOf注解方法,這時候,這個實體是沒有ID的<因為@Root注解方法沒有設(shè)定ID>,方法走第一個if,返回了一個list,這個list中有3個類,其中2個是FolderEntity類型的,另外一個是FileEntity類型的,由于FileEntity類型的在服務(wù)端是找不到有@ChildrenOf標準的獲取子集的方法,所以FileEntity類型的就會是一個文件,而FolderEntity類型的是個文件夾。這里的FolderEntity和FileEntity是自己定義的,大家可以隨意根據(jù)自己的需要來定義。這樣一來,milton就告訴了客戶端,什么是文件,什么是文件夾了!



          02


          權(quán)限認證


          上次的服務(wù),沒有使用權(quán)限認證,導(dǎo)致所有人都可以訪問,那么對于真實項目而言,首先要做的就是權(quán)限用戶認證,即每個登錄人需要可以看到自己的文件夾數(shù)據(jù),這里也是模擬一個實際的項目的一個需求。


          那么首先,回憶下上次的demo,在構(gòu)建ResourceFactory的時候,傳入了一個

          io.milton.http.fs.NullSecurityManager


          3f8526f5966136d76b22c6c2ed3837dd.webp



          這里看下這個Milton默認實現(xiàn)的安全管理器,

          實現(xiàn)了Milton的

          io.milton.http.SecurityManager

          接口,同時實現(xiàn)它的5個方法,這5個方法,分別表示什么意思?這里簡單做個說明


          方法一:

          io.milton.http.fs.NullSecurityManager#authenticate(io.milton.http.http11.auth.DigestResponse)


          方法表示:對一個digest的請求做認證,這里不詳述什么是digest請求,有需要的可以去看看HTTP AUTH和HTTP DIGEST AUTH的區(qū)別,相較于http auth而言,http digest auth在安全方面相對而言更好一些。


          方法二:

          io.milton.http.fs.NullSecurityManager#authenticate(java.lang.String, java.lang.String)


          方法表示:通過獲取客戶端傳入的用戶名和密碼,做權(quán)限校驗


          方法三:

          io.milton.http.fs.NullSecurityManager#authorise(io.milton.http.Request,io.milton.http.Request.Method,io.milton.http.Auth,io.milton.resource.Resource)


          方法表示:校驗方法二返回的authenticater user是否能夠進入給定請求方法返回的資源


          方法四:

          io.milton.http.fs.NullSecurityManager#getRealm(java.lang.String)


          方法表示:返回給定客戶端主機被安全管理器管理的領(lǐng)域的名稱,這里我的理解就是,返回一個給定的領(lǐng)域名稱,方便客戶端在有領(lǐng)域區(qū)分的時候,做權(quán)限識別


          方法五:

          io.milton.http.fs.NullSecurityManager#isDigestAllowed


          方法表示:是否允許digest請求,通常是返回true,除非不想用http digest?auth做服務(wù)端權(quán)限認證


          這里我們先要明確Milton在處理權(quán)限的時候的一個大體邏輯,Milton其底層邏輯對權(quán)限處理的時候,是資源校驗權(quán)限,即首先獲取資源,然后判斷當(dāng)前用戶是否擁有這個資源的權(quán)限。即,Milton的權(quán)限在獲取資源之后。



          這個是系統(tǒng)默認實現(xiàn)的一個空的安全管理器,如果我們需要有一個自己的安全管理器,也可以自定義一個類,實現(xiàn)

          io.milton.http.SecurityManager 接口
          這里先使用一個系統(tǒng)默認實現(xiàn)的另一個安全管理器來看下效果:

          這里在創(chuàng)建ResourceFactory的時候,new一個
          io.milton.http.fs.SimpleSecurityManager

          01b588c659af23eb0fc349d58cbe1daa.webp



          這里的意思是,只有user用戶才可以擁有訪問的資源的權(quán)限,同時指定的了密碼是password。

          0b3403125725d9a3750c8e7c45e4bb18.webp



          這里簡單實現(xiàn)了需要通過登錄認證,從而達到用戶管理的效果了。



          但是一般來說,我們可能需要有自定義的一個用戶認證,同時,需要先用戶登錄,然后通過用戶,獲取用戶應(yīng)該有的資源,這種方式又怎么實現(xiàn)呢?


          下期繼續(xù)?。?!



          如果你也感興趣,麻煩多多支持。謝謝!


          如有錯誤,煩請指正。


          點擊公眾號獲取更多





          瀏覽 470
          點贊
          1評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          全部評論
          QS682464ea1fdca1a372023-08-26 23:55
          為什么我這邊@Childrenof最終返回length:null呢?訪問回執(zhí)404
          點贊回復(fù)
          推薦
          點贊
          1評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  黄色成人视频网站免费看 | 日韩中文字幕在线免费观看视频 | 九九免费视频 | 无码一级毛片免费视频播放 | 一级特黄录像免费看 |