方法一:
一般使用filter過濾用戶是否登錄,如果用戶沒有登陸則轉(zhuǎn)向登陸頁面,這時候可以使用response.sendRedirect()。
但當(dāng)在頁面上使用了iframe后,發(fā)現(xiàn)被重定向的只是父頁面中的iframe區(qū)域,登陸頁面內(nèi)容顯示在該區(qū)域中。說明在過濾器中發(fā)送重定向請求時,是在iframe頁面發(fā)送的。錯誤的代碼如下:
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中有,于是,當(dāng)判斷出用戶沒有訪問權(quán)限時,我們可以在jsp中使用js來轉(zhuǎn)向到真正的登錄頁面。在filter類的doFilter方法中添加如下代碼:(跳轉(zhuǎn)的路徑通過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;
}
方法二:
在你想控制跳轉(zhuǎn)的頁面,比如login.jsp中的<head>與</head>之間加入以下代碼:
<script language="JavaScript">
if (window != top)
top.location.href = location.href;
</script>