一、背景
拦截器是java项目中最常用的一种技术,今天我就基于springboot2 来说一说拦截器的具体实现步骤
二、拦截器的使用步骤
2.1 添加一个拦截器实现HandlerInterceptor接口
/**
* @ClassName myHandlerIntercepter
* @Description 拦截器的使用步骤
* 1.编写一个拦截器,实现 HandlerInterceptor 接口
* 2.把编写的拦截器注册到容器中,添加@bean webMvcConfigurer 重写 addInterceptors 规则,如果时拦截所有,静态资源也会被拦截
* 3.拦截器中的3个重要方法:preHandle(执行方法前);postHandle(执行方法后);afterCompletion(页面渲染以后)
*/
@Slf4j
public class myHandlerIntercepter implements HandlerInterceptor {
// 目标方法执行之前
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
log.error("拦截器-----preHandle");
// 登录检查
HttpSession session = request.getSession();
Object token = session.getAttribute("token");
String remoteAddr = request.getRemoteAddr();
StringBuffer requestURL = request.getRequestURL();
log.error("拦截的请求---",requestURL.toString());
Random random = new Random();
int i = random.nextInt(10);
if(i%2==0){
response.getWriter().write("error---");
return false;
}
return true;
}
// 目标方法执行之后
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
log.error("拦截器-----postHandle");
log.error("拦截器-----postHandle---{}",modelAndView);
HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
}
// 页面渲染以后
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
log.error("拦截器-----afterCompletion");
HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
}
}
2.2 把编写的拦截器注册到容器中,添加@bean webMvcConfigurer 重写 addInterceptors 规则,如果时拦截所有,静态资源也会被拦截
// 配置类标识
@Configuration(proxyBeanMethods = false)
public class Animal {
@Bean
WebMvcConfigurer webMvcConfigurer() {
return new WebMvcConfigurer() {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new myHandlerIntercepter())
// 拦截规则,拦截所有
.addPathPatterns("/**")
// 放行规则[不过拦截器],一般需要放行登录页面和静态资源
.excludePathPatterns("/","/login","/css/**","/fonts/**","/images/**","/person1");
WebMvcConfigurer.super.addInterceptors(registry);
}
};
}
}