spring中的拦截器设置

Posted fubin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring中的拦截器设置相关的知识,希望对你有一定的参考价值。

设置一个时间限制拦截器

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/*");
    }
}

以上是关于spring中的拦截器设置的主要内容,如果未能解决你的问题,请参考以下文章

如何在spring-servlet.xml内设置拦截器不对上传控制器进行验证

java filter 拦截器 怎么设置为在Spring框架的DispatcherServlet之前执行?

源码分析Spring boot拦截器执行顺序

spring boot拦截器中获取request post请求中的参数

spring boot拦截器中获取request post请求中的参数

spring aop拦截相关设置