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

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



Filter接口web

  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接口app

  用戶在配置filter時,能夠使用<init-param>爲filter配置一些初始化參數,當web容器實例化Filter對象,調用其init方法時,會把封裝了filter初始化參數的filterConfig對象傳遞進來。所以開發人員在編寫filter時,經過filterConfig對象的方法,就可得到:
ide

  String getFilterName():獲得filter的名稱。
  String getInitParameter(String name): 返回在部署描述中指定名稱的初始化參數的值。若是不存在返回null.
  Enumeration getInitParameterNames():返回過濾器的全部初始化參數的名字的枚舉集合。
  public ServletContext getServletContext():返回Servlet上下文對象的引用。spa

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

相關文章
相關標籤/搜索