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

在springboot中注入FilterRegistrationBean不生效的原因

 更新時(shí)間:2021年08月12日 09:27:30   作者:JAVA碼上飄  
這篇文章主要介紹了在springboot中注入FilterRegistrationBean不生效的原因及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

springboot注入FilterRegistrationBean不生效

回顧

最近自定義了兩個(gè)過(guò)濾器,接口請(qǐng)求返回加密和sql注入處理過(guò)濾器,因?yàn)樵诜庋b一些工具包,我在單獨(dú)調(diào)好之后,就打算做成一個(gè)注解,像springboot啟動(dòng)類(lèi)上加@EnableScheduling一樣,可以隨意控制,當(dāng)我不想讓這倆過(guò)濾器生效的時(shí)候,那就不加這個(gè)注解就可以了。

當(dāng)然我想到了FilterRegistrationBean的使用方法,注入這兩個(gè)過(guò)濾器。

但是當(dāng)我寫(xiě)完之后,打成包之后,發(fā)現(xiàn)只有sql注入過(guò)濾器生效。

原因

原因就是我通過(guò)@Bean注解注入FilterRegistrationBean時(shí),沒(méi)有對(duì)它們起別名,造成沖突,只能注入一個(gè)。

我的工程里,寫(xiě)了兩個(gè)下邊的方法:

注入加密過(guò)濾器

 /**
     * @return 注入加密過(guò)濾器
     */
    @Bean
    public FilterRegistrationBean filterRegistration() {
        FilterRegistrationBean registration = new FilterRegistrationBean();
        registration.setFilter(new EncryptionFilter());
        registration.addUrlPatterns("/*");
        registration.setName("encryptionFilter");
        registration.setOrder(1);
        return registration;
    }

注入sql注入過(guò)濾器

/**
     * @return 注入加密過(guò)濾器
     */
    @Bean
    public FilterRegistrationBean filterRegistration() {
        FilterRegistrationBean registration = new FilterRegistrationBean();
        registration.setFilter(new SqlInjectManagerFilter());
        registration.addUrlPatterns("/*");
        registration.setName("sqlInjectManagerFilter");
        registration.setOrder(2);
        return registration;
    }

這個(gè)問(wèn)題雖然簡(jiǎn)單,但是確實(shí)影響到我思路了,我最初一直在考慮是不是我做的springboot啟動(dòng)類(lèi)加注解觸發(fā)過(guò)濾器注入的方式不對(duì),也是因?yàn)槲铱戳讼翤EnableTransactionManagement的注入方式,我差點(diǎn)就懷疑@Import在打成工具包后不能多個(gè)使用的問(wèn)題。尷尬~~~

當(dāng)我一比較這倆方法的時(shí)候,我才懷疑到名字沖突了。因此就分別對(duì)它們加了名稱(chēng)如下:

 /**
     * @return 注入加密過(guò)濾器
     */
    @Bean(name = "encryptionFilter")
    public FilterRegistrationBean filterRegistration() {
        FilterRegistrationBean registration = new FilterRegistrationBean();
        registration.setFilter(new EncryptionFilter());
        registration.addUrlPatterns("/*");
        registration.setName("encryptionFilter");
        registration.setOrder(1);
        return registration;
    }
 /**
     * @return 注入加密過(guò)濾器
     */
    @Bean(name = "sqlInjectManagerFilter")
    public FilterRegistrationBean filterRegistration() {
        FilterRegistrationBean registration = new FilterRegistrationBean();
        registration.setFilter(new SqlInjectManagerFilter());
        registration.addUrlPatterns("/*");
        registration.setName("sqlInjectManagerFilter");
        registration.setOrder(2);
        return registration;
    }

springboot @webfilter FilterRegistrationBean「T」

1、@webfilter過(guò)濾指定url

在啟動(dòng)類(lèi)加注解@ServletComponentScan

2、Filter類(lèi):

import java.io.IOException; 
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter; 
@WebFilter(urlPatterns="/task")
public class DemoFilter 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("Filter demo task");
		chain.doFilter(request, response);
	}
 
	@Override
	public void destroy() {		
	} 
}

3、@webfilter過(guò)濾全部路徑

在filter類(lèi)上加 @Component 或 @Configuration 注解:

4、FilterRegistrationBean<T> 過(guò)濾指定url 或 全部路徑

直接在FilterRegistrationBean<T>中配置即可:

import org.apache.catalina.filters.RemoteIpFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; 
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException; 
@Configuration
public class ConfigurationFilter {
	
    @Bean
    public RemoteIpFilter remoteIpFilter() {
        return new RemoteIpFilter();
    }
 
    @Bean
    public FilterRegistrationBean<MyFilter> testFilterRegistration() {
        FilterRegistrationBean<MyFilter> registration = new FilterRegistrationBean<MyFilter>();
        registration.setFilter(new MyFilter());//添加過(guò)濾器
        registration.addUrlPatterns("/user");//設(shè)置過(guò)濾路徑,/*所有路徑
        //registration.addInitParameter("name", "alue");//添加默認(rèn)參數(shù)
        registration.setName("MyFilter");//設(shè)置優(yōu)先級(jí)
        registration.setOrder(2);//設(shè)置優(yōu)先級(jí)
        return registration;
    }
 
