设置一个时间限制拦截器

1.实现HandlerInterceptor接口,使用@Slf4j注解:lombok会在java文件编译成class文件时,会自动在类文件中添加一个log对象
2.重写HandlerInterceptor接口的preHandle方法
此方法会在目标handler方法执行之前进行拦截,方法返回值为 true 时表示请求放行,false 表示请求到此结束,不再去执行 handler 中的方法

package com.cy.pj.common.web;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.time.LocalTime;
/**
 * 定义 spring web 模块中的拦截器,通过此拦截器对 handler 中某些方法的
 * 进行时间访问限制。
 */
@Slf4j//lombok 会在当前 java 文件编译成 class 文件时,会自动在类文件中添加一个 log 对象
public class TimeAccessInterceptor implements HandlerInterceptor {
    /**preHandle 方法会在目标 handler 方法执行之前进行访问拦截
 * 方法返回值为 true 时表示请求放行,false 表示请求到此结束,
 * 不再去执行 handler 中的方法
 * */
 @Override
 public boolean preHandle(HttpServletRequest request,
                             HttpServletResponse response,
                             Object handler){
        LocalTime now=LocalTime.now();//JDK8 中的时间对象
 int hour= now.getHour();//获取当前时间对应小时
 log.info("hour {}", hour);
        if (hour<=20||hour>=22){
            throw new RuntimeException("请在20-22点进行访问");
        }
        return true;
    }
}package com.cy.pj.common.web;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.time.LocalTime;
/**
 * 定义 spring web 模块中的拦截器,通过此拦截器对 handler 中某些方法的
 * 进行时间访问限制。
 */
@Slf4j//lombok 会在当前 java 文件编译成 class 文件时,会自动在类文件中添加一个 log 对象
public class TimeAccessInterceptor implements HandlerInterceptor {
    /**preHandle 方法会在目标 handler 方法执行之前进行访问拦截
 * 方法返回值为 true 时表示请求放行,false 表示请求到此结束,
 * 不再去执行 handler 中的方法
 * */
 @Override
 public boolean preHandle(HttpServletRequest request,
                             HttpServletResponse response,
                             Object handler){
        LocalTime now=LocalTime.now();//JDK8 中的时间对象
 int hour= now.getHour();//获取当前时间对应小时
 log.info("hour {}", hour);
        if (hour<=20||hour>=22){
            throw new RuntimeException("请在20-22点进行访问");
        }
        return true;
    }
}

3.定义一个配置对象用于对实现类的描述,使用注解@Configuration,此注解是Spring中的一个配置类bean对象
4.实现WebMvcConfigurer接口并且重写addInterceptor方法来设置拦截器和要拦截的路径

package com.cy.pj.common.web;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/*
* 定义SpringWebConfig对象,用于注册拦截器,过滤器等*/
@Configuration//次注解是Spring中的一个配置类bean对象
public class SpringWebConfig implements WebMvcConfigurer {
    /*注册拦截器,并且设置要拦截的路径,此方法会在项目启动时就会调用*/
 @Override
 public void addInterceptors(InterceptorRegistry registry){
        //注册拦截器(将拦截器添加到spring容器)
 registry.addInterceptor(new TimeAccessInterceptor()).
                //设置要拦截的URL
 addPathPatterns("/menu/*");
    }
}

fubin
10 声望0 粉丝

« 上一篇
算法