简介
拦截器可以根据 URL 对请求进行拦截,主要应用于登陆校验、权限验证、乱码解决、性能监控和异常处理等功能。
使用步骤
在SpringBoot中使用拦截器功能通常需要以下3步:
- 定义拦截器
- 注册拦截器
- 指定拦截规则
定义拦截器
在SpringBoot中定义拦截十分简单,只需要定义一个拦截类,并实现HandlerInterceptor
接口,如下:
@Component
public class RequestInterceptor implements HandlerInterceptor {
/**
* 目标方法执行前
* 该方法在控制器处理请求方法前执行,其返回值表示是否中断后续操作
* 返回true 表示继续向下执行,返回false 表示中断后续操作
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("这是在到达Controller请求前");
return true;
}
/**
* 目标方法执行后
* 该方法在控制器处理诅求方法调用之后,解析视图之前执行
* 可以通过此方法对请求域中的模型和视图做进一步修改
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
System.out.println("目标方法执行后");
}
/**
* 页面渲染后
* 该方法在视图渲染结束后执行
* 可以通过此方法实现资源清理,记录日志信息等工作
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
System.out.println("完成页面渲染后");
}
}
注册拦截器
创建一个实现了 WebMvcConfigurer 接口的配置类(使用了 @Configuration 注解的类),重写 addInterceptors() 方法,并在该方法中调用 registry.addInterceptor() 方法将自定义的拦截器注册到容器中。
@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new RequestInterceptor());
}
}
指定拦截规则
修改 MyMvcConfig 配置类中 addInterceptors() 方法的代码,继续指定拦截器的拦截规则,代码如下。
@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new RequestInterceptor())
.addPathPatterns("/**") //拦截所有请求,包括静态资源文件
.excludePathPatterns("/", "/login", "index.html", "/css/**", "images/**", "/js/**"); // 放行靜态资源
}
}
至此,拦截器的基本功能已经完成。
原创文章,作者:jiafegn,如若转载,请注明出处:https://www.techlearn.cn/archives/617