    public class MyFilter implements Filter {
        @Override
        public void destroy() {
        }
 
        @Override
        public void doFilter(ServletRequest srequest, ServletResponse sresponse, FilterChain
                filterChain)
                throws IOException, ServletException {
            HttpServletRequest request = (HttpServletRequest) srequest;
            System.out.println("this is MyFilter,url :" + request.getRequestURI());
            filterChain.doFilter(srequest, sresponse);
        }
 
        @Override
        public void init(FilterConfig arg0) throws ServletException {
        }
    }
}

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java實(shí)現(xiàn)駝峰和下劃線互相轉(zhuǎn)換的示例代碼

    Java實(shí)現(xiàn)駝峰和下劃線互相轉(zhuǎn)換的示例代碼

    Java對(duì)各種變量、方法和類(lèi)等要素命名時(shí)使用的字符序列稱(chēng)為標(biāo)識(shí)符,凡是自己可以起名字的地方都叫標(biāo)識(shí)符。本文為大家分享了Java中如何實(shí)現(xiàn)駝峰命名與下劃線命名的互轉(zhuǎn),感興趣的可以了解一下
    2022-05-05
  • Java數(shù)據(jù)結(jié)構(gòu)之Map與Set專(zhuān)篇講解

    Java數(shù)據(jù)結(jié)構(gòu)之Map與Set專(zhuān)篇講解

    這篇文章通過(guò)實(shí)例面試題目來(lái)講解Java中Map和Set之間的關(guān)系,具有很好的參考價(jià)值,Map與Set在面試中經(jīng)常會(huì)遇到。一起跟隨小編過(guò)來(lái)看看吧
    2022-01-01
  • Spring底層核心源碼原理解析

    Spring底層核心源碼原理解析

    這篇文章主要介紹了Spring底層核心源碼原理解析,當(dāng)在某個(gè)方法上加了@Transactional注解后,就表示該方法在調(diào)用時(shí)會(huì)開(kāi)啟Spring事務(wù),而這個(gè)方法所在的類(lèi)所對(duì)應(yīng)的Bean對(duì)象會(huì)是該類(lèi)的代理對(duì)象,需要的朋友可以參考下
    2023-09-09
  • 一篇文章帶你深入了解Java基礎(chǔ)(2)

    一篇文章帶你深入了解Java基礎(chǔ)(2)

    這篇文章主要給大家介紹了關(guān)于Java中方法使用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08
  • JAVA對(duì)象分析之偏向鎖、輕量級(jí)鎖、重量級(jí)鎖升級(jí)過(guò)程

    JAVA對(duì)象分析之偏向鎖、輕量級(jí)鎖、重量級(jí)鎖升級(jí)過(guò)程

    這篇文章主要介紹了JAVA對(duì)象分析之偏向鎖、輕量級(jí)鎖、重量級(jí)鎖升級(jí)過(guò)程,又對(duì)這方面感興趣的同學(xué)可以跟著一起研究下
    2021-02-02
  • Spring?cloud網(wǎng)關(guān)gateway進(jìn)行websocket路由轉(zhuǎn)發(fā)規(guī)則配置過(guò)程

    Spring?cloud網(wǎng)關(guān)gateway進(jìn)行websocket路由轉(zhuǎn)發(fā)規(guī)則配置過(guò)程

    這篇文章主要介紹了Spring?cloud網(wǎng)關(guān)gateway進(jìn)行websocket路由轉(zhuǎn)發(fā)規(guī)則配置過(guò)程,文中還通過(guò)實(shí)例代碼介紹了Spring?Cloud?Gateway--配置路由的方法,需要的朋友可以參考下
    2023-04-04
  • Java編碼摘要算法實(shí)例解析

    Java編碼摘要算法實(shí)例解析

    這篇文章主要介紹了Java編碼摘要算法實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • 一個(gè)牛人給Java初學(xué)者的建議(必看篇)

    一個(gè)牛人給Java初學(xué)者的建議(必看篇)

    下面小編就為大家?guī)?lái)一篇一個(gè)牛人給Java初學(xué)者的建議(必看篇)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • idea沒(méi)有services窗口、沒(méi)有springboot啟動(dòng)項(xiàng)問(wèn)題

    idea沒(méi)有services窗口、沒(méi)有springboot啟動(dòng)項(xiàng)問(wèn)題

    這篇文章主要介紹了idea沒(méi)有services窗口、沒(méi)有springboot啟動(dòng)項(xiàng)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • IDEA設(shè)置Maven自動(dòng)編譯model的實(shí)現(xiàn)方法

    IDEA設(shè)置Maven自動(dòng)編譯model的實(shí)現(xiàn)方法

    本文主要介紹了IDEA設(shè)置Maven自動(dòng)編譯model的實(shí)現(xiàn)方法, maven結(jié)構(gòu)的項(xiàng)目,我們?cè)诿看涡薷拇a后都會(huì)需要手動(dòng)編譯,本文就可以解決這個(gè)問(wèn)題,感興趣的可以了解一下
    2023-08-08

最新評(píng)論