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();
                          // 登錄后開始計時
                          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() {


          /**
               * 客戶端在超時后執(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) {
                                      // 超時后執(zhí)行跳轉(zhuǎn)到登錄窗口
                                      displaySessionTimedOut();
                                  } else {
                                      sessionTimeoutTimer.cancel();
                                      initSessionTimers();
                                  }
                              }

                              public void onFailure(final Throwable caught) {
                                  SC.say(LdapI18N.ldapMessages().failed());
                              }
                          });
                      }
                  };
                  // 31 minutes 服務(wù)器端設(shè)置為30分鐘超時,如果30分鐘沒有操作
                  // 就會返回超時,如果期間有操作,則在等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 單飛 閱讀(698) 評論(0)  編輯  收藏

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 伊吾县| 东方市| 股票| 富裕县| 昌江| 巴彦淖尔市| 集安市| 龙游县| 衡山县| 莲花县| 惠东县| 景洪市| 德庆县| 大竹县| 阜宁县| 张家川| 常德市| 大渡口区| 虹口区| 海原县| 来安县| 越西县| 遂昌县| 山阳县| 长岭县| 章丘市| 平凉市| 台东县| 洮南市| 宝山区| 普兰店市| 望江县| 浙江省| 金山区| 庆云县| 华坪县| 嵩明县| 昌邑市| 涿州市| 葵青区| 仁怀市|