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配置过滤器的例子就完成了。

如果该文章有帮助到您,就留言点个赞吧!您的支持与肯定是我持续更新最大的动力。

你可能感兴趣的:(spring,boot,系列)