Spring Security 2.0 簡稱SS2(和國內很出名的SpringSide的簡寫一樣啊)
也就是以前的ACEGI,功能很好,很強大,但是我覺得也不能在項目中爛用,
并且,要靈活采取一些措施來有效減少性能損失。
通過從它的工作原理來分析,使用了SS2(acegi),那么你的每個鏈接都將處于
它的監控之下,對于每一個訪問的請求,它都要鍥而不舍的去檢查一下,是不是
符合我們的要求,一般來說,首先要看看你是不是系統的用戶,嗯嗯,轉一圈,
然后看看你有沒有權限,最簡單的又是一圈下來,時間就這樣被占用了去,如果
你有多個投票者,那么都要多轉幾圈。當然單單對單用戶或少量的用戶的系統來說
沒有問題,如過用戶多了,你在用上一些花樣比如AJAX,甚至對一些資源比如js/img/css等
也進行權限控制的話,那么所有的這些東西,如果不去緩存,統統需要訪問Server得到,
呵呵,一個頁面可能要進行好多次的驗證才能過啊,對用戶的一個點擊來說,可能只是
不到一秒的時間,可是如果并行的用戶多,服務器。。。有點玄。
所以:
1:盡量減少權限認證的內容,比如能用一個投票者的就盡量不用多個。
2:對一些不涉及敏感數據的資源,不要去驗證,比如js/css/img等。
3:盡量減少一個頁面中的資源請求,比如頁面中使用盡量少的引用(js/css/img/jsp/html等)
4:盡量不要把資源(URL)定義的過細,通過對URL權限檢查代碼的分析,給定一個URL,
它是去循環整個URL-Role列表去比對的,如果你定義的URL-ROLE越多,呵呵,時間上也越多。
比較好的方法就是,能用目錄角色來限定的,就決不再定義目錄下的資源得角色,
盡量減少URL-ROLE列表的數量,提高命中率。
5:雖然SS2也提供了方法級的控制,個人認為,能用系統結構上的差分解決的就決不要進行方法級的控制,
否則,性能會降得更多。
當然:
如果你要做的系統硬件足夠強大,以至于不再考慮性能問題,而專注于權限問題,上面的幾點大可不必太在意。
最后又想到了一點,如果你的系統很大,我的意思是有N多的模塊和頁面,那么,你就要有足夠的心理準備去做URL-ROLE-USER的配置工作了,如果用戶結構也比較復雜,數量也比較多,還要加上Group等,在這里我就要祝你好運了。
補充:
6:
有網友說可以減少上面第2/3所說的URL,在網上查了一下,可以在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>
當然,這樣一來,必須要保證所有需要進行權限驗證的URL都能在這里列出來,否則,就有后門啊,要小心
posted on 2008-08-28 15:27
藍劍 閱讀(4033)
評論(5) 編輯 收藏