Servlet中response.sendRedirect()跳轉時不能設定target的解決辦法
一般使用Struts2的攔截器(或者是filter)驗證是否登入的時候,如果使用者沒有登入則會跳轉到登入的頁面。這時候一般可以在攔截器或者filter中用response.sendRedirect()。
但當在頁面上使用了iframe後,發現跳轉的只是頁面中iframe內的區域,而父頁面卻沒有跳轉。攔截器或者過濾器中傳送重定向請求時,是在iframe頁面傳送的。
原來的程式碼是這樣的:
因為response.sendRedirect()沒有target屬性,但html頁面和js中有。於是,當判斷出使用者不具備訪問許可權時,可以在jsp中使用js來轉向到真正的登入頁面(這裡我是採用的中間頁面,但是我又不希望它顯示出來,於是就要使用到JS了)。具體的程式碼可以這樣寫:
@Override
public String intercept(ActionInvocation invocation) throws Exception {
/* If the user have not been logined , it must return Login_Fail and forward to login.jsp */
if( ActionContext.getContext().getSession().get("login_user") == null ) {
HttpServletResponse response = ServletActionContext.getResponse();
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<script type=/"text/javascript/">");
out.println("window.open ('login','_top')");
out.println("</script>");
out.println("</html>");
return null;
} else {
return invocation.invoke();
}
}
OK!搞定!