1. 程式人生 > >三、使用者模組(非法攔截,自動登入)

三、使用者模組(非法攔截,自動登入)

非法攔截

com.filter包內 ,新建一個 LoginAccessFilter 過濾器,

註解:@WebFilter(" / * ")   攔截所有 

@WebFilter("/*") //攔截所有
public class LoginAccessFilter implements Filter {

    public LoginAccessFilter() {
    }

	public void destroy() {
	}

    1、靜態資源(statics目錄下的資源)  放行     2、指定頁面(登入頁面login.jsp、註冊頁面register.jsp等)    放行     3、指定行為(登入操作、註冊操作等)    放行     4、登入狀態(session作用域中的user物件不為空)    放行

public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {

    //基於Http
    HttpServletRequset request=(HttpServletRequest) req; //強轉
    HttpServletResponse response=(HttpServletResponse) resp;

    //獲取請求的路徑
    String path=request.getRequestURI(); //從站點名到問號結束

    //對需要放行內容的操作
    //1.靜態資源 (statics目錄下的資源) 放行
    if(path.contains("/statics")){  // 加"/"表示路徑
        chain.doFilter(request,response);
        return;
    }
    
    //2.指定頁面(登入頁面login.jsp、註冊頁面 register.jsp等)放行
    if(path.contains("/login.jsp")){
        chain.doFilter(request,response);
        return;
    }

    //3.指定行為(登入操作、註冊操作等)放行
    //需要先獲取行為,得到使用者的行為
    String action=request.getParameter("user");
    if(path.contains("/user")){
        if("login".equals(action)){
            chain.doFilter(request,response);
            return;
        }
    }

    //4.登入狀態(session作用域中user物件不為空)放行
    User user=request.getSession().getAttribute("user");
    if(user!=null){
        chain.doFilter(request,response);
        return;
    }
    

自動登入

    5、當cookie不為空時,可自動呼叫登入操作         1、獲取cookie陣列         2、判斷cookie是否為空         3、遍歷cookie陣列,得到指定cookie物件         4、得到cookie對應的cookie,擷取得到使用者名稱和密碼         5、請求轉發呼叫登入操作

    //自動登入

    //5.當cookie不為空時,可自動呼叫登入操作

    //1.獲取cookie陣列
    Cookie[] cookies=request.getCookies();

    //2.判斷cookie是否為空
    if(cookies!=null && cookies.length>0){
    
        //3.遍歷cookie陣列,得到指定cookie物件
        for(Cookie cookie:cookies){
            
            //4.得到cookie對應的cookie,擷取得到使用者名稱和密碼
            if("user".equals(cookie.getName)){
                String value=cookie.getValue();
                String uname=value.split("-")[0];
                String upwd=value.spilt("-")[1];
                String url="user?action=login&userName="+uname+"&userPwd="+upwd;

                //5.請求轉發呼叫登入操作
                request.getRequestDispatcher(url).forward(request,response);
                return;
            }
        }
    }

    //攔截到登入頁面
    response.sendRedirect("login.jsp");
}