SpringBoot中如何使用拦截器(过滤器)?

项目开发中经常要用到拦截器(过滤器)来处理一些全局事件逻辑,之前在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类。

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Autowired
    private AccessLimitInterceptor accessLimitInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(accessLimitInterceptor);
    }
}
这里要注意的是,原来常常使用的WebMvcConfigurerAdapter类官网已经不再推荐使用(Spring5.0及SpringBoot2.0以后),源码里面已用@Deprecated标识,我这里直接实现WebMvcConfigurer接口,把自定义拦截器显式添加进配置即可,如上就可以顺利使拦截器生效了。

猜你喜欢

转载自blog.csdn.net/fanrenxiang/article/details/80833222