springboot的Filter註解與防盜鏈結

2021-08-22 19:21:33 字數 2070 閱讀 4444

filter的功能是改變請求與響應

在乙個請求到達servlet之前處理request

在離開servlet的時候處理 response

所以利用filter可以檢查request和response, 根據需要也可以修改request頭 和 response頭

對於spring boot, filter配置可以使用原始的配置, 也可以使用新的配置方式

如下只以新的配置方式為例:

1. 建立乙個類, 讓它繼承filter

public class stealsource implements filter
2.在類上加@webfilter註解, 並新增要過濾的請求位址

@webfilter(urlpatterns="/*", filtername="handall")

public class stealsource implements filter

3.在spring boot的啟動器上新增註解, 將要用到的filter加入進來

@servletcomponentscan(basepackageclasses=stealsource.class) // stealsource為要使用的filter

經過上面簡單的配置就可以正常使用了

網路上的資源, 有些我們拿來可以直接訪問, 有些不能訪問

先開啟乙個網頁, 然後找到原碼(f12), 這裡就可以看到***的具體內容是什麼

當我們把這個***內容拷貝出來放入瀏覽器位址列請求, 發現有些有效, 有些無效

經過測試和查詢, 無效是由於鏈結防盜, 它設定了不能從外部網域名稱進入到伺服器

如下通過filter簡單設定防盜鏈結

原理: 請求的網域名稱不等於伺服器網域名稱就不能通過

傳送乙個請求時, 如下:

位址為: 

網域名稱為: mp.csdn.net

使用request.getheader("referer");  獲取位址

使用request.getservername(); 獲取網域名稱

伺服器網域名稱不變, 關鍵就是看請求的位址中是否有伺服器的網域名稱

如果你是從位址輸入的, 則後台伺服器獲取的位址為空

如果是從其它頁面中請求的, 則網域名稱不是伺服器網域名稱

如果是從伺服器中的頁面請求的, 則網域名稱與伺服器網域名稱相同

實現**:

@webfilter(urlpatterns="/*", filtername="handall")

public class stealsource implements filter

@override

public void dofilter(servletrequest req, servletresponse res, filterchain chain)

throws ioexception, servletexception

/* 發起請求網域名稱或ip*/

string address = request.getservername();

boolean contains = referer.contains(address);

/*如果不包含, 即發起請求的點不是本站的頁面*/

if (!contains)

// 放行

chain.dofilter(request, response);

} @override

public void destroy()

}

最關鍵是要理解 request.getservletname()

獲取的是**的網域名稱, 比如從index.html 的 a標籤 傳送的請求

後台使用request.getservletname() 獲取到的就是index所屬專案的網域名稱

如果是本地建立乙個html頁面(不在專案中)來傳送請求, 獲取的就是localhost, 也就是本在ip

所以只能由專案所屬頁面傳送的請求才能通過filter, 從而達到 防盜 的目的

Springboot自定義過濾器Filter

前言 自己寫了個springboot專案,最近寫的功能越來越多,結合業務已經要寫過濾器filter來過濾處理一些請求。在網上看了幾篇部落格,總結如下 過濾器配置方式有兩種 1 通過 webfilter註解來配置 2 通過 bean註解來配置 第一步 首先自己先寫個過濾器類 myfilter,此類必須...

lucene中search內建的Filter

先來看一下rangefilter public static void printfilter string path throws ioexception system.out.println 其實這段 沒什麼,就增加了下面這段 rangefilter filter new rangefilter...

python3學習之map函式和filter函式

map 函式可以對乙個資料進行同等迭代操作。例如 def f x return x x r map f,1,2,3,4,5,6,7,8,9 print list r map函式傳入的第乙個引數就是函式本身,即f。第二個引數是要操作的資料 map 作為高階函式,事實上它把運算規則抽象了,因此,我們不 ...