spring 拦截器 HandlerInterceptor

简介: 简介 拦截器是基于web框架的调用,因此可以使用Spring的依赖注入(DI)进行一些业务操作。在SpringMVC中就是依赖于SpringMVC框架。在实现上基于Java的反射机制,属于面向切面编程(AOP)的一种运用。

简介

拦截器是基于web框架的调用,因此可以使用Spring的依赖注入(DI)进行一些业务操作。在SpringMVC中就是依赖于SpringMVC框架。在实现上基于Java的反射机制,属于面向切面编程(AOP)的一种运用。

主要工作场景

拦截器可以获取IOC容器中的各个bean,而过滤器就不行,所以在拦截器里注入一个service,可以调用业务逻辑。
拦截器只能对controller请求进行拦截,对其他的一些比如直接访问静态资源的请求则没办法进行拦截处理。

WebMvcConfigurerAdapter 比较常用的重写接口


/** 添加类型转换器和格式化器 */
public void addFormatters(FormatterRegistry registry)
/** 解决跨域问题 **/
public void addCorsMappings(CorsRegistry registry) ;
/** 配置消息转换器 */
public void configureMessageConverters(List<HttpMessageConverter<?>> converters)
/** 添加拦截器 **/
void addInterceptors(InterceptorRegistry registry);
/** 这里配置视图解析器 **/
void configureViewResolvers(ViewResolverRegistry registry);
/** 配置内容裁决的一些选项 **/
void configureContentNegotiation(ContentNegotiationConfigurer     configurer);
/** 视图跳转控制器 **/
void addViewControllers(ViewControllerRegistry registry);
/** 静态资源处理 **/
void addResourceHandlers(ResourceHandlerRegistry registry);
/** 默认静态资源处理器 **/
void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer);

#添加拦截器

 @Override
 public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(new ReqInterceptor()).addPathPatterns("/**");
}

实现自定义拦截器

public class ReqInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    System.out.println("拦截器--preHandle");
    return super.preHandle(request, response, handler);
}

@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    System.out.println("拦截器--postHandle");
    super.postHandle(request, response, handler, modelAndView);
}

@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    System.out.println("拦截器--afterCompletion");
    super.afterCompletion(request, response, handler, ex);
}

@Override
public void afterConcurrentHandlingStarted(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    System.out.println("拦截器--afterConcurrentHandlingStarted");
    super.afterConcurrentHandlingStarted(request, response, handler);
}
}

测试用例

@GetMapping("/filter/{id}")
public void filter(@PathVariable("id") Long id) {
    System.out.println("Controller方法--前");
    UserEntity userEntity = userService.findUserById(id);
    System.out.println("Controller方法--后");
}

运行结果

QQ_20190121145421

目录
相关文章
|
2月前
|
缓存 监控 Java
《深入理解Spring》拦截器(Interceptor)——请求处理的艺术
Spring拦截器是Web开发中实现横切关注点的核心组件,基于AOP思想,可在请求处理前后执行日志记录、身份验证、权限控制等通用逻辑。相比Servlet过滤器,拦截器更贴近Spring容器,能访问Bean和上下文,适用于Controller级精细控制。通过实现`HandlerInterceptor`接口的`preHandle`、`postHandle`和`afterCompletion`方法,可灵活控制请求流程。结合配置类注册并设置路径匹配与执行顺序,实现高效复用与维护。常用于认证鉴权、性能监控、统一异常处理等场景,提升应用安全性与可维护性。
|
存储 人工智能 Java
【图文详解】基于Spring AI的旅游大师应用开发、多轮对话、文件持久化、拦截器实现
【图文详解】基于Spring AI的旅游大师应用开发、多轮对话、文件持久化、拦截器实现
905 0
|
5月前
|
人工智能 安全 Java
Spring Boot 过滤器 拦截器 监听器
本文介绍了Spring Boot中的过滤器、拦截器和监听器的实现与应用。通过Filter接口和FilterRegistrationBean类,开发者可实现对请求和响应的数据过滤;使用HandlerInterceptor接口,可在控制器方法执行前后进行处理;利用各种监听器接口(如ServletRequestListener、HttpSessionListener等),可监听Web应用中的事件并作出响应。文章还提供了多个代码示例,帮助读者理解如何创建和配置这些组件,适用于构建更高效、安全和可控的Spring Boot应用程序。
640 0
|
9月前
|
Java 微服务 Spring
微服务——SpringBoot使用归纳——Spring Boot中使用拦截器——拦截器使用实例
本文主要讲解了Spring Boot中拦截器的使用实例,包括判断用户是否登录和取消特定拦截操作两大场景。通过token验证实现登录状态检查,未登录则拦截请求;定义自定义注解@UnInterception实现灵活取消拦截功能。最后总结了拦截器的创建、配置及对静态资源的影响,并提供两种配置方式供选择,帮助读者掌握拦截器的实际应用。
349 0
|
9月前
|
前端开发 JavaScript Java
微服务——SpringBoot使用归纳——Spring Boot中使用拦截器——拦截器的快速使用
本文介绍了在Spring Boot中使用拦截器的方法,包括拦截器的基本原理、定义与配置步骤。拦截器是AOP的一种实现,主要用于拦截对动态资源的请求,如判断用户权限或结合WebSocket使用。文章详细讲解了通过实现`HandlerInterceptor`接口来自定义拦截器,并重写`preHandle`、`postHandle`和`afterCompletion`三个核心方法。
1512 0
|
监控 Java 数据安全/隐私保护
如何用Spring Boot实现拦截器:从入门到实践
如何用Spring Boot实现拦截器:从入门到实践
681 5
|
Java API Spring
springboot学习七:Spring Boot2.x 拦截器基础入门&实战项目场景实现
这篇文章是关于Spring Boot 2.x中拦截器的入门教程和实战项目场景实现的详细指南。
308 0
springboot学习七:Spring Boot2.x 拦截器基础入门&实战项目场景实现
|
前端开发 JavaScript Java
Spring Boot中使用拦截器
本节主要介绍了 Spring Boot 中拦截器的使用,从拦截器的创建、配置,到拦截器对静态资源的影响,都做了详细的分析。Spring Boot 2.0 之后拦截器的配置支持两种方式,可以根据实际情况选择不同的配置方式。最后结合实际中的使用,举了两个常用的场景,希望读者能够认真消化,掌握拦截器的使用。
|
前端开发 Java 程序员
Spring Boot统一功能处理(拦截器, 统一数据返回格式, 统一异常处理)
Spring Boot统一功能处理(拦截器, 统一数据返回格式, 统一异常处理)
712 1
|
监控 前端开发 Java
Spring Boot中的拦截器配置
Spring Boot中的拦截器配置

热门文章

最新文章