在开发Web应用时,经常需要对请求进行过滤和拦截,以实现一些特定的功能,比如身份验证、权限控制等。Spring Boot提供了全局和自定义拦截器的支持,使得我们可以很方便地对请求进行拦截和处理。
全局拦截器
全局拦截器是指应用中对所有请求都进行拦截的拦截器。Spring Boot提供了WebMvcConfigurer
接口,我们可以通过实现该接口来定义全局拦截器。
首先,我们需要创建一个实现了HandlerInterceptor
接口的拦截器类,并实现其中的方法,例如preHandle()
、postHandle()
和afterCompletion()
。
@Component
public class GlobalInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 在请求处理之前进行拦截处理
// ...
return true; // 返回true表示继续处理请求,返回false表示中断请求处理
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
// 在请求处理完成后进行拦截处理
// ...
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
// 在请求完成之后进行拦截处理
// ...
}
}
接下来,我们需要创建一个实现了WebMvcConfigurer
接口的配置类,并重写其中的addInterceptors()
方法,将全局拦截器注册进去。
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
@Autowired
private GlobalInterceptor globalInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(globalInterceptor)
.addPathPatterns("/**"); // 拦截所有请求
}
}
这样,全局拦截器就注册成功了。当应用接收到任何请求时,都会被这个全局拦截器拦截并进行处理。
自定义拦截器
除了全局拦截器,我们还可以根据具体的需求自定义拦截器,只对需要的请求进行拦截。自定义拦截器的使用也非常简单。
首先,我们需要创建一个实现了HandlerInterceptor
接口的拦截器类,并实现其中的方法。
@Component
public class CustomInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 在请求处理之前进行拦截处理
// ...
return true; // 返回true表示继续处理请求,返回false表示中断请求处理
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
// 在请求处理完成后进行拦截处理
// ...
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
// 在请求完成之后进行拦截处理
// ...
}
}
接下来,我们需要创建一个实现了WebMvcConfigurer
接口的配置类,并重写其中的addInterceptors()
方法,将自定义拦截器注册进去。
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
@Autowired
private CustomInterceptor customInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(customInterceptor)
.addPathPatterns("/admin/**"); // 只拦截以/admin开头的请求
}
}
这样,自定义拦截器就注册成功了。只有符合指定路径模式的请求才会被这个拦截器所拦截。
总结
在本文中,我们学习了如何使用Spring Boot实现全局拦截器和自定义拦截器。全局拦截器对所有请求进行拦截,而自定义拦截器可以根据需求对特定请求进行拦截。通过合理地配置拦截器,我们可以实现身份验证、权限控制、日志记录等功能,提高应用的安全性和可维护性。
本文来自极简博客,作者:时光旅者,转载请注明原文链接:SpringBoot2.x全局拦截器和自定义拦截器