- 拦截器的作用主要是为了在一些请求进入控制器(controller)之前进行一些特定的过滤等处理操作,从而使项目更加完整,安全。在SpringBoot中配置拦截器与在springMVC中大多相同,我这里采用的是继承HandlerInterceptor类实现对请求拦截,主体分为,一个拦截器(处理拦截请求),一个配置类(指定对那些请求进行拦截)。(下面是一个简单的拦截器使用案例)
- 拦截器代码(拦截请求处理类)
拦截的编写需要继承HandlerInterceptor类,并且重写preHandle方法,在preHandle方法中进行配置对拦截的请求进处理,返回结果为true请求允许通过,否则请求不通过
public class LogInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//登录拦截的业务逻辑
System.out.println("-------登录请求拦截器--------------");
System.out.println(request.getRequestURI().toString()); /*获取请求路径信息*/
System.out.println(request.getSession().toString()); /*获取session信息*/
String token = request.getHeader("token"); /*获取token信息*/
if(token != null && !token.equals("")){
System.out.println("用户以登录");
return true; /*允许请求通过*/
}
System.out.println("用户没有登录");
return false; /*不允许通过*/
}
}
- 拦截器配置类代码(拦截请求)
在配置类中进行配置需要拦截的请求,设置无需拦截的请求(减去服务器压力)。
在编写配置类时需要继承WebMvcConfigurer类(一些对于web的配置都可以在这个配置类想进行配置,等同于springmvc中的applicationContext配置类),同时在这配置类中也可进行多个拦截器的配置,进行不同类型的请求,进行不同的拦截处理
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* @description:
* @author: liuhui
* @createDate: 2020/3/20
* @version: 1.0
*/
//注册到SpringBoot,同于springMVC中的applicationContext.xml文件 也就是一个配置文件
@Configuration /*配置类注解*/
public class Interceptor implements WebMvcConfigurer {
/*拦截器具体实现类*/
@Override
public void addInterceptors(InterceptorRegistry registry){
//需要拦截的路径,/**表示需要拦截所有请求
String[]addPathPatterns={"/boot/**"};
//不需要拦截的路径
String [] excludePathPaterns={
"/boot/get",
"/boot/post",
"/boot/put",
"/myservlet"
};
//注册一个登录拦截器
registry.addInterceptor(new LogInterceptor())
.addPathPatterns(addPathPatterns)
.excludePathPatterns(excludePathPaterns);
//需要多个拦截器时,重复注册拦截器,并且提供拦截器的实现类
//registry.addInterceptor(new LoginInterceptor())
// .addPathPatterns(addPathPatterns)
// .excludePathPatterns(excludePathPatterns);
}
- controller控制器代码(这里贴上一个简单的控制器,以便大家拿出来进行测试使用)
@RestController
public class Controller {
@PostMapping("boot/getInterceptor")
public String getInterceptor(){
System.out.println("进入了拦截器测试");
return "拦截器测试";
}
}
- 上面就是一个简单的拦截器使用配置的方法,如有不到之处欢迎批评指正。
欢迎各位现在的,未来的大佬留言进行技术交流,本文原创,转载标明出处!