springMVC的拦截器

SpringMVC的拦截器类似于Servlet的Filter,用于请求处理和预处理,实现AOP思想。拦截器按定义顺序执行,形成拦截器链。文章介绍了拦截器与过滤器的区别、自定义拦截器的开发步骤,包括preHandle、postHandle和afterCompletion方法的执行时机,并讲解了在SpringMVC配置文件中如何注册和配置拦截器,以及拦截器链的执行流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么时拦截器

springMVC的拦截器就相当于servlet开发中的过滤器Filter,用于对请求进行处理以及预处理。将拦截器按照一定的顺序链接成一条链这条链被称为拦截器链,在访问被拦截的方法或者是字段时,拦截器链中的拦截器就会按照之前定义的顺序进行执行,拦截器也是AOP思想的具体实现。

拦截器与过滤器的区别:

自定义拦截器的开发步骤:

  • 创建拦截器的实现类:实现接口 HandlerInterceptor
  • 在springMVC配置文件中进行配置拦截器。
  • 测试拦截器的拦截效果。

创建拦截器的实现类:
 

public class MyIntercepoter implements HandlerInterceptor {
 //在目标方法执行之前进行执行。
    //参数中  有springMVC封装的 request respond对象  可以用他们来进行操作创痛Sevlet开发中额所有操作
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        System.out.println("目标方法之前执行");
        String username = request.getParameter("username");
        if ("xiaozhang".equals(username))

            return true;
        else//返回的boolean的  如果是flase的话  就表示 对资源不放行,下面的方法也就执行不了【这样的话下面所有的操作都将无法执行】  true表示放行通过这个就可以实
        // 现拦截操作  
        {
            //request.getRequestDispatcher("/jsp/error.jsp").forward(request,response);
            //使用请求重定向的话就是两次请求了,还会在次经过拦截器
            response.sendRedirect("http://localhost:8080/SpringSSM_war_exploded/save15");
            return false;
        }


    }


//在目标方法执行之后进行执行,视图返回之前执行
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("目标方法执行之后进行执行,返回视图之前");




        //这个方法的参数中同样封装了request,response,以及ModelAndView   其中ModelAndView属性可以获取
        // ,目标资源 你自己创建的ModelAndView对象,在这里可以对目标资源中ModelAndView设置的一些属性进行一些操作

       modelAndView.addObject("suername","xaiozhang");  //这里的modelAndView和目标资源中的modelAndView对象是一个对象
       modelAndView.setViewName("sds");





    }
    //在整个流程都执行完毕之后执行

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("这个流程执行完毕");
    }
}

preHandle()

  • 方法是在目标方法执行之前进行执行。
  • 方法的参数包含HttpServletRequest request, HttpServletResponse response对象,通过这两个参数就可以进行实现操作servlet开发中的方法,比如实现登录拦截,日志控制等。
  • 返回值是一个boolean 类型,如果返回值是true的话,才会继续执行后面的方法,如果返回flase的话则不会执行后面的方法。

postHandle()

  • 方法的执行时间是目标方法执行之后,返回视图之前进行执行。
  • 方法中的参数包含HttpServletRequest , HttpServletResponse,  ModelAndView 类型的对象,所以也可以实现servlet的操作。同时ModelAndView类型的参数是接收的目标方法的参数,也就是目标方法的ModelAndView和postHandle()方法中的ModelAndView参数是同一个对象,所以使用ModelAndView参数可以修改目标方法设置的模型,以及返回的视图。

afterCompletion()

  • 方法的执行时间是在目标方法执行之后,最后进行执行。
  • 方法的参数包含HttpServletRequest , HttpServletResponse, Exception 。所以也是可以执行servlet的操作,最后可以通过Exception来设置异常的信息等异常相关的操作。

在springMVC配置文件中进行配置注册拦截器


<!--    配置拦截器-->
    <mvc:interceptors>
        <mvc:interceptor>
<!--         表示对那些资源进行拦截操作-->
            <mvc:mapping path="/**"/>
<!--            表示使用那写拦截器实现对那些资源的拦截-->
            <bean class="com.itheima.zhujie.intercepoter.MyIntercepoter"/>
        </mvc:interceptor>
    </mvc:interceptors>

由上图可知,配置拦截器需要引入mvc的空间。

拦截器链

连接器链的执行流程:

 拦截器链的执行流程,和配置拦截器的顺序有关。

示例代码:


<!--    配置拦截器-->
    <mvc:interceptors>
        <mvc:interceptor>
<!--         表示对那些资源进行拦截操作-->
            <mvc:mapping path="/**"/>
<!--            表示使用那写拦截器实现对那些资源的拦截-->
            <bean class="com.itheima.zhujie.intercepoter.MyIntercepoter"/>
        </mvc:interceptor>
        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <bean class="com.itheima.zhujie.intercepoter.MyIntercepoter1"/>
        </mvc:interceptor>
    </mvc:interceptors>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值