1. 程式人生 > >session過期跳轉到登陸頁面並跳出iframe框架的兩個方法

session過期跳轉到登陸頁面並跳出iframe框架的兩個方法

原文章地址:http://1008610086.blog.51cto.com/4995677/1538464

最近在做攔截器,判斷使用者登入後操作超時,失去許可權然後要重新登入,但是用的iframe,返回的登陸頁總是在框架中顯示,我百度了下,總是隻有其中一個方法,現在分享下兩種解決方法,希望對你們有幫助:

方法一:

一般使用filter過濾使用者是否登入,如果使用者沒有登陸則轉向登陸頁面,這時候可以使用response.sendRedirect()。
但當在頁面上使用了iframe後,發現被重定向的只是父頁面中的iframe區域,登陸頁面內容顯示在該區域中。說明在過濾器中傳送重定向請求時,是在iframe頁面傳送的。錯誤的程式碼如下:


  HttpServletRequest req = (HttpServletRequest) request;  
Visitor visitor = (Visitor) req.getSession().getAttribute("visitor");  
if (visitor == null)  
{  
     ((HttpServletResponse) response).sendRedirect("/smpc/login/login.jsp");  
}  
chain.doFilter(request, response);

  因為response.sendRedirect()沒有target屬性,但html頁面和js中有,於是,當判斷出使用者沒有訪問許可權時,我們可以在jsp中使用js來轉向到真正的登入頁面。在filter類的doFilter方法中新增如下程式碼:(跳轉的路徑通過request.getRequestURI()獲取)

User user = (User) req.getSession().getAttribute("session_user");  
if (user == null)  
{  
    java.io.PrintWriter out = response.getWriter();  
    out.println("<html>");  
    out.println("<script>");  
    out.println("window.open ('/smpc/login/login.jsp','_top')");  
    out.println("</script>");  
    out.println("</html>");  
    return;
}  


方法二:
在你想控制跳轉的頁面,比如login.jsp中的<head>與</head>之間加入以下程式碼:
<script language="JavaScript"> 
if (window != top) 
top.location.href = location.href; 
</script>