springboot项目中自定义拦截器

本文详细介绍了如何在Spring MVC应用中自定义拦截器(CopInterceptor)并注册它,重点展示了如何通过@JustTest注解拦截特定URL路径。步骤包括创建拦截器类和在WebMvcConfigurer中进行配置,适合初学者理解Spring MVC拦截机制。
摘要由CSDN通过智能技术生成

把大象放冰箱里,总共分两步:

一、自定义一个拦截器

二、注册拦截器

================分割线===========================================

一:自定义拦截器

package com.company.giants.interceptors;

import com.company.giants.annotation.JustTest;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.stereotype.Component;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Component
@Slf4j
public class CopInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 根据业务需求,操作request、response、handler
        // 举例:拦截JustTest注解,打印:拦截器操作了
        if (handler instanceof HandlerMethod) {
            HandlerMethod handlerMethod = (HandlerMethod) handler;
            // 判断是否存在JustTest注解
            JustTest justTest = handlerMethod.getMethodAnnotation(JustTest.class);
            if (justTest != null && StringUtils.isNotBlank(justTest.value())) {
                log.info("拦截器操作了");
            }
        }
        return true;
    }
}

二:注册拦截器

package com.company.giants.config;

import com.company.giants.interceptors.CopInterceptor;
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) {
        registry.addInterceptor(new CopInterceptor()).addPathPatterns("/**")
                // login、fonts除外
                .excludePathPatterns("/login", "/fonts/**");
    }
}

结束。就这么简单。

===============补充说明==========================

拦截器中的excludePathPatterns("/login"),括号中的参数,要跟context-path后严格一致,后面如果加 /** ,说明包括子目录。举例如下:

http://localhost:8090/mod-test/just/login

其中context-path:/mod-test

excludePathPatterns("/login/**")

会将下面两个都除外(不会拦截):

http://localhost:8090/mod-test/login

http://localhost:8090/mod-test/login/test 

下面这个则不会除外(会拦截):

http://localhost:8090/mod-test/just/login

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值