不可不说
随心所欲,无往不利!
posts - 88,  comments - 92,  trackbacks - 0
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 蓝剑 阅读(4003) 评论(5)  编辑  收藏

FeedBack:
# re: 关于Spring Security 在项目中应用的几点建议
2008-08-28 15:50 | xcliu
您真的用过么?听过:
1)听说可以对资源/ajax/js/images等定义空的FilterChain, 避免
2)听说在FilterChain中可以通过session简化验证。

我感觉,只要有权限控制的系统,那么就要定义规则,只不过这类规则是通过何种方式定义的(可以是声明式的,可以是程序硬编码),因此也只是我们是否接受acegi的风格而已。
  回复  更多评论
  
# re: 关于Spring Security 在项目中应用的几点建议
2008-08-28 16:57 | 蓝剑
@xcliu
不管怎么去定义,SS2总是会去截留这些请求,然后去分析它,是什么东西,
即使不去验证它的权限,使用你说的空的FilterChain,也是需要去判断的,而且所有的URL都须去进行检查,也是需要时间的,也就是说,你在这里避免了,肯定在其他方面要付出的。  回复  更多评论
  
# re: 关于Spring Security 在项目中应用的几点建议[未登录]
2008-08-29 12:59 | Hibernating
想image,js,css这些资源直接定义为#NONE#就可以啊。
最近正在看Spring Security,我觉得系统提供的处理方式是灵活多样的,只要根据自己的需求去选择和定义保护资源,我觉得挺好的。  回复  更多评论
  
# re: 关于Spring Security 在项目中应用的几点建议
2008-08-29 20:49 | 蓝剑
楼上的,我跟踪过代码,即使定义成#NONE#好像也要做不少的处理才结束,时间的浪费是不可避免的。

不过,话说回来了,只要用权限管理,不管什么方式,性能上的代价是不可避免的
只是多或者少罢了。  回复  更多评论
  
# re: 关于Spring Security 在项目中应用的几点建议
2008-09-12 10:49 | nk
不错,支持你!  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航:
 


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

常用链接

留言簿(6)

随笔分类(62)

随笔档案(90)

文章档案(9)

相册

友情链接

搜索

  •  

积分与排名

  • 积分 - 322999
  • 排名 - 171

最新评论

阅读排行榜

评论排行榜