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
蓝剑 阅读(4017)
评论(5) 编辑 收藏