SpringBoot​​​​​​​自定义拦截器


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可以自动拦截接口,在请求接口时通过拦截器验证权限。