SpringMVC拦截器

一、拦截器概述

        1、Spring MVC的拦截器(Interceptor)与Java Servlet的过滤器(Filter)类似,主要用于拦截用户的请求并做相应的处理。通常应用在权限验证、记录请求信息的日志、判断用户是否登录等功能上。

        2、定义拦截器可以通过两种方式:通过实现HandlerInterceptor接口和WebRequestInterceptor接口

1、HandlerInterceptor接口

   HandlerInterceptor接口是 Spring MVC 框架提供的拦截器接口之一,用于拦截处理器(Handler,通常指控制器)的执行过程,允许在请求处理的不同阶段执行自定义的逻辑。它是拦截器体系的核心接口之一,通过实现该接口,你可以在请求处理的各个阶段执行预处理和后处理操作。HandlerInterceptor接口里面有三个方法:preHandle(),postHandle(),afterCompletion()

public class TestInterceptor implements HandlerInterceptor{

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
System.out.println("preHandle方法在控制器的处理请求方法前执行");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
// TODO Auto-generated method stub
System.out.println("postHandle方法在控制器的处理请求方法调用之后,解析视图之前执行");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, 
Object handler, Exception ex)
throws Exception {
System.out.println("afterCompletion方法在控制器的处理请求方法执行完成之后执行,即渲染视图结束之后执行");
}
}

(1)、preHandle方法:该方法在控制器的处理请求方法前执行,其返回值表示是否中断后续操作,返回true表示继续向下执行,返回false表示中断后续操作,可以进行编码、安全控制、权限校验等处理。

(2)、postHandle方法:该方法在控制器的处理请求方法调用之后,解析视图之前执行,可以通过此方法对模型和视图做进一步的修改。

(3)、afterCompletion方法:该方法在控制器的处理请求方法执行完成后执行,即视图渲染结束后执行,可以通过此方法实现一些资源清理、记录日志等工作。

但是,让自定义的拦截器生效还需要在SpringMVC的配置文件中进行配置(配置文件方式):

<!-- 配置拦截器 -->
<mvc:interceptors>
<!-- 配置一个全局拦截器,拦截所有请求 -->
<bean class="interceptor.TestInterceptor"></bean>
<!-- 定义指定路径的拦截器 -->
<mvc:interceptor>
<!-- 配置拦截器执行拦截的路径 , /**表示拦截所有请i去 -->
<mvc:mapping path="/**"/>
<!-- 配置不需要拦截的路径 -->
<mvc:exclude-mapping path="/login"/>
<!-- 定义在 mvc:interceptor中,表示匹配指定路径的请求才被拦截-->
<bean class="interceptor.LoginInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>

(1)、<mvc:interceptors>元素用于配置一组拦截器,其子元素<bean>定义的是全局拦截器,即拦截所有请求。

(2)、<mvc:interceptor>元素定义指定路径的拦截器,其子元素<mvc:mapping>用于配置拦截器作用的路径,该路径在path中定义。

(3)、<mvc:exclude-mapping>用于配置不需要拦截的路径。

2、WebRequestInterceptor接口

  WebRequestInterceptor接口是 Spring MVC 提供的一种拦截器,用于在处理请求的不同阶段执行自定义逻辑。它是 Spring MVC 拦截器体系中的一部分,可以用于在请求处理的各个阶段进行预处理和后处理操作。

public class TestInterceptor implements WebRequestInterceptor {
    @Override
    public boolean preHandle(WebRequest request) throws Exception {
        // 在请求处理之前执行的逻辑
        return true; // 继续执行后续的拦截器和处理器
    }

    @Override
    public void postHandle(WebRequest request, ModelMap model) throws Exception {
        // 在请求处理之后、视图渲染之前执行的逻辑
    }

    @Override
    public void afterCompletion(WebRequest request, Exception ex) throws Exception {
        // 在整个请求处理完成后执行的逻辑
    }
}

(1)、preHandle方法:在请求处理之前被调用。可以用于执行一些前置处理逻辑,比如日志记录、权限验证等。如果返回true,则继续执行后续的拦截器和处理器(控制器);如果返回false,则阻止请求继续执行。

(2)、postHandle方法:在请求处理之后、视图渲染之前被调用。可以用于对处理器的处理结果进行后处理(比如修改模型数据),但无法阻止请求继续执行。

(3)、afterCompletion方法:在整个请求处理完成后被调用。可以用于执行一些资源清理操作,比如释放资源、记录请求耗时等。

但是,让自定义的拦截器生效还需要在SpringMVCConfig.java中进行配置(注解方式):

@Configuration
@EnableWebMvc
@ComponentScan("com.gcxy.controller")
public class SpringMvcConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //登录拦截
        registry.addInterceptor(new LoginInterceptor())
                .addPathPatterns(new String[]{"/**"})
                .excludePathPatterns(new String[]{"/login","/register"});
        //日志拦截
        registry.addInterceptor(new LogInterceptor())
                .addPathPatterns(new String[]{"/**"});

    }
}

(1)、@Configuration:是一个 Spring Framework 提供的注解,用于标识一个类是配置类(Configuration Class)。在 Spring 应用中,配置类通常用于定义 bean 的创建和配置,以及其他与 Spring 容器相关的配置信息。当一个类被标记为@Configuration时,Spring 容器会识别该类,并在应用上下文中注册相应的 bean 定义。这意味着你可以在配置类中使用@Bean注解来定义 bean,并且可以使用其他注解来配置这些 bean。通常情况下,配置类会包含一些用 @Bean注解标注的方法,这些方法用于创建和配置 bean。这些方法的返回值就是所创建的 bean,而方法名就是 bean 的名称。

(2)、@EnableWebMvc是 Spring Framework 中用于启用基于注解的 Spring MVC 配置的注解。当你在配置类上使用@EnableWebMvc 注解时,它会启用默认的 Spring MVC 配置,并且允许你在配置类中进行自定义的 MVC 配置。具体来说,@EnableWebMvc注解会自动地注册一些关键的组件,比如 DefaultAnnotationHandlerMappingAnnotationMethodHandlerAdapterHttpRequestHandlerAdapter 等,这些组件是 Spring MVC 框架的核心部分,用于处理请求映射、注解驱动的控制器、HTTP 请求处理等。

  • 21
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值