Apache Shiro學習筆記(六)Servlet3.0 Filter介紹

魯春利的工作筆記,好記性不如爛筆頭



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設計模式




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章