package com.jt.provider.interceptor;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.time.LocalTime;
/**
* 遵循spring mvc规范,自定义拦截器,对要访问controller方法的请求进行拦截。
* 然后可以基于业务对请求进行一个预处理。例如进行时间访问控制?(类似12306上的
* 订票业务)
*/
public class TimeInterceptor implements HandlerInterceptor {
/**
* 此方法会在目标controller方法执行之前执行
* @param request
* @param response
* @param handler 这个handler对象,对应了你的目标controller
* @return 这个返回结果决定了此请求是否放行,false表示不放行。
* @throws Exception
*/
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception {
System.out.println("==preHandle==");
LocalTime now = LocalTime.now();
int hour = now.getHour();
if(hour<6||hour>23)
throw new RuntimeException("请在6~23点之间访问");
return true;//true表示放行
}
}
package com.jt;
import com.jt.provider.interceptor.TimeInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class SpringWebConfig implements WebMvcConfigurer {
/**
* 注册拦截器,并定义拦截规则
* @param registry 负责注册拦截器的对象
*/
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new TimeInterceptor())//注册拦截器
//定义要拦截的请求
.addPathPatterns("/provider/sentinel01");
}
}