赞
踩
Spring Boot中的拦截器是一种用于在处理请求之前或之后执行特定操作的组件。拦截器通常用于实现对请求进行预处理、日志记录、权限验证等功能。
在Spring Boot中,可以使用HandlerInterceptor
接口来定义自己的拦截器,并通过配置进行注册和使用。以下是使用拦截器的基本步骤:
HandlerInterceptor
接口的拦截器类,实现其中的方法,例如preHandle
用于在请求处理之前执行操作,postHandle
用于在请求处理之后执行操作,afterCompletion
用于在视图渲染之后执行操作。WebMvcConfigurerAdapter
并重写addInterceptors
方法来注册拦截器。addInterceptors
方法中,使用registry.addInterceptor()
来添加拦截器,并通过addPathPatterns
指定要拦截的路径模式,也可以使用excludePathPatterns
排除某些路径。日志记录:拦截器可以在请求到达控制器之前或之后记录请求信息,如请求URL、请求参数、处理时间等,用于日志记录和统计。
权限验证:拦截器可以对用户的访问进行权限验证,比如判断用户是否登录、是否具有操作权限等。如果权限验证失败,拦截器可以返回相应的错误信息或重定向到登录页面。
请求参数处理:拦截器可以对请求参数进行预处理,如对参数进行校验、转换、加密等操作。这样可以减轻控制器的负担,使请求处理更加高效。
缓存管理:拦截器可以根据请求的路径或参数判断是否需要从缓存中获取数据,从而提高系统性能。
统一异常处理:拦截器可以拦截控制器方法的执行结果,对异常进行统一处理,如返回自定义的错误信息、记录错误日志等。
在 Spring Boot 项目中,使用拦截器功能通常需要以下 2 步:
1. 创建拦截器类:Interceptor
@Component public class Interceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { System.out.println("进入拦截器了"); //中间写逻辑代码,比如判断是否登录成功,失败则返回false return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) { // System.out.println("controller 执行完了"); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { System.out.println("我获取到了一个返回的结果:"+response); System.out.println("请求结束了"); } }
2、拦截器注入适配器:InterceptorWebConfig
@Configuration
public class InterceptorWebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new Interceptor())
.addPathPatterns("/**");//拦截所有
// .excludePathPatterns("/ayo/hhy1");
}
}
·····
代码解释说明:
WebMvcConfigurer
接口可以自定义一个适配器,也可以通过继承WebMvcConfigurerAdapter
来定义适配器,建议使用第一种,第二种已经是过时的方法了。addInterceptors
方法,addInterceptor
方法是将拦截器注入到适配器中。 addPathPatterns
方法是设置一个需要拦截的路径,可以是多个字符串或者是直接传入一个数组。 excludePathPatterns
是配置不需要拦截的路径。configuration
注解说明这是一个配置类,在项目启动的时候自动执行。执行结果:
归属不同:Filter
属于Servlet技术,Interceptor
属于SpringMVC
技术
拦截器内容不同:Filter对所有访问进行增强(在Tomcat
服务器进行配置),Interceptor
仅针对SpringMVC
的访问进行增强
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。