小方的Java博客

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            27 隨筆 :: 17 文章 :: 115 評論 :: 0 Trackbacks

          2008年12月5日 #

          我在做公司某個框架時有這么一個需求。每次調用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 @ 2008-12-05 20:42 方佳瑋 閱讀(2915) | 評論 (3)編輯 收藏

          主站蜘蛛池模板: 津市市| 濉溪县| 白水县| 海伦市| 阳原县| 永修县| 新巴尔虎左旗| 宜君县| 林州市| 革吉县| 武义县| 东宁县| 钟祥市| 吴堡县| 托里县| 博兴县| 松阳县| 遂川县| 常州市| 满城县| 巴青县| 丰都县| 古田县| 焉耆| 都安| 织金县| 瑞昌市| 竹北市| 府谷县| 宁陵县| 丰宁| 定边县| 昌乐县| 甘谷县| 德安县| 宁蒗| 宁国市| 洪江市| 资阳市| 麻栗坡县| 阜宁县|