不可不說
          隨心所欲,無往不利!
          posts - 88,  comments - 92,  trackbacks - 0
          Spring Security 2.0 簡稱SS2(和國內(nèi)很出名的SpringSide的簡寫一樣啊)
          也就是以前的ACEGI,功能很好,很強大,但是我覺得也不能在項目中爛用,
          并且,要靈活采取一些措施來有效減少性能損失。
          通過從它的工作原理來分析,使用了SS2(acegi),那么你的每個鏈接都將處于
          它的監(jiān)控之下,對于每一個訪問的請求,它都要鍥而不舍的去檢查一下,是不是
          符合我們的要求,一般來說,首先要看看你是不是系統(tǒng)的用戶,嗯嗯,轉(zhuǎn)一圈,
          然后看看你有沒有權(quán)限,最簡單的又是一圈下來,時間就這樣被占用了去,如果
          你有多個投票者,那么都要多轉(zhuǎn)幾圈。當然單單對單用戶或少量的用戶的系統(tǒng)來說
          沒有問題,如過用戶多了,你在用上一些花樣比如AJAX,甚至對一些資源比如js/img/css等
          也進行權(quán)限控制的話,那么所有的這些東西,如果不去緩存,統(tǒng)統(tǒng)需要訪問Server得到,
          呵呵,一個頁面可能要進行好多次的驗證才能過啊,對用戶的一個點擊來說,可能只是
          不到一秒的時間,可是如果并行的用戶多,服務(wù)器。。。有點玄。

          所以:
          1:盡量減少權(quán)限認證的內(nèi)容,比如能用一個投票者的就盡量不用多個。
          2:對一些不涉及敏感數(shù)據(jù)的資源,不要去驗證,比如js/css/img等。
          3:盡量減少一個頁面中的資源請求,比如頁面中使用盡量少的引用(js/css/img/jsp/html等)
          4:盡量不要把資源(URL)定義的過細,通過對URL權(quán)限檢查代碼的分析,給定一個URL,
               它是去循環(huán)整個URL-Role列表去比對的,如果你定義的URL-ROLE越多,呵呵,時間上也越多。
               比較好的方法就是,能用目錄角色來限定的,就決不再定義目錄下的資源得角色,
               盡量減少URL-ROLE列表的數(shù)量,提高命中率。
          5:雖然SS2也提供了方法級的控制,個人認為,能用系統(tǒng)結(jié)構(gòu)上的差分解決的就決不要進行方法級的控制,
             否則,性能會降得更多。
          當然:
              如果你要做的系統(tǒng)硬件足夠強大,以至于不再考慮性能問題,而專注于權(quán)限問題,上面的幾點大可不必太在意。
          最后又想到了一點,如果你的系統(tǒng)很大,我的意思是有N多的模塊和頁面,那么,你就要有足夠的心理準備去做URL-ROLE-USER的配置工作了,如果用戶結(jié)構(gòu)也比較復(fù)雜,數(shù)量也比較多,還要加上Group等,在這里我就要祝你好運了。

          補充:
          6:
          有網(wǎng)友說可以減少上面第2/3所說的URL,在網(wǎng)上查了一下,可以在web.xml中配置過濾器時把一些不必要的URL給過濾掉從而提高性能,
          仍以Struts2為例如下:
          原來的配置   
              <filter-mapping>
                  
          <filter-name>springSecurityFilterChain</filter-name>
                  
          <url-pattern>/*</url-pattern>
              </filter-mapping>

          修改后:
              <filter-mapping>
                  
          <filter-name>springSecurityFilterChain</filter-name>
                  
          <url-pattern>*.action</url-pattern>
              </filter-mapping>
              <filter-mapping>
                  <filter-name>springSecurityFilterChain</filter-name>
                  <url-pattern>*.jsp</url-pattern>
              </filter-mapping>
              <filter-mapping>
                  <filter-name>springSecurityFilterChain</filter-name>
                  <url-pattern>*.do</url-pattern>
              </filter-mapping>

          當然,這樣一來,必須要保證所有需要進行權(quán)限驗證的URL都能在這里列出來,否則,就有后門啊,要小心


          posted on 2008-08-28 15:27 藍劍 閱讀(4034) 評論(5)  編輯  收藏

          FeedBack:
          # re: 關(guān)于Spring Security 在項目中應(yīng)用的幾點建議
          2008-08-28 15:50 | xcliu
          您真的用過么?聽過:
          1)聽說可以對資源/ajax/js/images等定義空的FilterChain, 避免
          2)聽說在FilterChain中可以通過session簡化驗證。

          我感覺,只要有權(quán)限控制的系統(tǒng),那么就要定義規(guī)則,只不過這類規(guī)則是通過何種方式定義的(可以是聲明式的,可以是程序硬編碼),因此也只是我們是否接受acegi的風(fēng)格而已。
            回復(fù)  更多評論
            
          # re: 關(guān)于Spring Security 在項目中應(yīng)用的幾點建議
          2008-08-28 16:57 | 藍劍
          @xcliu
          不管怎么去定義,SS2總是會去截留這些請求,然后去分析它,是什么東西,
          即使不去驗證它的權(quán)限,使用你說的空的FilterChain,也是需要去判斷的,而且所有的URL都須去進行檢查,也是需要時間的,也就是說,你在這里避免了,肯定在其他方面要付出的。  回復(fù)  更多評論
            
          # re: 關(guān)于Spring Security 在項目中應(yīng)用的幾點建議[未登錄]
          2008-08-29 12:59 | Hibernating
          想image,js,css這些資源直接定義為#NONE#就可以啊。
          最近正在看Spring Security,我覺得系統(tǒng)提供的處理方式是靈活多樣的,只要根據(jù)自己的需求去選擇和定義保護資源,我覺得挺好的。  回復(fù)  更多評論
            
          # re: 關(guān)于Spring Security 在項目中應(yīng)用的幾點建議
          2008-08-29 20:49 | 藍劍
          樓上的,我跟蹤過代碼,即使定義成#NONE#好像也要做不少的處理才結(jié)束,時間的浪費是不可避免的。

          不過,話說回來了,只要用權(quán)限管理,不管什么方式,性能上的代價是不可避免的
          只是多或者少罷了。  回復(fù)  更多評論
            
          # re: 關(guān)于Spring Security 在項目中應(yīng)用的幾點建議
          2008-09-12 10:49 | nk
          不錯,支持你!  回復(fù)  更多評論
            

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           


          <2008年8月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          常用鏈接

          留言簿(6)

          隨筆分類(62)

          隨筆檔案(90)

          文章檔案(9)

          相冊

          友情鏈接

          搜索

          •  

          積分與排名

          • 積分 - 325299
          • 排名 - 172

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 普兰店市| 拜泉县| 安吉县| 龙岩市| 霍州市| 铁岭县| 扎兰屯市| 和顺县| 霍林郭勒市| 祁门县| 石台县| 贺兰县| 乌鲁木齐县| 共和县| 光山县| 太仆寺旗| 禄丰县| 安乡县| 同德县| 井冈山市| 久治县| 峡江县| 东方市| 皮山县| 西城区| 临海市| 南康市| 东阿县| 东方市| 大邑县| 南溪县| 兴仁县| 宜宾市| 临桂县| 洛宁县| 三门县| 沿河| 兴文县| 台州市| 新疆| 顺平县|