新聞中心
過濾器位于客戶端和web應(yīng)用程序之間,用于檢查和修改兩者之間流過的請求和響應(yīng)。
在請求到達(dá)Servlet/JSP之前,過濾器截獲請求。
在響應(yīng)送給客戶端之前,過濾器截獲響應(yīng)。
多個(gè)過濾器形成一個(gè)過濾器鏈,過濾器鏈中不同過濾器的先后順序由部署文件web.xml中過濾器映射的順序決定。
最先截獲客戶端請求的過濾器將最后截獲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所對應(yīng)的功能和位置不相同。
配置映射路徑:
過濾器配置映射路徑有兩種方法,第一種方法就是在web.xml中配置
login.jsp 過濾器配置映射 LoginFilter com.scores.filter.LoginFilter LoginFilter /*
第二種方法就是利用注解的方式進(jìn)行配置( 攔截的路徑 /*:攔截所有的請求)
@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();
//通過這條輸出語句可以清楚的看到被攔截的請求
System.out.println("doFilter"+uri);
//通過過濾器----允許通過
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
System.out.println("destroy");
}
}
在實(shí)行不同的要求時(shí)可以用不同的邏輯判斷來完成,例如你想完成必須要有用戶登錄才能繼續(xù)訪問后續(xù)頁面的要求,就可以在doFilter中加入邏輯判斷,假如nowses就代表你的賬號密碼。
//邏輯判斷
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ù)需求對請求進(jìn)行攔截。
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
網(wǎng)頁標(biāo)題:JavaWeb過濾器簡介-創(chuàng)新互聯(lián)
本文路徑:http://ef60e0e.cn/article/depscc.html