登陸權限判斷
登陸, 送出到登陸Servlet處理其業務!
登陸成功, 跳轉到首頁,顯示歡迎資訊 + 清單資訊
登陸失敗,跳轉到登陸!
要求:
隻有登陸後,才可以通路首頁, 顯示清單
如果沒有登陸,直接通路首頁清單,要跳轉到登陸!
實作思路:
1.Login.jsp 登陸頁面
2.List.jsp 清單顯示
3.LoginServlet.java 登陸處理servlet
4.ListServlet.java 首頁清單查詢Servlet
5.LoginFilter.java 登陸驗證過濾器
能直接通路的連結有:
http://localhost:8080/contactSystem/login.jsp
http://localhost:8080/contactSystem/LoginServlet
不能直接通路的連結有:
http://localhost:8080/contactSystem/ListServlet
http://localhost:8080/contactSystem/list.jsp
核心過濾器代碼:
但是此過濾器有問題:
①頁面用了js和css,也會被攔截,是以通過截取uri來判斷這樣不妥。
②但登入成功後再直接通路list.jsp,能進入,而且是空資料。
是以此代碼僅供過濾器寫法作參考。
package com.cn.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* 登入驗證過濾器
* @author liuzhiyong
能直接通路的連結有:
http://localhost:8080/contactSystem/login.jsp
http://localhost:8080/contactSystem/LoginServlet
不能直接通路的連結有:
http://localhost:8080/contactSystem/ListServlet
http://localhost:8080/contactSystem/list.jsp
*/
public class LoginFilter implements Filter{
/**
* 攔截業務邏輯:
* 1.先指定放行的資源,哪些資源不需要攔截:
* login.jsp + /LoginServlet (request對象可以擷取)
* 2.擷取session,從session中擷取使用者資訊userInfo
* 3.再判斷使用者資訊是否為空
* 為空,說明沒有登入,跳轉到登入
* 不為空,已經登入,放行
*/
@Override
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
//轉型
HttpServletRequest request = (HttpServletRequest)req;
HttpServletResponse response = (HttpServletResponse)res;
//擷取到請求的uri
String uri = request.getRequestURI();
System.out.println("=======攔截的uri=========="+uri);
//先判斷指定放行的資源,給予放行:
if(uri.equals(request.getContextPath()+"/LoginServlet") || uri.equals(request.getContextPath()+"/login.jsp")
|| uri.equals(request.getContextPath()+"/css/login.css") || uri.equals(request.getContextPath()+"/js/login.js")
|| uri.equals(request.getContextPath()+"/js/jquery-1.8.2.js")){
//放行
chain.doFilter(request, response);
}else{//攔截其它資源
//擷取session,從session中擷取使用者資訊userInfo
HttpSession session = request.getSession(false);//注意這裡填上參數false,以免自己建立
if(session != null){
//從session中擷取使用者資訊userInfo
Object userInfo = session.getAttribute("userInfo");
//判斷使用者資訊是否為空
if(userInfo == null){//沒有登入,跳轉到登入
request.getRequestDispatcher("/login.jsp").forward(request, response);
}else{//已經登入,放行
chain.doFilter(request, response);
}
}else{//session為空,說明也沒有登入,跳到登入
request.getRequestDispatcher("/login.jsp").forward(request, response);
}
}
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
}
@Override
public void destroy() {
// TODO Auto-generated method stub
}
}