Java中的Filter過濾器html
參考:https://www.cnblogs.com/coderland/p/5902878.html&https://www.cnblogs.com/lichmama/p/7063587.htmljava
一. 什麼是Filter?web
Filter也稱之爲過濾器,它是Servlet技術中最實用的技術,Web開發人員經過Filter技術,對web服務器管理的全部web資源:例如Jsp, Servlet, 靜態圖片文件或靜態 html 文件等進行攔截,從而實現一些特殊的功能。例如實現URL級別的權限訪問控制、過濾敏感詞彙、壓縮響應信息等一些高級功能。它主要用於對用戶請求進行預處理,也能夠對HttpServletResponse進行後處理。使用Filter的完整流程:Filter對用戶請求進行預處理,接着將請求交給Servlet進行處理並生成響應,最後Filter再對服務器響應進行後處理。服務器
二. 如何利用Filter實現攔截功能?app
Filter接口中有一個doFilter方法,當開發人員編寫好Filter,並配置對哪一個web資源進行攔截後,Web服務器每次在調用web資源的service方法以前,都會先調用一下filter的doFilter方法。ide
三. Filter使用案例 code
編寫Filter實現獲取Response的內容捕獲htm
package com.lichmama.webdemo.filter;blog
import java.io.IOException;接口
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;
import com.lichmama.webdemo.PrintWriterWrapper;
import com.lichmama.webdemo.ResponseWrapper;
public class TestFilter implements Filter {
@Override
public void init(FilterConfig filterconfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletrequest, ServletResponse servletresponse, FilterChain filterchain)
throws IOException, ServletException {
ResponseWrapper responsewrapper = new ResponseWrapper((HttpServletResponse) servletresponse);
filterchain.doFilter(servletrequest, responsewrapper);
PrintWriterWrapper writerWrapper = (PrintWriterWrapper) responsewrapper.getWriter();
// TODO retrieve content from PrintWriterWrapper
String content = writerWrapper.getContent();
}
@Override
public void destroy() {
}
}