web專案中實現登陸成功後才能訪問某些頁面,否則自動跳轉到登陸介面,以及對無限迴圈重定向的解決
阿新 • • 發佈:2019-02-05
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時,經驗證還是沒有登陸,那麼就會一直無限迴圈的進行跳轉,報錯。