想要了解拦截器的拦截时间节点 请查看:
定义拦截器
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* @Author: zanglikun
* @Date: 2022/5/7 18:43
* @Description: 拦截器,实现HandlerInterceptor,然后重写方法
*/
@Slf4j
@Component // 可省略,但需要注册到WebMvcConfigurer
public class MyInterceptor implements HandlerInterceptor {
/**
* handler 参数的类型可以是以下几种:更多用于操作反射
* HandlerMethod:代表一个控制器方法,包含方法的相关信息,如方法名、参数等。
* HandlerInterceptor:代表一个拦截器,可以在请求处理前、处理后或渲染视图时执行一些操作。
* ResourceHttpRequestHandler:代表一个处理静态资源的处理器,可以处理静态文件的请求。
* WebSocketHandler:代表一个 WebSocket 处理器,用于处理 WebSocket 相关的请求。
*/
// 请求拦截前处理
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 请求进来,会被拦截,这里可做日志打印,可获取所有请求参数。返回true 代表放行 返回false 代表拒绝请求。
return HandlerInterceptor.super.preHandle(request, response, handler);
}
// Controller已经处理完毕了
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
}
// 结尾工作,如果preHandle方法内部(非Controller等后续有异常哈)抛出异常,本方法将不会触发,一般不过使用此方法
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
}
}
注册自定义拦截器
【教程】:创建MVCConfig类。实现WebMvcConfigurer,重写addInterceptor()方法即可!
注意:如果注册多个拦截器没有设置Order,那么先注册的先执行!如果都设定了Order那么Order越小优先执行!Order一样,估计就是按照拦截器名字为准了或注册的顺序!
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class MVCConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 注册一个拦截器,并放行/user下的接口
registry.addInterceptor(new MyInterceptor()).excludePathPatterns("/user/**").order(0);
}
}
特殊说明: 上述文章均是作者实际操作后产出。烦请各位,请勿直接盗用!转载记得标注原文链接:www.zanglikun.com
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取全部资料 ❤
第三方平台不会及时更新本文最新内容。如果发现本文资料不全,可访问本人的Java博客搜索:标题关键字。以获取全部资料 ❤