添加拦截器
当我们需要在所有的请求处理之前,先做一些预处理,或者在请求处理之后做一些后续处理,或者在处理执行流程中如果有异常则执行一段出错逻辑,这时候我们可以使用Spring MVC的拦截器功能
事实上这个功能很常用,他的逻辑类似Spring的AOP,在所有的请求处理逻辑之上增加一些增强逻辑
HandlerInterceptor接口
首先创建一个拦截器类,并实现HandlerInterceptor
接口
public class MyInterceptor implements HandlerInterceptor {
}
实现了这个接口之后,我们可以看到可以重写三个方法
这三个方法都有默认实现,我们想要实现什么拦截效果,就重写对应的方法即可,首先介绍preHandle
方法
preHandle
方法是在请求处理方法之前执行的,他有一个布尔类型的返回参数,返回true则表示放行该请求,返回false则拦截该请求,我们常使用这个功能来做简单的鉴权功能
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("执行前置处理方法");
System.out.println(request.getRequestURI());
return true;
}
}
参数列表中的HttpServletRequest
类可以帮助获取到被拦截的请求的请求信息,用于定制拦截逻辑
当我们返回false值时,拦截器拦截该请求,这个时候浏览器会得到一个空白页面,这个时候可以用参数列表中的HttpServletResponse
类来设置页面转发或重定向到登录页面或者初始页面
注册拦截器
创建完拦截器之后,我们需要在Spring MVC配置类中添加这个拦截器,这样拦截器才能生效
重写WebMvcConfigurer
接口中的addInterceptors
方法来注册拦截器,然后用addPathPatterns
方法来绑定需要拦截的请求,如果需要拦截所有的请求,可以使用/**