SpringBoot中Filter沒(méi)有生效原因及解決方案
我的一個(gè)老項(xiàng)目從SpringMvc升級(jí)到了SpringBoot、項(xiàng)目中使用了兩個(gè)過(guò)濾器,分別是XSS注入過(guò)濾器和CSRF攻擊過(guò)濾器。
Servlet 三大組件 Servlet、Filter、Listener 在傳統(tǒng)項(xiàng)目中需要在 web.xml 中進(jìn)行相應(yīng)的配置。
Servlet 3.0 開始在 javax.servlet.annotation 包下提供 3 個(gè)對(duì)應(yīng)的 @WebServlet、@WebFilter、@WebListener 注解來(lái)簡(jiǎn)化操作,@WebServlet、@WebFilter、@WebListener 寫在對(duì)應(yīng)的 Servlet、Filter、Listener 類上作為標(biāo)識(shí),從而不需要在 web.xml 中進(jìn)行配置了。
因此新的代碼如下
@Component
@WebFilter(urlPatterns = {"/*"}, filterName = "csrfFilter")
public class WebCsrfFilter implements Filter{
}和
@Component
@WebFilter(urlPatterns = {"/*"}, filterName = "xssFilter")
public class WebXssFilter extends XssFilter {
}在測(cè)試過(guò)程中發(fā)現(xiàn)設(shè)置的Filter沒(méi)有生效,經(jīng)過(guò)排查發(fā)現(xiàn)需要注意的是:Spring Boot 應(yīng)用中這三個(gè)注解默認(rèn)是不被掃描的,需要在項(xiàng)目啟動(dòng)類上添加 @ServletComponentScan 注解, 表示對(duì) Servlet 組件掃描。
因此在SpringBootApplication項(xiàng)目上需要使用@ServletComponentScan注解后,Servlet、Filter、Listener才可以直接通過(guò)@WebServlet、@WebFilter、@WebListener注解自動(dòng)注冊(cè),無(wú)需其他代碼。
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
@SpringBootApplication
@ServletComponentScan(basePackages = "com.web.global.filter")
public class WebApplication extends SpringBootServletInitializer{
public static void main(String[] args) {
SpringApplication.run(WebApplication.class, args);
}到此這篇關(guān)于SpringBoot中Filter沒(méi)有生效原因排查的文章就介紹到這了,更多相關(guān)SpringBoot中Filter沒(méi)有生效內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java實(shí)現(xiàn)數(shù)字金額轉(zhuǎn)換為中文大寫金額的完整指南與優(yōu)化技巧
在金融、財(cái)務(wù)和商務(wù)系統(tǒng)中,將數(shù)字金額轉(zhuǎn)換為中文大寫金額是一項(xiàng)常見需求,中文大寫金額能有效避免篡改和歧義,是合同、發(fā)票等正式場(chǎng)景的規(guī)范要求,本文將通過(guò)Java實(shí)現(xiàn)這一功能,需要的朋友可以參考下2025-12-12
一文了解Java讀寫鎖ReentrantReadWriteLock的使用
ReentrantReadWriteLock稱為讀寫鎖,它提供一個(gè)讀鎖,支持多個(gè)線程共享同一把鎖。這篇文章主要講解一下ReentrantReadWriteLock的使用和應(yīng)用場(chǎng)景,感興趣的可以了解一下2022-10-10
java圖論普利姆及克魯斯卡算法解決最小生成樹問(wèn)題詳解
這篇文章主要為大家介紹了java圖論普利姆算法及克魯斯卡算法解決最小生成樹問(wèn)題的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-11-11
Spring Bean Scope 有狀態(tài)的Bean與無(wú)狀態(tài)的Bean
這篇文章主要介紹了Spring Bean Scope 有狀態(tài)的Bean與無(wú)狀態(tài)的Bean,每個(gè)用戶有自己特有的一個(gè)實(shí)例,在用戶的生存期內(nèi),bean保持了用戶的信息,下面來(lái)了解有狀態(tài)和無(wú)狀態(tài)的區(qū)別吧2022-01-01
如何使用Jenkins構(gòu)建GIT+Maven項(xiàng)目
這篇文章主要介紹了如何使用Jenkins構(gòu)建GIT+Maven項(xiàng)目,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09
SpringCloud Config統(tǒng)一配置中心問(wèn)題分析解決與客戶端動(dòng)態(tài)刷新實(shí)現(xiàn)
springcloud config是一個(gè)解決分布式系統(tǒng)的配置管理方案。它包含了 client和server兩個(gè)部分,server端提供配置文件的存儲(chǔ)、以接口的形式將配置文件的內(nèi)容提供出去,client端通過(guò)接口獲取數(shù)據(jù)、并依據(jù)此數(shù)據(jù)初始化自己的應(yīng)用2022-10-10
Java中關(guān)鍵字final finally finalize的區(qū)別介紹
這篇文章主要給大家分享的是 Java中final,finally,finalize 到底有什么區(qū)別,文章圍繞final,finally,finalize的相關(guān)資料展開詳細(xì)內(nèi)容,具有一定的參考的價(jià)值,需要的朋友可以參考一下2022-04-04
解決mapstruct在eclipse生成不了mapper的實(shí)現(xiàn)類問(wèn)題
這篇文章主要介紹了解決mapstruct在eclipse生成不了mapper的實(shí)現(xiàn)類問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11
詳解基于Spring Data的領(lǐng)域事件發(fā)布
這篇文章主要介紹了詳解基于Spring Data的領(lǐng)域事件發(fā)布,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04

