不可不说
随心所欲,无往不利!
posts - 88,  comments - 92,  trackbacks - 0
在研究SS2的时候,把Source存放到数据库中,进行角色配置,SS2把这些资源角色读取到一个Map中
在得到一个URL请求时,使用这个URL遍历这个Map,查找是否存在这个Key,如果有,则取出对应的角色。
问题就在这个遍历Map上,源代码如下
    private ConfigAttributeDefinition lookupUrlInMap(Map requestMap, String url) {
        Iterator entries 
= requestMap.entrySet().iterator();

        
while (entries.hasNext()) {
            Map.Entry entry 
= (Map.Entry) entries.next();
            Object p 
= entry.getKey();
            
boolean matched = urlMatcher.pathMatchesUrl(p, url);

            
if (logger.isDebugEnabled()) {
                logger.debug(
"Candidate is: '" + url + "'; pattern is " + p + "; matched=" + matched);
            }

            
if (matched) {
                
return (ConfigAttributeDefinition) entry.getValue();
            }
        }

        
return null;
    }
这个Method中一上来就作遍历循环,为什么不先利用Map的特性直接先取一次,如果取得到,直接就返回了,
如果取不到,再遍历查找,这样可以提高命中率,从而提高性能,如果找不到,这一次的Map查找性能应该
也不是很低吧?
    private ConfigAttributeDefinition lookupUrlInMap(Map requestMap, String url) {
       
ConfigAttributeDefinition cad = (ConfigAttributeDefinition)requestMap.get(url);
        if(cad != null) {
            return cad;
        }
          
        Iterator entries = requestMap.entrySet().iterator();

        
while (entries.hasNext()) {
            Map.Entry entry 
= (Map.Entry) entries.next();
            Object p 
= entry.getKey();
            
boolean matched = urlMatcher.pathMatchesUrl(p, url);

            
if (logger.isDebugEnabled()) {
                logger.debug(
"Candidate is: '" + url + "'; pattern is " + p + "; matched=" + matched);
            }

            
if (matched) {
                
return (ConfigAttributeDefinition) entry.getValue();
            }
        }

        
return null;
    }

当然,这要权衡系统URL配置的特性,诸如xxx*这种类型的配置多的话,还是原来的方式快一点,如果直接xxx
这种方式多得话,我说的方式就要快一些。
总之,没有最好,只有更好!



posted on 2008-09-02 21:04 蓝剑 阅读(1150) 评论(1)  编辑  收藏

FeedBack:
# re: Spring Security 2资源-角色查找源码研究及性能改进[未登录]
2008-09-03 09:22 | Hibernating
看过你的评论了,能具体说说在2.0应该怎么做吗?我也事参照1.x实现的。  回复  更多评论
  

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


网站导航:
 


<2008年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

常用链接

留言簿(6)

随笔分类(62)

随笔档案(90)

文章档案(9)

相册

友情链接

搜索

  •  

积分与排名

  • 积分 - 305501
  • 排名 - 162

最新评论

阅读排行榜

评论排行榜