欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java過濾器中Filter的ChainFilter過濾鏈

 更新時(shí)間:2020年07月13日 16:55:08   作者:IT_laobai  
這篇文章主要介紹了java過濾器中Filter的ChainFilter過濾鏈,發(fā)送請(qǐng)求時(shí),如果有不符合的信息將會(huì)被filter進(jìn)行攔截,如果符合則會(huì)進(jìn)行放行。如果感興趣可以來學(xué)習(xí)一下

1、什么是過濾器?

在客戶端到服務(wù)器的過程中,當(dāng)發(fā)送請(qǐng)求時(shí),如果有不符合的信息將會(huì)被filter進(jìn)行攔截,如果符合則會(huì)進(jìn)行放行,在服務(wù)器給客戶端響應(yīng)時(shí)也會(huì)進(jìn)行判斷 如果有不符合的信息將會(huì)被filter進(jìn)行攔截,如果符合則會(huì)進(jìn)行放行。

OOP:Java面向?qū)ο缶幊?,抽象、封裝、繼承、多態(tài)。

AOP:面向切面編程,過濾器就是一個(gè)面向切面的編程思想。

AOP是sun公司srvlet2.3版本之后推出的新功能,在2.3之前的版本沒有該功能,定義一個(gè)過濾器需要實(shí)現(xiàn)(implement)Filter接口,這里實(shí)現(xiàn)的是javax.servlet.Filter。

過濾器是一個(gè)程序,它先于與之相關(guān)的servlet或JSP頁(yè)面運(yùn)行在服務(wù)器上。過濾器可附加到一個(gè)或多個(gè)servlet或JSP頁(yè)面上,并且可以檢查進(jìn)入這些資源的請(qǐng)求信息。在這之后,過濾器可以作如下的選擇:
①以常規(guī)的方式調(diào)用資源(即,調(diào)用servlet或JSP頁(yè)面)。
②利用修改過的請(qǐng)求信息調(diào)用資源。
③調(diào)用資源,但在發(fā)送響應(yīng)到客戶機(jī)前對(duì)其進(jìn)行修改。
④阻止該資源調(diào)用,代之以轉(zhuǎn)到其他的資源,返回一個(gè)特定的狀態(tài)代碼或生成替換輸出。

2、過濾器的生命周期:

在項(xiàng)目開始啟動(dòng)的時(shí)候,過濾器開始初始化,當(dāng)有請(qǐng)求來的時(shí)候開始自動(dòng)去執(zhí)行doFilter方法,隨著項(xiàng)目的關(guān)閉過濾器開始停止。

3、過濾器有什么用?

過濾器主要的作用是過濾請(qǐng)求,可以通過Filter技術(shù),web服務(wù)器管理的所有web資源:例如:JSP、Servlet、靜態(tài)圖片文件、或靜態(tài)HTML文件進(jìn)行攔截,從而實(shí)現(xiàn)一些特殊功能,例如:實(shí)現(xiàn)URL級(jí)別的權(quán)限控制、過慮敏感詞匯、壓縮響應(yīng)信息等一些高級(jí)功能。

4、該怎么用?

可以寫多個(gè),從用戶訪問——》第一個(gè)過濾器——》第二個(gè)過濾器——》Servlet

過濾器的生命周期:隨著項(xiàng)目的啟動(dòng)而創(chuàng)建,當(dāng)訪問了地址后而調(diào)用doFilter方法,這個(gè)會(huì)多次執(zhí)行,隨著項(xiàng)目的關(guān)閉而銷毀。

調(diào)用doFilter方法時(shí)有三個(gè)參數(shù):

reqest(ServletRequest)——》HttpServletRequest(注意強(qiáng)轉(zhuǎn):在使用HttpServletRequest這個(gè)獨(dú)有的方法時(shí)要強(qiáng)轉(zhuǎn))

response(ServletResponse)——》HttpServletResponse(注意強(qiáng)轉(zhuǎn):在使用HttpServletResponse這個(gè)獨(dú)有的方法時(shí)要強(qiáng)轉(zhuǎn))

filterchain 鏈 可以指向下一個(gè)地址(如果有過濾器則指向下一個(gè)過濾器,沒有指向資源Servlet) 過濾、攔截、放行

chain.doFilter(req,resp);//放行

ChainFilter鏈:

它可以指向下一個(gè)資源,如果還有過濾器,則繼續(xù)進(jìn)行下一次的過濾,如果沒有過濾器,則會(huì)指向資源(servlet)。

filter應(yīng)用場(chǎng)景:

