Spring/SpringBoot 拦截器

Spring/SpringBoot 拦截器

拦截器的作用:

拦截器,可以进行请求过滤、权限管理、打印日志、数据校验等。

拦截器,可以在请求前、请求后进行处理。

代码示例:

  • 拦截器 MyInterceptor:

Spring的拦截器,需要实现 HandlerInterceptor 接口。

复制代码
public class MyInterceptor implements HandlerInterceptor {

    /**
     * 前置拦截. 如果返回 false,就不会调用 url 请求
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        String requestUri = request.getRequestURI();
        System.out.println("MyInterceptor preHandle: " + requestUri);
        //如果请求以指定字符串开头,就进行拦截。注意不要漏掉第一个/
        if (requestUri.startsWith("/test/interceptor")) {
            //如果返回 false,就不会调用 url 请求
            return false;
        }

        return true;
    }

    /**
     * 后置拦截
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
        System.out.println("MyInterceptor postHandle: " + request.getRequestURI());
    }

    /**
     * 返回给前端渲染后执行
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
        System.out.println("MyInterceptor afterCompletion: " + request.getRequestURI());
    }
}
  • 配置拦截器:

配置拦截器,需要实现 WebMvcConfigurer 接口,通过 addInterceptor 添加拦截器。

可以多次调用 addInterceptor,支持添加多个拦截器。

还可以通过 addPathPatterns 匹配请求的url,excludePathPatterns 排除特定的 url。

复制代码
@Configuration
@Slf4j
public class WebMvcConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        log.info("WebMvcConfig addInterceptors registry.");
        //通过  addPathPatterns 匹配请求的url,excludePathPatterns 排除特定的 url
        registry.addInterceptor(new MyInterceptor1()).addPathPatterns("/**").excludePathPatterns("/login", "/register");
        //addInterceptor,支持添加多个拦截器。
        registry.addInterceptor(new MyInterceptor2());


    }
}

参考资料:

https://blog.csdn.net/heihaozi/article/details/131428958

相关推荐
月亮不月亮7 分钟前
月亮商场购物打折Java
java·eclipse
moxiaoran57539 分钟前
Springboot+MongoDB简单使用示例
spring boot·mongodb·spring
guozhetao17 分钟前
【ST表、倍增】P7167 [eJOI 2020] Fountain (Day1)
java·c++·python·算法·leetcode·深度优先·图论
技术思考者17 分钟前
基础很薄弱如何规划考研
java·经验分享·考研
●VON40 分钟前
重生之我在暑假学习微服务第二天《MybatisPlus-下篇》
java·学习·微服务·架构·mybatis-plus
老华带你飞40 分钟前
口腔助手|口腔挂号预约小程序|基于微信小程序的口腔门诊预约系统的设计与实现(源码+数据库+文档)
java·数据库·微信小程序·小程序·论文·毕设·口腔小程序
小鱼人爱编程1 小时前
Java基石--反射让你直捣黄龙
前端·spring boot·后端
hqxstudying1 小时前
J2EE模式---服务层模式
java·数据库·后端·spring·oracle·java-ee
GM_8281 小时前
【最新最完整】SpringAI-1.0.0开发MCP Server,搭建MCP Client 实战笔记(进阶+详细+完整代码)
java·后端·ai编程·springai·mcp
都叫我大帅哥1 小时前
Java DelayQueue:时间管理大师的终极武器
java