由於頁面長時間未操作,出現登錄超時,用戶再次刷新頁面,系統會自動跳轉到登錄頁面。當用戶重新登錄后,怎么才能跳轉到原來的頁面呢?解決的方法如下:
/** * 獲取request請求中的參數 * @param sb * @param req * @return */ @SuppressWarnings("all") private StringBuffer getRequestParameters(StringBuffer sb, HttpServletRequest req){ Map map = req.getParameterMap(); String str = "?"; if(!map.isEmpty()){ for(Object key : map.keySet()){ String[] values = (String[])map.get(key); for(String value:values){ str+=key+"="+value+"&"; } } str = str.substring(0, str.length()-1); } return sb.append(str); }
/** * 在調用Controller處理方法前,執行是否登錄驗證操作, * 如果沒有登錄直接跳轉到登錄頁面 */ public boolean preHandle(HttpServletRequest req, HttpServletResponse resp, Object arg2) throws Exception { HttpSession session = req.getSession(); // 獲取管理員賬戶信息 CatalogManager user = (CatalogManager)session.getAttribute("userinfo"); // 如果用戶信息為null,則判斷當前用戶未登錄,跳轉到登錄頁面先登錄 if(null == user){ //獲取當前瀏覽器訪問地址 StringBuffer urlBuff = req.getRequestURL(); getRequestParameters(urlBuff,req); //對要跳轉的url經行編碼 String path = req.getContextPath(); int port = req.getServerPort(); String portStr = 80 == port ? "" : (":"+req.getServerPort()); String basePath = req.getScheme()+"://"+req.getServerName()+portStr+path+"/"; //對要跳轉的url經行編碼 String url = URLEncoder.encode(urlBuff.toString(), HttpHelperCommon.CHARSET_ENCODING); resp.sendRedirect(basePath+"ht/login/toHtLogin.do?url="+url); return false; } else { //如果登錄成功,則直接執行下一步操作 //ActionContext.getContext().getSession().put("userid", user.getId()); session.setAttribute("userinfo", user); session.setAttribute("userid", user.getId()); session.setAttribute("loginname", user.getUsername()); return true; } }