(1).為所有的Servlet設(shè)置編碼

(2).設(shè)置跨域問題

(3).解決所有的防盜鏈問題

使用過濾器的時(shí)候需要配置的文件:

(1)、固定地址

(2)、通配符

(3)、指定目錄

過濾器代碼奉上:

package servlet; 

import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;/**
* urlPattern={"/*"}獲取所有的Servlet的映射路徑,實(shí)現(xiàn)不同Servlet之間的交互
*/
@WebServlet(name = "DemoFilter",urlPatterns = {"/*"})
public class DemoFilter implements Filter{
/**
* 過濾器的初始化方法
* @param filterConfig 可以獲取部署描述符文件(web.xml)中分配的過濾器初始化參數(shù)。
* @throws ServletException
*/
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("過濾器被創(chuàng)建了");
}/**
*
* @param servletRequest 請(qǐng)求
* @param servletResponse 響應(yīng)
* @param filterChain 鏈條,對(duì)過濾器進(jìn)行阻止和放行
* @throws IOException
* @throws ServletException
*/
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("過濾器被執(zhí)行了");
servletResponse.setContentType("text/html,charset=utf-8");
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
response.addHeader("Access-Control-Allow-Origin","*");
String referer = request.getHeader("referer");
System.out.println(referer);
filterChain.doFilter(servletRequest,servletResponse);//放行
}@Override
public void destroy() {
System.out.println("過濾器被銷毀了");
}
}

到此這篇關(guān)于java過濾器中Filter的ChainFilter過濾鏈的文章就介紹到這了,更多相關(guān)java過濾器Filter內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java如何處理數(shù)據(jù)成為樹狀結(jié)構(gòu)

    Java如何處理數(shù)據(jù)成為樹狀結(jié)構(gòu)

    這篇文章主要介紹了Java如何處理數(shù)據(jù)成為樹狀結(jié)構(gòu)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • mybatis調(diào)用存儲(chǔ)過程,帶in、out參數(shù)問題

    mybatis調(diào)用存儲(chǔ)過程,帶in、out參數(shù)問題

    這篇文章主要介紹了mybatis調(diào)用存儲(chǔ)過程,帶in、out參數(shù)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Spring?RestTemplate遠(yuǎn)程調(diào)用過程

    Spring?RestTemplate遠(yuǎn)程調(diào)用過程

    這篇文章主要介紹了Spring?RestTemplate遠(yuǎn)程調(diào)用過程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • 詳解MyBatis延遲加載是如何實(shí)現(xiàn)的

    詳解MyBatis延遲加載是如何實(shí)現(xiàn)的

    MyBatis 的延遲加載(懶加載)特性允許在需要使用關(guān)聯(lián)對(duì)象數(shù)據(jù)時(shí)才進(jìn)行加載,而不是在執(zhí)行主查詢時(shí)就加載所有相關(guān)數(shù)據(jù),我們將通過以下幾個(gè)方面來深入了解MyBatis的延遲加載實(shí)現(xiàn)機(jī)制,需要的朋友可以參考下
    2024-07-07
  • 使用Mybatis遇到的there is no getter異常

    使用Mybatis遇到的there is no getter異常

    這篇文章主要介紹了使用Mybatis遇到的there is no getter異常,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-09-09
  • Springcloud實(shí)現(xiàn)服務(wù)多版本控制的示例代碼

    Springcloud實(shí)現(xiàn)服務(wù)多版本控制的示例代碼

    這篇文章主要介紹了Springcloud實(shí)現(xiàn)服務(wù)多版本控制的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • 使用fastjson中的JSONPath處理json數(shù)據(jù)的方法

    使用fastjson中的JSONPath處理json數(shù)據(jù)的方法

    這篇文章主要介紹了使用fastjson中的JSONPath處理json數(shù)據(jù)的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • spring?IOC容器的Bean管理XML自動(dòng)裝配過程

    spring?IOC容器的Bean管理XML自動(dòng)裝配過程

    這篇文章主要為大家介紹了spring?IOC容器Bean管理基于XML的自動(dòng)裝配過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • Freemarker中的3種循環(huán)模式

    Freemarker中的3種循環(huán)模式

    這篇文章主要介紹了Freemarker中的3種循環(huán)模式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • springboot + mybatis配置多數(shù)據(jù)源示例

    springboot + mybatis配置多數(shù)據(jù)源示例

    本篇文章主要介紹了springboot + mybatis配置多數(shù)據(jù)源示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-03-03

最新評(píng)論