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

          主站蜘蛛池模板: 和田县| 陈巴尔虎旗| 大埔区| 南汇区| 周宁县| 伊吾县| 汾阳市| 密山市| 铁力市| 景德镇市| 楚雄市| 红原县| 黎平县| 江达县| 札达县| 凤庆县| 常宁市| 乐平市| 玉林市| 剑阁县| 蕉岭县| 丰都县| 鄂尔多斯市| 万载县| 宁夏| 沈阳市| 女性| 广元市| 锡林郭勒盟| 吉林省| 北辰区| 余干县| 泸西县| 鞍山市| 会昌县| 蒙自县| 哈密市| 双江| 台中市| 辛集市| 唐河县|