springMVC中的请求拦截器

时间:2024-10-29 07:05:20

在Spring MVC中,请求拦截器(Interceptor)是一种可以用来拦截用户的请求,并进行一些预处理或后处理的机制。它主要用于实现诸如权限检查、记录日志、修改请求或响应等方面的功能。

要使用Spring MVC的拦截器,你需要创建一个实现了HandlerInterceptor接口的类,并且重写以下方法:

  1. preHandle 方法:在控制器方法执行之前调用,可以用来做权限检查或其他预处理工作。如果返回true,则继续执行下一个拦截器或控制器方法;如果返回false,则停止后续操作。

  2. postHandle 方法:在控制器方法执行之后,但在视图渲染之前调用。可以用来修改模型数据或者设置视图属性等。

  3. afterCompletion 方法:在整个请求完成后调用,即在视图渲染之后。通常用于资源清理或者记录日志等操作。

下面是一个简单的拦截器示例:

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

public class SampleInterceptor extends HandlerInterceptorAdapter {

    @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 {
        // 在这里可以在视图渲染前做些事情,如修改ModelAndView对象
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        // 在这里可以做一些清理工作,如关闭打开的资源等
    }
}

创建了拦截器之后,还需要在Spring MVC的配置文件中注册它。可以通过<mvc:interceptors>标签或者通过WebMvcConfigurer接口来配置拦截器。

例如,在Java配置方式下:

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new SampleInterceptor())
                .addPathPatterns("/**") // 指定拦截规则
                .excludePathPatterns("/login", "/error"); // 排除某些路径
    }
}

这样,当请求匹配到指定的路径模式时,就会被定义好的拦截器所拦截并执行相应的方法。