中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java過濾器(Filter和ChainFilter鏈)你了解嗎?(有詳細代碼)

發布時間:2020-08-09 11:16:16 來源:網絡 閱讀:8323 作者:IT_laobai 欄目:開發技術

1、什么是過濾器?

      在客戶端到服務器的過程中,當發送請求時,如果有不符合的信息將會被filter進行攔截,如果符合則會進行放行,在服務器給客戶端響應時也會進行判斷 如果有不符合的信息將會被filter進行攔截,如果符合則會進行放行。

     OOP:Java面向對象編程,抽象、封裝、繼承、多態。

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

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

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

2、過濾器的生命周期:

在項目開始啟動的時候,過濾器開始初始化,當有請求來的時候開始自動去執行doFilter方法,隨著項目的關閉過濾器開始停止。

3、過濾器有什么用?

    過濾器主要的作用是過濾請求,可以通過Filter技術,web服務器管理的所有web資源:例如:JSP、Servlet、靜態圖片文件、或靜態HTML文件進行攔截,從而實現一些特殊功能,例如:實現URL級別的權限控制、過慮敏感詞匯、壓縮響應信息等一些高級功能。

4、該怎么用?

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

    過濾器的生命周期:隨著項目的啟動而創建,當訪問了地址后而調用doFilter方法,這個會多次執行,隨著項目的關閉而銷毀。

    調用doFilter方法時有三個參數:

        reqest(ServletRequest)——》HttpServletRequest(注意強轉:在使用HttpServletRequest這個獨有的方法時要強轉)

        response(ServletResponse)——》HttpServletResponse(注意強轉:在使用HttpServletResponse這個獨有的方法時要強轉)

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

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

ChainFilter鏈:

它可以指向下一個資源,如果還有過濾器,則繼續進行下一次的過濾,如果沒有過濾器,則會指向資源(servlet)。

java過濾器(Filter和ChainFilter鏈)你了解嗎?(有詳細代碼)



filter應用場景:

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

    (2).設置跨域問題

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

使用過濾器的時候需要配置的文件:

   (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的映射路徑,實現不同Servlet之間的交互
 */
@WebServlet(name = "DemoFilter",urlPatterns = {"/*"})
public class DemoFilter implements Filter{
    /**
     * 過濾器的初始化方法
     * @param filterConfig 可以獲取部署描述符文件(web.xml)中分配的過濾器初始化參數。
     * @throws ServletException
     */
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("過濾器被創建了");
    }

    /**
     *
     * @param servletRequest 請求
     * @param servletResponse 響應
     * @param filterChain  鏈條,對過濾器進行阻止和放行
     * @throws IOException
     * @throws ServletException
     */
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("過濾器被執行了");
        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("過濾器被銷毀了");
    }
}


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

舟曲县| 长乐市| 茂名市| 聂荣县| 玉田县| 来宾市| 蓬溪县| 临武县| 平度市| 沾化县| 朝阳市| 如东县| 陵水| 湄潭县| 湟中县| 杨浦区| 龙江县| 吉林省| 遂宁市| 永嘉县| 昌都县| 望都县| 虹口区| 邓州市| 祁阳县| 拉萨市| 西和县| 陇南市| 剑河县| 仙桃市| 惠州市| 海门市| 大庆市| 塘沽区| 巴马| 东乌| 博罗县| 高唐县| 元氏县| 仁化县| 武川县|