与 Spring 拦截器相比,Spring MVC 拦截器可以在内部获取 HttpServletRequest 和 HttpServletResponse 等 Web 对象实例。
Spring MVC 拦截器的顶级接口是:HandlerInterceptor,它包含三个方法:
- preHandle:在目标方法执行前执行。
- postHandle:在目标方法执行后执行。
- afterCompletion:在请求完成时执行。
为了方便起见,在一般情况下,我们通常使用 HandlerInterceptor 接口的实现类 HandlerInterceptorAdapter。
如果存在权限认证、日志记录和统计等场景,可以使用此拦截器。
第一步,通过继承 HandlerInterceptorAdapter 类定义一个拦截器:
public class AuthInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String requestUrl = request.getRequestURI();
if (checkAuth(requestUrl)) {
returntrue;
}
returnfalse;
}
private boolean checkAuth(String requestUrl) {
System.out.println("===Authority Verification===");
returntrue;
}
}
第二步,在 Spring 容器中注册此拦截器。
@Configuration
public class WebAuthConfig extends WebMvcConfigurerAdapter {
@Bean
public AuthInterceptor getAuthInterceptor() {
return new AuthInterceptor();
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new AuthInterceptor());
}
}
随后,当请求接口时,Spring MVC 可以通过此拦截器自动拦截接口并验证权限。