SpringMVC拦截器

本文详细介绍了SpringMVC拦截器的工作原理,包括其与Filter的区别,以及preHandle、postHandle和afterCompletion方法的使用。涵盖了登录验证、权限控制、日志记录和响应修改等应用场景。
摘要由CSDN通过智能技术生成

拦截器(Interceptor)类似于过滤器(Filter)

Spring MVC 的拦截器作用是请求到达控制器之前之后进行拦截可以对请求响应进行一些特定处理

拦截器可以用于很多场景

  1. 登录验证:对于需要登陆才能访问的网址,使用拦截器可以判断用户是否已登录,如果未登录则跳转到登录页面。
  2. 权限校验:根据用户权限对部分网址进行访问控制拒绝未经授权的用户访问
  3. 请求日志:记录请求信息,例如请求地址、请求参数】请求时间等,用于排查问题和性能优化
  4. 更改响应:可以对响应的内容进行修改,例如添加头信息,调整响应内容格式等

拦截器过滤区别在于他们的作用层面不同

  • 过滤器更注重请求响应流程进行处理可以修改请求和响应内容例如设置编码字符集请求头状态
  • 拦截器侧重对控制器进行前置后置处理请求到达控制之前之后进行特定操作例如打印日志权限验证
定义拦截器

实现 org.springframework.web.servlet.HandlerInterceptor接口共有三个方法可以进行选择性实现

  • preHandle:处理器方法调用之前执行
    • 只有该方法有返回值,返回值是布尔类型,true放行,false拦截
  • postHandle:处理器方法调用之后执行
  • afterCompletion:渲染完成后执行
<!--配置拦截器-->
    <mvc:interceptors>
        <!--基本配置:第一种方式-->
        <!--注意:基本配置,默认情况下是拦截所有请求的。-->
        <bean class="com.powernode.springmvc.interceptors.Interceptor1"/>
        <!--基本配置:第二种方式-->
     <ref bean="interceptor1"/>

        <!--高级配置,指定一些路径被拦截,一些路径不拦截。-->
        <mvc:interceptor>
            <!--拦截所有路径-->
            <mvc:mapping path="/**"/>
            <!-- /ok 请求路径不拦截-->
            <mvc:exclude-mapping path="/ok"/>
            <!--设置拦截器-->
            <ref bean="interceptor1"/>
        </mvc:interceptor>

        <!--配置多个拦截器-->
        <ref bean="interceptor1"/>
        <ref bean="interceptor2"/>
        <ref bean="interceptor3"/>

    </mvc:interceptors>

创建拦截器类,该类需要实现HandlerInterceptor接口,需要重写三个方法:

        1.preHandle:该方法在处理器方法执行之前执行。其返回值为boolean,若为true,则紧接着会执行处理器方法,且会将afterCompletion()方法放入到一个专门的方法栈中等待执行,若为false则不会执行处理器方法(请求到达Controller前执行的方法,返回值为true通过拦截器,返回值为false被拦截器拦截。)

        2.postHandle:该方法在处理器方法执行之后执行。处理器方法若最终未被执行,则该方法不会执行。由于该方法是在处理器方法执行完后执行,且该方法参数中包含ModelAndView,所以该方法可以修改处理器方法的处理结果数据,且可以修改跳转方向/(跳转到JSP前执行的方法.)

        3.afterCompletion:当preHandle()方法返回为true时,会将该方法放到专门的方法栈中,等到对请求进行响应的所有工作完成之后才执行该方法(跳转到JSP后执行的方法。)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值