Spring-boot過濾器Filter使用

1. 定義自己的過濾器

Spring-boot中的過濾器需要實(shí)現(xiàn)javax.servlet.Filter的接口,接口提供了三個(gè)重載方法,分別為init,doFilter,destroy,其中過濾的邏輯放在doFilter中,且必須實(shí)現(xiàn)這個(gè)方法。

TestFilter.java

package com.seasky.servicesitespring.filter;


import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import javax.servlet.*;
import java.io.IOException;

public class TestFilter implements Filter {
    private static final Logger logger = LogManager.getLogger();//僅用于輸出日志

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        logger.info("TestFilter init");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        //過濾邏輯,這里獲取了發(fā)送請(qǐng)求的地址
        String remoteHost = servletRequest.getRemoteHost();
        logger.info("TestFilter filter: " + remoteHost);
        //這里繼續(xù)下一個(gè)過濾器
        filterChain.doFilter(servletRequest, servletResponse);
    }

    @Override
    public void destroy() {
        logger.info("TestFilter destroy");
    }
}

2.注冊(cè)過濾器容器配置

根據(jù)spring-boot提供的注冊(cè)組件進(jìn)行過濾器注冊(cè),可新建一個(gè)注冊(cè)文件FilterConfig.java用于注冊(cè)自定義的過濾器

FilterConfig.java

package com.seasky.servicesitespring.config;

import com.seasky.servicesitespring.filter.MyFilter;
import com.seasky.servicesitespring.filter.TestFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

//添加Configure注解用于spring-boot啟動(dòng)時(shí)掃描
@Configuration
public class FilterConfig {
    /**
     * 注冊(cè)第三方過濾器
     * 功能與spring mvc中通過配置web.xml相同
     * 可以添加過濾器所攔截的 URL,攔截更加精準(zhǔn)靈活
     * @return
     */
    @Bean
    public FilterRegistrationBean testFilterRegistration() {
        FilterRegistrationBean registration = new FilterRegistrationBean();
        registration.setFilter(new TestFilter());
        // 過濾應(yīng)用程序中所有資源,當(dāng)前應(yīng)用程序根下的所有文件包括多級(jí)子目錄下的所有文件,注意這里*前有“/”
        registration.addUrlPatterns("/*");
        //可自定義初始參數(shù)
        registration.addInitParameter("paramName", "paramValue");
        registration.setName("TestFilter");
        // 過濾器順序,數(shù)字越小約先執(zhí)行
        registration.setOrder(1);
        return registration;
    }
}

由于spring-boot啟動(dòng)時(shí)會(huì)自動(dòng)掃描并注入Configure注解下的Bean,因此通過注冊(cè)配置之后,過濾器就已經(jīng)可以生效了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容