過濾器位于客戶端和web應用程序之間,用于檢查和修改兩者之間流過的請求和響應。
網(wǎng)站建設哪家好,找成都創(chuàng)新互聯(lián)!專注于網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、重慶小程序開發(fā)公司、集團企業(yè)網(wǎng)站建設等服務項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了治多免費建站歡迎大家使用!在請求到達Servlet/JSP之前,過濾器截獲請求。
在響應送給客戶端之前,過濾器截獲響應。
多個過濾器形成一個過濾器鏈,過濾器鏈中不同過濾器的先后順序由部署文件web.xml中過濾器映射的順序決定。
最先截獲客戶端請求的過濾器將最后截獲Servlet/JSP的響應信息。
我們需要實現(xiàn)一個Filter接口,導入import javax.servlet.*,并實現(xiàn)其中的抽象方法。
import javax.servlet.*;
import java.io.IOException;
public class LoginFilter implements Filter {
@Override
//初始化
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
}
@Override
//刪除過濾器
public void destroy() {
}
}
以上操作和Servlet很相似,也可以理解為Filter就是一個Servlet,只是Filter所對應的功能和位置不相同。
配置映射路徑:
過濾器配置映射路徑有兩種方法,第一種方法就是在web.xml中配置
login.jsp 過濾器配置映射 LoginFilter com.scores.filter.LoginFilter LoginFilter /*
第二種方法就是利用注解的方式進行配置( 攔截的路徑 /*:攔截所有的請求)
@WebFilter(urlPatterns = {"/*"})
配置完成之后接下來我們就可以給LoginFilter寫上一些輸出語句及邏輯判斷
package com.scores.filter;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
public class LoginFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("init");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest)servletRequest;
//獲取當前uri
String uri = request.getRequestURI();
//通過這條輸出語句可以清楚的看到被攔截的請求
System.out.println("doFilter"+uri);
//通過過濾器----允許通過
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
System.out.println("destroy");
}
}
在實行不同的要求時可以用不同的邏輯判斷來完成,例如你想完成必須要有用戶登錄才能繼續(xù)訪問后續(xù)頁面的要求,就可以在doFilter中加入邏輯判斷,假如nowses就代表你的賬號密碼。
//邏輯判斷
Object loginuser = request.getSession().getAttribute("nowses");
//如果他這個loginuser不為空
if(loginuser != null){
//允許通過
filterChain.doFilter(servletRequest,servletResponse);
}else{
//跳轉回登錄頁面
HttpServletResponse response = (HttpServletResponse) servletResponse;
response.sendRedirect("/ScoresWeb/login.jsp");
}
總結:
過濾器:根據(jù)業(yè)務需求對請求進行攔截。
你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