Interceptor(拦截器)

本文详细介绍了Spring MVC框架中的拦截器(Interceptor)概念及其应用,包括如何定义和注册拦截器,以及它们在实际场景中的作用,如用户认证、权限过滤、日志记录等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Interceptor(拦截器)

拦截器是AOP实现的。

实现拦截器步骤:1、定义  2、注册

HandlerInterceptorAdapter与WebMvcConfigurerAdapter更方便些,不需要实现所有方法。

HandlerInterceptor与WebMvcConfigurer则需要实现所有方法

 定义一个拦截器

public class TokenInterceptor extends HandlerInterceptorAdapter {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("preHandler");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandler");
    }
}

注册拦截器 

@Configuration
public class MyWebMvcConfigurerAdapter extends WebMvcConfigurerAdapter {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new TokenInterceptor()).addPathPatterns("/user/*").excludePathPatterns("/user/getone2");
    }
}

这样就添加了一个拦截器。 拦截除/user/getone2以外的与/user/*匹配的域名,比如会拦截/user/getone1、/user/getone3。

(注:/user/test/test不拦截,/user/test/test匹配/user/*/*而不匹配/user/*)

 

 

应用:

1、用户是否存在。具体比如验证token在数据库中是否存在:不存在,表明用户不存在或登陆过期等,拒绝通过;存在,通过。

2、整个系统字符集编码

3、URL访问权限过滤

4、过滤敏感词信息

5、日志记录

6、等等

 

 

 

拦截器是AOP的一种实现,所以有多个拦截器顺序与AOP顺序是一样的。

AOP详见:https://blog.youkuaiyun.com/sunshine_YG/article/details/82705170

个人测试了三个拦截器,结果如下:

拦截器顺序测试代码:

public class Interceptor1 implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("=pre==="+this.getClass().getSimpleName());
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("=post==="+this.getClass().getSimpleName());
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("=after==="+this.getClass().getSimpleName());
    }
}

@Configuration
public class MyWebMvcConfigurer implements WebMvcConfigurer {
    @Override
    public void configurePathMatch(PathMatchConfigurer configurer) {

    }

    @Override
    public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {

    }

    @Override
    public void configureAsyncSupport(AsyncSupportConfigurer configurer) {

    }

    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {

    }

    @Override
    public void addFormatters(FormatterRegistry registry) {

    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
//        InterceptorRegistration registration = registry.addInterceptor(new TokenInterceptor());
//        registration.addPathPatterns("/*");
        InterceptorRegistration interceptor = registry.addInterceptor(new Interceptor1());
        interceptor.addPathPatterns("/*");
        InterceptorRegistration interceptor2 = registry.addInterceptor(new Interceptor2());
        interceptor2.addPathPatterns("/*");
        InterceptorRegistration interceptor3 = registry.addInterceptor(new Interceptor3());
        interceptor3.addPathPatterns("/*");
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {

    }

    @Override
    public void addCorsMappings(CorsRegistry registry) {

    }

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {

    }

    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {

    }

    @Override
    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {

    }

    @Override
    public void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> returnValueHandlers) {

    }

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {

    }

    @Override
    public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {

    }

    @Override
    public void configureHandlerExceptionResolvers(List<HandlerExceptionResolver> exceptionResolvers) {

    }

    @Override
    public void extendHandlerExceptionResolvers(List<HandlerExceptionResolver> exceptionResolvers) {

    }

    @Override
    public Validator getValidator() {
        return null;
    }

    @Override
    public MessageCodesResolver getMessageCodesResolver() {
        return null;
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值