1.拦截器
拦截器是什么?
简单的说,拦截器就是一道阀门,在某个方法访问之前进行拦截,然后在之前或之后加入某些操作,拦截器是AOP的一种实现策略。
拦截器主要做什么?
对正在进行的流程进行干预
拦截器的代码实现:
拦截器也主要有三个方法
其中preHandle是在请求之前就进行调用,如果该请求需要被拦截,则返回false,否则true;(通常会在该方法里面执行一些过滤操作)
postHandler是在请求之后进行调用,无返回值;
afterCompletion是在请求结束的时候进行调用,无返回值
2.Interceptor快速入门
那么在SpringBoot中如何使用拦截器呢?
步骤:创建一个类实现HandlerInterceptor接口(或者继承HandlerInterceptorAdapter适配器),再创建一个配置类实现WebMvcConfigure接口,重写addInterceptors方法
1.创建我们自己的拦截器类并实现HandlerInterceptor接口
package com.example.demo.interceptor;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @author chen
* @version 1.0
* @date 2020/10/29 16:47
*/
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("拦截方法访问之前调用");
return false;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("拦截方法访问之后调用");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("整个流程结束调用");
}
}
2.修改application.properties,加入开发接口通配地址
#凡是地址层级带有open都放行
open.url=/**/open/**
3.创建一个类实现WebMvcConfigurer,并重写addInterceptors方法
package com.example.demo.config;
import com.example.demo.interceptor.MyInterceptor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* @author chen
* @version 1.0
* @date 2020/10/29 17:06
*/
@Configuration
public class WebAppliationConfig implements WebMvcConfigurer {
@Value("${open.url}")
private String openUrl;
//声明拦截器
@Bean
public MyInterceptor myInterceptor(){
return new MyInterceptor();
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
//指定拦截器并添加相应策略(拦截或放行)
registry.addInterceptor(myInterceptor())
.addPathPatterns("/api/**")
.excludePathPatterns(openUrl);
}
}