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拦截器中获取request post请求中的参数