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