在項目開發中,時常會遇到需要對某個接口或者某個請求或者某些場景做特殊處理,這個時候,就可以採取配置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配置過濾器的例子就完成了。
如果該文章有幫助到您,就留言點個贊吧!您的支持與肯定是我持續更新最大的動力。