SpringBoot中如何使用攔截器(過濾器)?
阿新 • • 發佈:2019-02-18
專案開發中經常要用到攔截器(過濾器)來處理一些全域性事件邏輯,之前在springt專案中寫了個ip攔截器,用於限定介面的訪問頻率,現在把邏輯轉移到SpringBoot中,其實基本一樣,只是把攔截器在xml中的配置轉移到了註解。
自定義攔截器並完成其邏輯
@Component
public class AccessLimitInterceptor extends HandlerInterceptorAdapter {
private static Logger log = LoggerFactory.getLogger(AccessLimitInterceptor.class);
/* 實現preHandle方法,攔截每次請求之前的動作,返回true表示進入下一個過濾器(如果有下一個)*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
log.info("攔截器 被呼叫");
//省略具體的邏輯
return true;
}
}
新建配置類,把自定義的攔截器加入配置,要實現WebMvcConfigurer介面或繼承WebMvcConfigurerAdapter類。
這裡要注意的是,原來常常使用的WebMvcConfigurerAdapter類官網已經不再推薦使用(Spring5.0及SpringBoot2.0以後),原始碼裡面已用@Deprecated標識,我這裡直接實現WebMvcConfigurer介面,把自定義攔截器顯式新增進配置即可,如上就可以順利使攔截器生效了。@Configuration public class WebConfig implements WebMvcConfigurer { @Autowired private AccessLimitInterceptor accessLimitInterceptor; @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(accessLimitInterceptor); } }