Spring MVC 拦截器

本文介绍了SpringMVC中拦截器Interceptor的作用、实现步骤,包括preHandle、postHandle和afterCompletion方法,以及与ServletFilter的区别。还提供了配置示例和拦截器与Filter的主要区别分析。
摘要由CSDN通过智能技术生成

概述:

        拦截器 Interceptor 在 Spring MVC 中的地位等同于 Servlet 规范中的过滤器 Filter,拦截的是处理器的执行,由于是全局行为,因此常用于做一些通用的功能,如请求日志打印、权限控制等(就是拦截一些资源的)

实现拦截步骤 

1、创建拦截类,实现HandlerIntercepator接口并重写里面的方法

        1.1、preHandle方法是在请求执行之前执行方法

        1.2、postHandle方法是在controller层中的方法执行完毕后,视图没有进行渲染时执行

        1.3、afterCompletion方法在该请求执行完过后执行

        1.4、在方法中返回值为true放行,false进行拦截

2、配置文件加入拦截器,<mvc:Intercepators>标签中写拦截器

3、在配置文件中单个拦截器的标签中注入该拦截器的拦截的类

spring-mvc.xml文件配置

代码及真理

        spring-mvc.xml文件配置


   <!--所有拦截器都写在这个服目录下-->
<mvc:interceptors>
    <!--配置具体单个拦截器-->
    <mvc:interceptor>
        <!--配置拦截规则-->
        <mvc:mapping path="/**"/> //拦截所有请求
          <!--注入拦截请求的类-->
        <bean class="com.hqyj.gyq.myInterceptor.MyInterceptor"></bean>
    </mvc:interceptor>
</mvc:interceptors>

拦截java类

package com.wzk.Interceptor;

import org.springframework.core.annotation.Order;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
*@ClassNname: 拦截器类
*@Description: 拦截器
*@Author wxk
*@Date 2023/8/31
*@Version 1.0
*/
@Order(1)  //拦截器优先级,数值越小,级别越高
public class MyInterceptor implements HandlerInterceptor {
    //请求执行之前执行
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("preHandler...........");
        return false;  //true进行放行,false进行拦截
    }
    //controller里面的方法执行完毕,视图还没有渲染的时候完成
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

    }
    //该请求执行完毕执行
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

    }
}

注意:

        @Order(数字)注解中的数字定义拦截器的级别,数字越小,拦截级别越高

拦截器和过滤器的 区别?

    • ①:拦截器是基于java的反射机制的,而过滤器是基于函数的回调。
    • ②:拦截器不依赖于servlet容器,而过滤器依赖于servlet容器。
    • ③:拦截器只对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
    • ④:拦截器可以访问action上下文、值、栈里面的对象,而过滤器不可以。
    • ⑤:在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。
    • ⑥:拦截器可以获取IOC容器中的各个bean,而过滤器不行,在拦截器里注入一个service,可以调用业务逻辑。

        

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值