SpringBoot学习笔记12 - Interceptor应用

1、定义拦截器


通过实现接口HandlerInterceptor,并重写其中方法去定义拦截器,接口内容如下:

public interface HandlerInterceptor {
    default boolean preHandle(HttpServletRequest request, HttpServletResponse response,
    						  Object handler) throws Exception {
        return true;
    }

    default void postHandle(HttpServletRequest request, HttpServletResponse response,
    						Object handler, @Nullable ModelAndView modelAndView)
    						throws Exception {
    }

    default void afterCompletion(HttpServletRequest request, HttpServletResponse response,
    							 Object handler, @Nullable Exception ex
    							 ) throws Exception {
    }
}

在这里插入图片描述
通过选择性地实现接口HandlerInterceptor中的方法来定义拦截器:

public class FirstInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
                             Object handler) throws Exception {
        System.out.println("执行拦截器[FirstInterceptor], uri: " + request.getRequestURI());
        return true;
    }
}
public class OtherInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
                             Object handler) throws Exception {
        System.out.println("执行拦截器[OtherInterceptor], uri: " + request.getRequestURI());
        return true;
    }
}

2、配置拦截器


在这里插入图片描述

// WebMvcConfigurationSupport充当了原来的Spring配置文件,所以需要使用@Configuration进行注解
@Configuration
public class MyWebMvcConfiguration extends WebMvcConfigurationSupport {
    @Override
    protected void addInterceptors(InterceptorRegistry registry) {
    	// 拦截并处理所有 /intercept/first/ 开头的请求
        registry.addInterceptor(new FirstInterceptor())
                .addPathPatterns("/intercept/first/**");
        // 拦截并处理所有非 /intercept/first/ 开头的请求
        registry.addInterceptor(new OtherInterceptor())
                .excludePathPatterns("/intercept/first/**");
    }
}

3、定义Controller并测试


在这里插入图片描述

@RestController
@RequestMapping("/intercept")
public class DemoController {
    @GetMapping("/first/demo")
    public String firstIntercept() {
        return "First Intercept method";
    }

    @GetMapping("/second/demo")
    public String secondIntercept() {
        return "Second Intercept method";
    }

    @GetMapping("/third/demo")
    public String thirdIntercept() {
        return "Third Intercept method";
    }
}

启动项目并测试:

  • addPathPatterns

    在这里插入图片描述

  • excludePathPatterns

    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值