快捷搜索:

Spring Security 2资源-角色查找源码研究及性能改进

在钻研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;

}

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这种要领多得话,我说的要领就要快一些。

总之,没有最好,只有更好!

您可能还会对下面的文章感兴趣: