1. 程式人生 > >web專案中實現登陸成功後才能訪問某些頁面,否則自動跳轉到登陸介面,以及對無限迴圈重定向的解決

web專案中實現登陸成功後才能訪問某些頁面,否則自動跳轉到登陸介面,以及對無限迴圈重定向的解決

1、不使用過濾器實現,在需要攔截的頁面通過session判斷是否登陸,若沒登陸則跳轉到login.jsp頁面:

<% 
    Admin admin = (Admin)session.getAttribute("admin");
    if(admin == null){
         response.sendRedirect("login.jsp");
         return;
    }
%>
public class JspFilter implements Filter {
       public void destroy() {}
       public
void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest httpServletRequest = (HttpServletRequest)request; HttpServletResponse httpServletResponse = (HttpServletResponse) response; HttpSession session = httpServletRequest.getSession(); Admin admin = (Admin)session.getAttribute("admin"
); String url = httpServletRequest.getRequestURI(); //若不進行url.endsWith("login.jsp")判斷則會出現無限迴圈重定向的問題; //若登陸成功之後則admin不為null,繼續執行 if(url.endsWith("login.jsp") || admin!=null){ chain.doFilter(httpServletRequest, httpServletResponse); return
; } //若該if放在上一if語句之前,仍然會出現無限迴圈重定向的問題 if(admin==null){ httpServletResponse.sendRedirect("/bookStore/admin/login.jsp"); return; } } public void init(FilterConfig fConfig) throws ServletException { } }

②web.xml

<filter>
     <filter-name>jspFilter</filter-name>
     <filter-class>com.zh.filter.JspFilter</filter-class>
</filter>
<filter-mapping>
     <filter-name>jspFilter</filter-name>
     <url-pattern>*.jsp</url-pattern>
</filter-mapping>

注意點:
Ⅰ、請求轉發url不會變,過濾器只過濾一次;
重定向url一直改變,過濾器會一直過濾,死迴圈
Ⅱ、當訪問JspFilter時,由於使用者沒有登陸,所以將跳轉到login.jsp,但在Filter同樣對login.jsp進行了過濾,所以當瀏覽器跳轉到login.jsp時,經驗證還是沒有登陸,那麼就會一直無限迴圈的進行跳轉,報錯。