不可不說
          隨心所欲,無往不利!
          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 藍劍 閱讀(1242) 評論(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)

          相冊

          友情鏈接

          搜索

          •  

          積分與排名

          • 積分 - 326078
          • 排名 - 172

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 财经| 堆龙德庆县| 锡林浩特市| 周至县| 保山市| 湖口县| 蓬溪县| 湖州市| 肥西县| 临湘市| 原阳县| 化州市| 栾川县| 新泰市| 晋江市| 依安县| 永和县| 扶风县| 桃江县| 平陆县| 华池县| 汝阳县| 合肥市| 西安市| 东平县| 独山县| 于都县| 广南县| 敦化市| 千阳县| 南平市| 久治县| 青阳县| 连平县| 米脂县| 灵寿县| 汽车| 广德县| 义乌市| 卢氏县| 孝昌县|