SpringBoot配置Filter過濾器

在項目開發中,時常會遇到需要對某個接口或者某個請求或者某些場景做特殊處理,這個時候,就可以採取配置springBoot過濾器Filter進行解決處理,話不多說,下面直接上代碼。

1、定義過濾器

這裏我舉一個短信發送攔截過濾器的例子,大家自行參考

public class SmsSendFilter implements Filter {
	
	/** 允許請求的Referer */ 
	@Value("${sms.send.smsSendReferer}")
	private String smsSendReferer; 
	
    private static final org.slf4j.Logger logger = LoggerFactory.getLogger(SmsSendFilter.class);

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    	logger.info("短信發送過濾器啓動=====");
    }
    
    

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest httpRequest = (HttpServletRequest) servletRequest;
        HttpServletResponse httpResponse = (HttpServletResponse) servletResponse;
        logger.info("短信發送過濾=====start");
        
        String address1=httpRequest.getRequestURL().toString();  //獲取當前頁面的地址
        
        //獲取瀏覽器Referer
        String referer = httpRequest.getHeader("Referer");
        if(referer == null) {
        	referer = "";
        }
        // Referer 匹配
        if(referer.equals(smsSendReferer)) {//正常
        	chain.doFilter(httpRequest, httpResponse);
            return;
        }else {//錯誤
        	httpRequest.getRequestDispatcher("/error/404.html").forward(httpRequest, httpResponse);
        }
    }

    @Override
    public void destroy() {

    }

}

其實就是實現Filter接口,重寫doFilter方法。

2、配置過濾器
過濾器定義好了之後,我們還需要將他配置到spring容器中去

import javax.servlet.Filter;

import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class APIConfig {
	
    
    /**
     * 配置過濾器
     * @return
     */
    @Bean
    public FilterRegistrationBean someFilterRegistration() {
        FilterRegistrationBean registration = new FilterRegistrationBean();
        registration.setFilter(smsSendFilter());
        registration.addUrlPatterns("/web/sms/send");//攔截的請求 /* 攔截所有
        registration.setName("smsSendFilter");
        return registration;
    }

    /**
     * 創建一個bean
     * @return
     */
    @Bean(name = "smsSendFilter")
    public Filter smsSendFilter() {
        return new SmsSendFilter();
    }
}

OK,就這樣,一個簡單的springBoot配置過濾器的例子就完成了。

如果該文章有幫助到您,就留言點個贊吧!您的支持與肯定是我持續更新最大的動力。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章