SpringMVC拦截器的基本使用

简介: 1.拦截器(interceptor)的作用(1)SpringMVC的拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。(2)将拦截器按一定的顺序联结成一条链,这条链称为拦截器链(interceptor Chain)。在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。拦截器也是AOP思想的具体体现。

SpringMVC拦截器的基本使用



1.拦截器(interceptor)的作用


(1)SpringMVC的拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。


(2)将拦截器按一定的顺序联结成一条链,这条链称为拦截器链(interceptor Chain)。在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。拦截器也是AOP思想的具体体现。


2.拦截器和过滤器的区别


(1)使用范围:

①过滤器(Filter)是servlet规范中的一部分,任何JavaWeb工程都可以使用

②拦截器(interceptor)是SpringMVC框架自己的,只有使用了SpringMVC框架的工程才能使用


(2)拦截范围:

①过滤器(Filter)在url-pattern 中配置了 /* 之后,可以对所有要访问的资源进行拦截

②拦截器(interceptor)在<mvc:mapping path=" "/>中配置了 /** 之后,也可以对所有资源进行拦截,但是可以

通过<mvc:exclude-mapping path=" "/>标签排除不需要拦截的资源


3 HandlerInterceptor接口的方法


(1) preHandle()方法

该方法将在请求处理之前被调用。SpringMVC中的Interceptor是链式的调用,在一个应用或一个请求中

可以同时存在多个Interceptor。每个Interceptor的调用会依据它的声明顺序依次执行,而且最先执行的

都是Interceptor中的preHandle()方法,所以可以在这个方法中进行一些前置初始化操作或者是对当前

请求的一个预处理,也可以在这个方法中进行一些判断来决定请求是否要继续进行下去。该方法的返回

值是布尔值类型,当返回false时,表示请求结束,后续的Interceptor和Controller都不会再执行;当返

回值true时,就会继续调用下一个Interceptor的preHandle方法,如果已经是最后一个Interceptor的

时,就会调用当前请求的Controller方法。


(2) postHandle()方法

该方法将在当前请求进行处理之后,也就是Controller方法调用之后执行,但是它会在

DispatcherServlet进行视图返回渲染之前被调用,所以我们可以在这个方法中对Controller处理之后的

ModelAndView对象进行操作。postHandle方法被调用的方向跟preHandle是相反的,也就是说先声明

的Interceptor的postHandle方法反而会后执行。如果当前Interceptor的preHandle()方法返回值为

false,则此方法不会被调用。


(3) afterCompletion()方法

该方法将在整个当前请求结束之后,也就是在DispatcherServlet渲染了对应的视图之后执行。这个方法

的主要作用是用于进行资源清理工作。如果当前Interceptor的preHandle()方法返回值为false,则此方

法不会被调用。


4.拦截器的使用步骤


(1)创建拦截器类实现HandlerInterceptor接口


//定义处理器拦截器
public class LoginInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        if (request.getSession().getAttribute("uid") == null) {
            response.sendRedirect("/web/login.html");
            return false; // 返回false代表不放行
        }
        return true; // 返回true代表放行
    }
}


(2)配置拦截器


//注册处理器拦截器
@Configuration
public class LoginInterceptorConfigurer implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
//        创建拦截器对象
        HandlerInterceptor interceptor = new LoginInterceptor();
//        添加白名单
        List<String> patterns = new ArrayList<>();
        patterns.add("/bootstrap3/**");
        patterns.add("/css/**");
        patterns.add("/images/**");
        patterns.add("/js/**");
        patterns.add("/web/login.html");
        patterns.add("/web/register.html");
        patterns.add("/web/index.html");
        patterns.add("/web/product.html");
        patterns.add("/users/reg");
        patterns.add("/users/login");
        patterns.add("/districts/**");
        patterns.add("/products/**");
//        通过注册工具添加拦截器
        registry.addInterceptor(interceptor).addPathPatterns("/**").excludePathPatterns(patterns);
    }
}


①addInterceptor:需要一个实现HandlerInterceptor接口的拦截器实例

②addPathPatterns:用于设置拦截器的过滤路径规则;addPathPatterns(“/**”)对所有请求都拦截

③excludePathPatterns:用于设置不需要拦截的过滤规则


目录
相关文章
|
3月前
|
Java 容器
如何在SpringBoot项目中使用过滤器和拦截器
过滤器和拦截器是日常开发中常用技术,用于对特定请求进行增强处理,如插入自定义代码以实现特定功能。过滤器在请求到达 `servlet` 前执行,而拦截器在请求到达 `servlet` 后执行。`SpringBoot` 中的拦截器依赖于 `SpringBoot` 容器,过滤器则由 `servlet` 提供。通过实现 `Filter` 接口并重写 `doFilter()` 方法可实现过滤器;通过实现 `HandlerInterceptor` 接口并重写相应方法可实现拦截器。两者的主要区别在于执行时机的不同,需根据具体场景选择使用。
197 4
如何在SpringBoot项目中使用过滤器和拦截器
|
3月前
|
前端开发 Java Spring
springboot自定义拦截器的简单使用和一个小例子
本文介绍了如何在Spring Boot中创建和使用自定义拦截器,通过一个登录验证的示例,演示了拦截器在MVC流程中的preHandle、postHandle和afterCompletion三个环节的作用,并说明了如何在Spring Boot配置类中注册拦截器。
|
7月前
|
存储 调度
SpringMVC 拦截器开发详解
SpringMVC 拦截器开发详解
|
Java 数据安全/隐私保护
57SpringMVC - 拦截器案例
57SpringMVC - 拦截器案例
36 0
|
前端开发 Java 数据库连接
【SpringMVC】JSR 303与interceptor拦截器快速入门
JSR 303是Java规范请求(Java Specification Request)的缩写,意思是Java 规范提案。是指向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求。任何人都可以提交JSR,以向Java平台增添新的API和服务。JSR已成为Java界的一个重要标准。 JSR-303 是JAVA EE 6 中的一项子规范,叫做Bean Validation,Hibernate Validator 是 Bean Validation 的参考实现 . Hibe
|
Java 应用服务中间件 API
【SpringBoot】过滤器 | 拦截器
【SpringBoot】过滤器 | 拦截器
146 0
|
SQL 监控 前端开发
Springboot过滤器和拦截器详解及使用场景
过滤器和拦截器触发时机不一样,过滤器是在请求进入容器后,但请求进入servlet之前进行预处理的。请求结束返回也是,是在servlet处理完后,返回给前端之前。
QGS
|
存储 调度 数据安全/隐私保护
入门SpringMVC之Interceptor拦截器
SpringMVC中的Interceptor拦截器,它的主要作用是拦截指定的用户需求,并进行相应的预处理与后处理。
QGS
89 0
|
前端开发 Java API
springboot下使用过滤器与拦截器
springboot下使用过滤器与拦截器
|
前端开发 Java Spring
SpringMVC拦截器实现原理
SpringMVC拦截器实现原理
177 0
SpringMVC拦截器实现原理
下一篇
DataWorks