概述:

Spring Web 中的拦截器(Interceptor)基于回调机制,可以在目标方法执行之前,
先进行业务检测,满足条件则放行,不满足条件则进行拦截,拦截器原理分析如下图所示:
拦截器原理分析图

拦截器定义

通过拦截器拦截对 Spring Web Handler 进行时间访问拦截,其关键代码定义如下

package com.cy.pj.common.web;
/**
* Spring MVC 中拦截器
* @author Administrator
*/
public class TimeAccessInterceptor
 implements HandlerInterceptor {
/**
* preHandle 在控制层目标方法执行之前执行
*/
 @Override
 public boolean preHandle(HttpServletRequest request,
 HttpServletResponse response, Object handler) throws Exception {
 //testRequestInfo(request,handler);
 LocalTime now=LocalTime.now();//JDK8 中的时间对象
 int hour=now.getHour();//获取当前时间对应小时
 //System.out.println("hour="+hour);
 log.info("hour {}",hour);
 if(hour<=6||hour>=22)
 throw new RuntimeException("请在 6~10 点进行访问");
 return true;
 }
}

拦截器配置

定义配置类,实现对拦截器的注册,关键代码如下

package com.cy.pj.sys.web.config;
@Configuration
public class SpringWebConfig implements WebMvcConfigurer{//web.xml
//配置 spring mvc 拦截器
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new TimeAccessInterceptor())
 .addPathPatterns("/notice/**");
}
}

fubin
10 声望0 粉丝