天天看點

Servlet基礎知識(四)——Servlet過濾器Filter

一、什麼是過濾器:

  政府大樓的安檢保安,它既能對進入政府大樓的人員進行檢查,隻允許檢查符合要求的進入;同時他也負責對出大樓的人進行檢查,看他帶出的東西是否符合要求。

  同樣的,Servlet中的過濾器既可以對用戶端發來的請求,在Servlet接收之前進行過濾;也可以對Servlet發出的響應,在用戶端接收之前進行過濾。

二、過濾器的實作:

  Servlet的過濾器是通過實作javax.servlet.Filter接口實作的。(也就是說Servlet過濾器其實就是一個實作了Filter的Serlvet類)。該接口有三個方法:  

init(FilterConfig filterConfig)      

    Servlet的初始化方法:讀取web.xml中配置的Filter的初始化參數(它的參數提供了filterConfig對象,該對象可以讀取web.xml裡的配置)。init()隻會被調用一次。

@Override
public void init(FilterConfig filterConfig) throws ServletException {
    //擷取Filter初始化參數
    String username = filterConfig.getInitParameter("username");
}      
doFilter(ServletRequest request, ServletResponse response, FilterChain chain)      

    Servlet的過濾方法:當用戶端的請求的符合被過濾的範圍時,該方法進行過濾處理。處理完後chain再調用doFilter(request,response),表示繼續執行下一個過濾器。

    (這裡的ServletRequest和ServletResponse都要強制轉換成HttpSevletRequest和HttpServletResponse,因為Servlet實作的請求和響應式Http類型的。)

destroy()      

    Servlet容器在銷毀過濾器執行個體前調用該方法,在該方法中釋放Servlet過濾器占用的資源。

三、在web.xml中配置Filter:

  注意:一般Filter都是配置在Servlet之前的。

  過濾器中init(FilterConfig filterConfig)就是用來擷取配置的這些資訊,初始化過濾器的。

<filter>
      <filter-name>LoginFilter</filter-name>     //過濾器的名字
      <filter-class>com.itzhai.login.LoginFilter</filter-class>      //過濾器類名
  </filter>

  <filter-mapping>
      <filter-name>LoginFilter</filter-name>
      <url-pattern>/*</url-pattern>        //要過濾的url
  </filter-mapping>      

四、過濾敏感詞的過濾器例子:

@Override
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        //轉換成執行個體的請求和響應對象
        HttpServletRequest req = (HttpServletRequest)request;
        HttpServletResponse resp = (HttpServletResponse)response;
        //擷取評論并屏蔽關鍵字
        String comment = req.getParameter("comment");
        comment = comment.replace("A", "***");
        //重新設定參數
        req.setAttribute("comment", comment);
        //繼續執行
        chain.doFilter(request, response);
    }      

轉載于:https://www.cnblogs.com/wangerxiansheng/p/4122934.html