過濾器位于客戶端和web應(yīng)用程序之間,用于檢查和修改兩者之間流過的請(qǐng)求和響應(yīng)。
在請(qǐng)求到達(dá)Servlet/JSP之前,過濾器截獲請(qǐng)求。
在響應(yīng)送給客戶端之前,過濾器截獲響應(yīng)。
多個(gè)過濾器形成一個(gè)過濾器鏈,過濾器鏈中不同過濾器的先后順序由部署文件web.xml中過濾器映射的順序決定。
最先截獲客戶端請(qǐng)求的過濾器將最后截獲Servlet/JSP的響應(yīng)信息。
我們需要實(shí)現(xiàn)一個(gè)Filter接口,導(dǎo)入import javax.servlet.*,并實(shí)現(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就是一個(gè)Servlet,只是Filter所對(duì)應(yīng)的功能和位置不相同。
配置映射路徑:
過濾器配置映射路徑有兩種方法,第一種方法就是在web.xml中配置
login.jsp 過濾器配置映射 LoginFilter com.scores.filter.LoginFilter LoginFilter /*
第二種方法就是利用注解的方式進(jìn)行配置( 攔截的路徑 /*:攔截所有的請(qǐng)求)
@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;
//獲取當(dāng)前uri
String uri = request.getRequestURI();
//通過這條輸出語句可以清楚的看到被攔截的請(qǐng)求
System.out.println("doFilter"+uri);
//通過過濾器----允許通過
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
System.out.println("destroy");
}
}
在實(shí)行不同的要求時(shí)可以用不同的邏輯判斷來完成,例如你想完成必須要有用戶登錄才能繼續(xù)訪問后續(xù)頁面的要求,就可以在doFilter中加入邏輯判斷,假如nowses就代表你的賬號(hào)密碼。
//邏輯判斷
Object loginuser = request.getSession().getAttribute("nowses");
//如果他這個(gè)loginuser不為空
if(loginuser != null){
//允許通過
filterChain.doFilter(servletRequest,servletResponse);
}else{
//跳轉(zhuǎn)回登錄頁面
HttpServletResponse response = (HttpServletResponse) servletResponse;
response.sendRedirect("/ScoresWeb/login.jsp");
}
總結(jié):
過濾器:根據(jù)業(yè)務(wù)需求對(duì)請(qǐng)求進(jìn)行攔截。
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
網(wǎng)站欄目:JavaWeb過濾器簡介-創(chuàng)新互聯(lián)
分享路徑:http://jinyejixie.com/article22/depscc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)、網(wǎng)站營銷、品牌網(wǎng)站制作、軟件開發(fā)、移動(dòng)網(wǎng)站建設(shè)、App開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容