Spring MVC的根拦截器相比可以等待获得Web对象实例的HttpServletRequest和HttpServletResponse。
Spring MVC拦截器的顶级接口是HandlerInterceptor,它包含三个方法。
- preHandle在目标方法被执行之前执行
- postHandle在目标方法执行完毕后执行
- afterCompletion在请求完成后执行。
为了方便起见,我们一般使用接口HandlerInterceptorAdapter的HandlerInterceptor实现类。如果有授权认证、日志和统计的场景,就可以使用这个拦截器。
在第一步中,继承的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)) { return true; } return false; } private boolean checkAuth(String requestUrl) { return true; } }
|
第二步是将拦截器注册到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可以自动拦截接口,在请求接口时通过拦截器验证权限。