小方的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呀,我想判斷一下用戶是否對某一個資源是否有訪問權限的時候怎么樣才能知道他是訪問的那個資源呢  回復  更多評論
            

          主站蜘蛛池模板: 交口县| 会同县| 富顺县| 肥东县| 平舆县| 共和县| 邯郸县| 秭归县| 马尔康县| 南昌市| 英山县| 通许县| 成武县| 白银市| 漳浦县| 崇明县| 辽源市| 武平县| 塔河县| 文化| 丽江市| 章丘市| 乌拉特后旗| 金山区| 历史| 怀集县| 缙云县| 酉阳| 南乐县| 行唐县| 崇州市| 巴里| 临沂市| 顺昌县| 平昌县| 石泉县| 丹阳市| 卫辉市| 达孜县| 布拖县| 四会市|