Servlet-Web過濾器詳解
阿新 • • 發佈:2019-02-11
一、Web過濾器工作原理
使用者傳送請求-----》過濾器判斷請求是否合法-----》(合法)訪問伺服器資源 -----》(不合法)請求重定向或轉發到其它頁面過濾器的判斷在doFilter方法中進行(3個引數) 1.發給伺服器的請求 2.伺服器的響應 3.過濾器鏈(用於呼叫doFilter(arg1,arg2)放行訪問伺服器)
多個過濾器:過濾器1放行前方法(執行請求重定向到過濾器2的url的程式碼
@WebFilter(filterName ="LoginFilter",urlPatterns ={"*"},initParams ={@WebInitParam(name ="EXCLUDED_PAGES"
publicclassLoginFilterimplementsFilter{
FilterConfig filterConfig;
@Override
publicvoid init(FilterConfig filterConfig)throwsServletException{
this.filterConfig = filterConfig;
}
//攔截頁面
@Override
publicvoid doFilter(ServletRequest servletRequest
HttpServletRequest request =(HttpServletRequest) servletRequest;
request.setCharacterEncoding("utf-8");
HttpSession session = request.getSession();
String excludedPage = filterConfig.getInitParameter("EXCLUDED_PAGES");
if(excludedPage!=null){
String[] strArrays = excludedPage.split(",");
for(int i=0;i<strArrays.length;i++){
//System.out.println(strArrays[i]);
//System.out.println(((HttpServletRequest) servletRequest).getRequestURI());
if(strArrays[i]==null||"".equals(strArrays[i]))continue;
if(((HttpServletRequest) servletRequest).getRequestURI().indexOf(strArrays[i])!=-1){//url裡包含關鍵字則放行
filterChain.doFilter(servletRequest,servletResponse);
return;
}
}
}
if(session.getAttribute("username")!=null){//session中有值,正確登入----》放行
filterChain.doFilter(servletRequest,servletResponse);
}else{//session中沒有值,非法登陸----》返回登陸頁面
((HttpServletResponse)servletResponse).sendRedirect("/login.jsp");
}
}
@Override
publicvoid destroy(){
}
}
二、Web過濾器生命週期
例項化-------》web.xml載入 初始化-------》init() 過濾-------》doFilter() 銷燬--------》destroy()三、過濾器分類
Qequest-----》直接訪問頁面時使用----》進入doFilter方法 Error----》伺服器資源異常時使用----》進入doFilter方法 Forward------》使用request.getRequestDispatcher("path").forward(arg1,arg2)時使用(請求轉發)----》進入doFilter方法 Include-----》使用request.getRequestDispatcher("path").include(arg1,arg2)時使用(請求轉發)----》進入doFilter方法 Async----》目標資源非同步處理時使用----》進入doFilter方法