Java Web idea Filter配置(過濾器配置)


一、過濾器的概述
1.1過濾器的概念及作用
概念
過濾器是一個能夠攔截客戶端與服務端請求和響應的web組件(Servlet、Filter、Listener)。

2.畫圖分析

 

 

 

攔截請求:在請求到達客戶端要訪問的web資源前攔截請求。

攔截響應:在響應到達客戶端之前攔截響應  。

為什么要使用過濾器
在實際項目中,我們對訪問某些資源的請求需要進條件的篩選、過濾。當這個請求滿足特定情況,才能讓這個請求訪問目標資源,如果不滿足條件,就不讓訪問目標資源。比如,我們在論壇上發帖,網絡網網需要對所發的內容進行過濾,如果有不適合的 字眼,就需要對其特殊處理。這就是通過過濾來完成。

二、過濾的應用場景
1.過濾論壇中的非法字符

2.登錄權限檢查

3.統一處理項目的中文亂碼(請求和響應的中文亂碼)

三、過濾開發入門
需求:編寫一個Filter,攔截瀏覽器發給HelloServlet的請求

步驟:

1.用Filter接口的doFilter方法進行請求和響應的攔截。

2.開發步驟:

【實現Filter接口】
第一步:編寫一個普通的java類HelloFilter,實現Filter接口,重寫doFilter方法;
第二步:在doFilter方法中打印"請求被攔截了......";

【配置Filter】
第一步:在web.xml文件中配置Filter的類路徑:
<filter>
<filter-name>HelloFilter</filter-name>
<filter-class>com.heima.filter.HelloFilter</filter-class>
</filter>
第二步:配置HelloFilter攔截的Servlet的映射路徑:
<filter-mapping>
<filter-name>HelloFilter</filter-name>
<url-pattern>/helloServlet</url-pattern>
</filter-mapping>
3.編寫HelloServlet,配置映射路徑為/helloServlet

4.啟動tomcat,訪問HelloServlet。

實現:

package com.mazai.filter;

import javax.servlet.*;
import java.io.IOException;

/**
* @author buguniao
* @version v1.0
* @date 2018/12/16 23:38
* @description TODO
**/
public class HelloFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {

}

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("請求被攔截了..............");
}

@Override
public void destroy() {

}
}
第二步:

1.配置Filter

第一步:在web.xml文件中配置Filter的類路徑:
<filter>
<filter-name>HelloFilter</filter-name>
<filter-class>com.heima.filter.HelloFilter</filter-class>
</filter>
第二步:配置HelloFilter攔截的Servlet的映射路徑:
<filter-mapping>
<filter-name>HelloFilter</filter-name>
<url-pattern>/helloServlet</url-pattern>
</filter-mapping>
2.編寫HelloServlet,配置映射路徑/helloServlet

package com.mazai.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
* @author buguniao
* @version v1.0
* @date 2018/12/16 23:54
* @description TODO
**/
@WebServlet("/helloServlet")
public class HelloServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("HelloServlet接收請求......");
}
}
3、啟動tomcat,訪問HelloServlet,通過測試,發現請求被攔截了,並沒有到達HelloServlet。如果需要放行,則需要在Filter中編寫以下代碼 :

四、Filter的注解開發
Servlet3.0版本的Filter提供了注解開發,注解能夠取代對Filter的配置,使得Filter的開發更高效;配置Filter使用的注解是:@WebFilter(urlPatterns = "/demo") 。

1、Filter的注解開發步驟
第一步:創建一個普通的java類實現Filter接口,重寫抽象方法;
第二步:在這個類上面使用@WebFilter注解進行映射路徑的配置,如:@WebFilter(urlPatterns = "/demo");
第三步:重寫doFilter方法,進行具體的業務邏輯處理;

【注解開發示例】AnnDemo1Filter.java

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;

@WebFilter(urlPatterns = "/demo")
public class AnnDemo1Filter implements Filter{
@Override
public void init(FilterConfig filterConfig) throws ServletException {

}

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

}

@Override
public void destroy() {

}
}
2、使用IDEA的Filter注解模板
IDEA開發工具提供了Filter注解模板幫助我們簡化Filter的注解開發,具體做法如下:

第一步:配置Filter注解模板

 

 

#if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${PACKAGE_NAME};#end
#parse("File Header.java")
@javax.servlet.annotation.WebFilter(urlPatterns = "/")
public class ${Class_Name} implements javax.servlet.Filter {

public void init(javax.servlet.FilterConfig config) throws javax.servlet.ServletException {
}
public void doFilter(javax.servlet.ServletRequest req, javax.servlet.ServletResponse resp, javax.servlet.FilterChain chain) throws javax.servlet.ServletException, java.io.IOException {
chain.doFilter(req, resp);
}
public void destroy() {
}
}
第二步:使用模板創建Filter;

在任意包下面,鼠標右鍵new--->Filter

 

 

3、注解開發注意事項
當有多個Filter都對同一個請求路徑進行攔截的時候,xml配置和注解中Filter執行順序不一樣!!!

xml配置方式的Filter,執行順序按照在web.xml中配置的順序,從上到下執行;

注解開發的Filter,執行的順序是按照實現類的字母表順序依次執行!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM