小方的Java博客

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            27 隨筆 :: 17 文章 :: 115 評論 :: 0 Trackbacks
          我在做公司某個框架時有這么一個需求。每次調用dwr的方法前要檢查用戶是否已經登錄,否則就不能執行并且退到首頁。

          當然了,做攔截器有很多方式,但經過研究發現DWR自帶很多插件,其中就有一個調用處理的插件。具體做法如下。

          在web.xml里的DWR配置中加入一個參數:
          <init-param>
                      
          <param-name>
                          org.directwebremoting.extend.Remoter
                      
          </param-name>
                      
          <param-value>com.xxx.base.framework.web.MyDWRRemoter</param-value>
                  
          </init-param>

          然后自己創建這個實現類。
          public class MyDWRRemoter extends DefaultRemoter
          {

              
          public Replies execute( Calls calls )
              
          {
                  HttpSession session 
          = WebContextFactory.get().getSession();
                  ISessionContainer sc 
          = ( ISessionContainer ) session.getAttribute( ISessionContainer.SESSION_CONTAINER_KEY );

                  
          //session檢查
                  if ( sc == null || sc.getUserInfo() == null )
                  
          {
                      logOut();
                      
          return super.execute( new Calls() );
                  }

                  
          else
                  
          {
                      IUserInfo userInfo 
          = sc.getUserInfo();
                      
          if(!SecurityFactory.getInstance().isOnline( userInfo.getUserID(), session.getId() ))
                      
          {
                          logOut();
                          
          return super.execute( new Calls() );
                      }

                  }

                  
          return super.execute( calls );
              }


              
          private void logOut()
              
          {
                  WebContext wct 
          = WebContextFactory.get();
                  Util utilThis 
          = new Util(wct.getScriptSession());
                  utilThis.addScript( 
          new ScriptBuffer("logOut()"));
              }

          }

          其中,檢查用戶是否登錄,如果沒有登錄就返回一個空的super.execute( new Calls());, 不能返回null否則會報錯。
          檢查通過就調用super.execute( calls );  其實calls里還能獲得很多信息。

          最后大家注意logOut方法,這里用到了DWR2.0新功能:DWR反向調用,就是DWR調用javascript,具體用法大家網上可以查到,需要配置的,我這里就不多說了。補充一下,addScript調用的是html里的function logOut().

          這樣的話,如果用戶session超時,或被管理員踢掉,一旦他做任何dwr操作就會被強迫登出到首頁了。
          posted on 2008-12-05 20:42 方佳瑋 閱讀(2915) 評論(3)  編輯  收藏 所屬分類: AJAX

          評論

          # re: [原創]DWR2.0的調用前攔截 2009-08-06 09:45 bln13fb
          ISessionContainer
          SecurityFactory
          如何導入  回復  更多評論
            

          # re: [原創]DWR2.0的調用前攔截 2010-01-21 10:15 方佳瑋
          @bln13fb

          這是我們公司自己的類,這里只是個范例,你自己有自己的類  回復  更多評論
            

          # re: [原創]DWR2.0的調用前攔截 2011-04-19 15:06 小簡
          在你這個應用里面怎么可以獲得請求的URL呀,我想判斷一下用戶是否對某一個資源是否有訪問權限的時候怎么樣才能知道他是訪問的那個資源呢  回復  更多評論
            

          主站蜘蛛池模板: 桐梓县| 永胜县| 鄄城县| 清镇市| 前郭尔| 深水埗区| 安多县| 民和| 昂仁县| 彭阳县| 大丰市| 长沙县| 九寨沟县| 泸西县| 长宁县| 威海市| 辽中县| 华蓥市| 鹰潭市| 永宁县| 陆良县| 永吉县| 铜陵市| 永清县| 永福县| 邳州市| 平利县| 宁波市| 雷波县| 广平县| 巴马| 凌海市| 凤城市| 阳春市| 察雅县| 皋兰县| 五峰| 高台县| 兴隆县| 北辰区| 扎鲁特旗|