9910

          單飛

             :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
          參考
          http://gwt-ext.com/forum/viewtopic.php?t=1682


          import com.google.gwt.user.client.rpc.RemoteService;
          import com.google.gwt.user.client.rpc.RemoteServiceRelativePath;

          @RemoteServiceRelativePath("sessout")
          public interface MyService extends RemoteService {
              public Integer getUserSessionTimeoutMillis();
          }


          import com.google.gwt.user.client.rpc.AsyncCallback;

          public interface MyServiceAsync {
              void getUserSessionTimeoutMillis(AsyncCallback async);
          }



          import com.google.gwt.user.server.rpc.RemoteServiceServlet;

          @SuppressWarnings("serial")
          public class MyServiceImpl extends RemoteServiceServlet implements MyService {

              public Object getLoggedInUser() {
                  return getThreadLocalRequest().getSession().getAttribute(EConstants.USER);
              }

              /**
               * Should be the first RPC call from all UIDef*.onModuleLoad()
               *
               * @return java.lang.Integer (-1 if the user session has already timed out,
               *         otherwise, the number of milliseconds)
               */
              public Integer getUserSessionTimeoutMillis() {
                  Integer returnObj = null;
                  if (getLoggedInUser() != null) {
                      returnObj = new Integer(EduConstants.SESSION_TIMEOUT_MILLIS); // milliseconds
                  } else {
                      returnObj = new Integer(-1);
                  }
                  return returnObj;
              }
          }

          public class EConstants {

              public static final String USER = "sessuser";

              public static final int SESSION_TIMEOUT_MILLIS = 1800; // 30 minute
          }


          web.xml

            <servlet>
              <servlet-name>sessServlet</servlet-name>
              <servlet-class>com.chinaedu.edupass.server.MyServiceImpl</servlet-class>
            </servlet>
           
            <servlet-mapping>
              <servlet-name>sessServlet</servlet-name>
              <url-pattern>/ldapmanager/sessout</url-pattern>
            </servlet-mapping>


          public class LManager implements EntryPoint {


              private Timer sessionTimeoutTimer = null;
          private MyServiceAsync service;
          public void onModuleLoad() {

          service = (MyServiceAsync) GWT.create(MyService.class);

                  showLogin();
          }

          private void showLogin() {
                  final LoginDialog dialog = new LoginDialog() {
                      protected void showMainView() {
                          super.showMainView();
                          doShowMainView();
                          // 登錄后開始計(jì)時(shí)
                          initSessionTimers();
                      }

                  };
                  dialog.setAutoCenter(true);
                  dialog.setIsModal(true);
                  dialog.setShowHeader(false);
                  dialog.setShowToolbar(false);
                  dialog.setEdgeSize(10);
                  dialog.setWidth(300);
                  dialog.setHeight(180);

                  dialog.show();
              }


              private void doShowMainView() {


          /**
               * 客戶端在超時(shí)后執(zhí)行跳轉(zhuǎn)登錄
               *
               * @sessionTimeInMillis Integer
               */
              private void initSessionTimers() {
                  // Allow 30 seconds to get the RPC call constructed and called.
                  sessionTimeoutTimer = new Timer() {
                      public void run() {
                          service.getUserSessionTimeoutMillis(new AsyncCallback() {
                              public void onSuccess(Object result) {
                                  int sessionTimeMillis = ((Integer) result).intValue();
                                  if (sessionTimeMillis == -1) {
                                      // 超時(shí)后執(zhí)行跳轉(zhuǎn)到登錄窗口
                                      displaySessionTimedOut();
                                  } else {
                                      sessionTimeoutTimer.cancel();
                                      initSessionTimers();
                                  }
                              }

                              public void onFailure(final Throwable caught) {
                                  SC.say(LdapI18N.ldapMessages().failed());
                              }
                          });
                      }
                  };
                  // 31 minutes 服務(wù)器端設(shè)置為30分鐘超時(shí),如果30分鐘沒有操作
                  // 就會(huì)返回超時(shí),如果期間有操作,則在等31分鐘后再輪詢
                  sessionTimeoutTimer.schedule(31*60*1000);

              }

              private void displaySessionTimedOut() {
                  SC.say(LI18N.ldapMessages().sessionTimeOut(), new BooleanCallback() {
                      public void execute(Boolean value) {
                          showLogin();
                      }
                  });
              }
          posted on 2011-08-03 18:18 單飛 閱讀(700) 評(píng)論(0)  編輯  收藏

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 油尖旺区| 四会市| 磐安县| 得荣县| 梁河县| 陈巴尔虎旗| 广宁县| 高雄市| 太仓市| 垫江县| 信丰县| 余江县| 扶沟县| 太原市| 临猗县| 灵丘县| 兴义市| 石棉县| 双牌县| 贞丰县| 安徽省| 昌平区| 绥德县| 东阿县| 黄骅市| 榆中县| 恩平市| 兴和县| 镇远县| 通河县| 韶山市| 大石桥市| 右玉县| 浪卡子县| 辉县市| 沙坪坝区| 桦甸市| 克山县| 东乌珠穆沁旗| 巴中市| 清远市|