Springmvc中的拦截器

本文详细介绍了Spring MVC中的拦截器,包括其特点、使用步骤和执行时间。拦截器用于全局请求处理,如用户登录检查、权限验证和日志记录。通过实现HandlerInterceptor接口并配置拦截器,可以实现预处理、后处理和完成处理方法。在预处理方法preHandle中,可以决定请求是否继续执行;postHandle方法允许对结果进行二次修正;afterCompletion方法则常用于资源回收。
摘要由CSDN通过智能技术生成

一、拦截器的特点

1.springmvc中的拦截器需要实现HandlerInterceptor接口。

2.拦截器与过滤器类似,但功能方向侧重点不同。过滤器是用来过滤请求参数,设置编码字符等工作;拦截器是拦截用户的请求,做请求判断处理的。

3.拦截器是全局的,可以对多个Controller进行拦截。一个项目中,可以有0个或多个拦截器,它们一起拦截用户的请求。拦截器常用在:用户登录处理,权限检查,记录日志。

二、拦截器的使用步骤

1.定义类实现HandlerInterceptor接口

2.在springmvc配置文件中,声明拦截器,让框架知道拦截器的存在

三、拦截器的执行时间

1.在请求处理之前,也就是controller类中的方法执行之前被拦截

2.在控制器方法执行之后也会执行拦截

3.在请求处理完成后也会执行拦截器

四、使用案例

1.实现HandlerInterceptor类,重写方法


public class MyInterceptor implements HandlerInterceptor{
    @Override
    public boolean preHandler(HttpServletRequest request, HttpServletResponse response, 
    Object obj)throws Exception{
        //拦截器的preHandler()方法
        return true;
    }
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse 
    response,Object obj,Exception e)throws Exception {
        //拦截器的afterCompletion()方法
        if(mv != null){
            mv.addObject("mydate",new Date());//附加一个属性
        }
    }
    @Override
    public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,Object         
    arg2,ModelAndView arg3) throws Exception {
        //拦截器的postHandle()方法
    } 
}

preHandle(预处理方法)(重点)

参数:

Object handler:被拦截的控制器对象

特点:

1.返回值是boolean,当返回值为false时,请求到达拦截器截止,不会继续执行控制器里面的方法;当返回值为true时,请求可以被处理

2.方法在控制器方法之前执行,用户请求先到达此方法,相当于整个项目的入口、门户

3.在这个方法中可以获取请求的信息,验证请求时候符合要求。可以验证用户是否登录,验证用户是否有权限访问某个连接地址(url)。如果验证失败,可以截断请求,请求不能被处理;如果验证成功,可以放行请求,此时控制器方法才能执行。

postHandle(后处理方法)

参数:

Object handler:被拦截的控制器对象

ModelAndView:处理器方法的返回值

特点:

1.方法在控制器方法之后执行

2.能够获取到处理器方法的返回值ModelAndView,可以修改ModelAndView中的数据和视图,可以影响到最后的执行结果

3.主要是对原来的结果进行二次修正

③afterCompletion(最后执行的方法)

参数:

Object handler:被拦截的控制器对象

Exception ex:程序中发生的异常

特点:

1.在请求处理完成后执行的。框架中规定当你的视图处理完成后,对视图执行了forward,就认为请求处理完成。

2.一般做资源回收工作的,程序请求过程中创建了一些对象,在这里可以删除,回收占用的内存。

2.声明拦截器

<mvc:interceptors>

    <!--声明第一个拦截器-->
    <mvc:interceptor>
        <!--指定拦截器请求的uri地址,可以使用通配符**,这里的/**代表拦截所有文件 -->
        <mvc:mapping path="/**" />
        <!--声明拦截器对象 -->
        <bean: class="com.demo.handler.MyInterceptor" />
    </mvc:interceptor>

</mvc:interceptors>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值