魯春利的工作筆記,好記性不如爛筆頭
Filter接口
Filter也稱之爲過濾器,通過Filter對所有web資源(例如Jsp, Servlet, 靜態文件等)進行攔截,從而實現一些特殊的功能。例如實現URL級別的權限訪問控制、過濾敏感詞彙、壓縮響應信息等。
package javax.servlet; /** * A filter is an object that performs filtering tasks on either the * request to a resource (a servlet or static content), or on the response * from a resource, or both. * * @since Servlet 2.3 */ public interface Filter { public void init(FilterConfig filterConfig) throws ServletException; public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException; public void destroy(); }
Filter的創建和銷燬由WEB服務器負責。 web 應用程序啓動時,web 服務器將創建Filter的實例對象,並調用其init方法,完成對象的初始化功能,從而爲後續的用戶請求作好攔截的準備工作,filter對象只會創建一次,init方法也只會執行一次。通過init方法的參數,可獲得代表當前filter配置信息的FilterConfig對象。
FilterConfig接口
用戶在配置filter時,可以使用<init-param>爲filter配置一些初始化參數,當web容器實例化Filter對象,調用其init方法時,會把封裝了filter初始化參數的filterConfig對象傳遞進來。因此開發人員在編寫filter時,通過filterConfig對象的方法,就可獲得:
String getFilterName():得到filter的名稱。
String getInitParameter(String name): 返回在部署描述中指定名稱的初始化參數的值。如果不存在返回null.
Enumeration getInitParameterNames():返回過濾器的所有初始化參數的名字的枚舉集合。
public ServletContext getServletContext():返回Servlet上下文對象的引用。
package com.invicme.apps.shiro.filter; 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.annotation.WebFilter; /** * @author lucl */ @WebFilter("/*") public class MyFilter implements Filter { public MyFilter() { System.out.println("MyFilter......"); } public void init(FilterConfig fConfig) throws ServletException { System.out.println("MyFilter init......"); } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("MyFilter doFilter......"); chain.doFilter(request, response); } public void destroy() { System.out.println("MyFilter destroy......"); } }
Decorator設計模式