三、使用者模組(非法攔截,自動登入)
阿新 • • 發佈:2018-12-14
非法攔截
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"); }