MVC拦截器

1、概述

Spring MVC 中的拦截器(Interceptor)基于回调机制,用于在控制器处理请求之前或之后执行某些操作。拦截器可以用来实现诸如权限检查、记录请求信息的日志、修改请求和响应等通用功能。

2、定义

在Spring MVC中,拦截器需要实现HandlerInterceptor接口,该接口提供了三个方法:preHandle()、postHandle()、afterColmpletion()方法。

说明:

  • preHandle()方法会在控制器方法执行前被调用,如果返回 true,则控制器方法将继续执行;如果返回 false,则会中断后续处理流程,不会调用控制器方法,并且不再执行其他拦截器的 postHandle()和 afterCompletion() 方法。
  • postHandle()方法会在控制器方法执行后,视图渲染前执行,可以用来修改模型数据或视图名称。
  • afterCompletion()方法在整个请求完成后调用,即在视图渲染结束后。这可用于资源清理或记录日志等操作。

3、编写拦截器

例如,我要编写一个限制用户访问时间的拦截器,代码如下:

public class TimeAccessInterceptor  implements HandlerInterceptor {
   /**
    * preHandle在控制层目标方法执行之前执行
    */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse 
           response,Object handler) 
    throws Exception {
    if(user==null)
       LocalTime now=LocalTime.now();//JDK8中的时间对象
       int hour=now.getHour();//获取当前时间对应小时
       if(hour<=6||hour>=22)
           throw new RuntimeException("请在6~10点进行访问");
        return true;
   }
}

4、配置拦截器

将写好的控制器进行配置,交给Spring管理,并指定要拦截的路径,代码如下:

@Configuration
public class SpringWebConfig implements WebMvcConfigurer{
         //配置spring mvc 拦截器
         @Override
         public void addInterceptors(InterceptorRegistry registry) {
                 registry.addInterceptor(new TimeAccessInterceptor())
                         .addPathPatterns("/api/**");//包含/api开头的路径
         }
}

5、启动服务进行访问测试

在static包下建立一个http包,然后在http包下创建.http文件,输入访问请求进行测试。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值