添加注解绕过拦截器

先放一下百度的关于注解的基本东西

Target:描述了注解修饰的对象范围,取值在java.lang.annotation.ElementType定义,常用的包括:

  • METHOD:用于描述方法
  • PACKAGE:用于描述包
  • PARAMETER:用于描述方法变量
  • TYPE:用于描述类、接口或enum类型

Retention: 表示注解保留时间长短。取值在java.lang.annotation.RetentionPolicy中,取值为:

  • SOURCE:在源文件中有效,编译过程中会被忽略
  • CLASS:随源文件一起编译在class文件中,运行时忽略
  • RUNTIME:在运行时有效
  • @Documented - 标记这些注解是否包含在用户文档中。

我用的是配合拦截器和注解实现接口放过,反着也一样。主要原理就是通过反射获取是否包含注解。

package com.base.interceptor;


import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * Created by Administrator on 2021/7/1.
 * 自定义注解 当拦截器识别到注解时 就跳过
 */
@Target(value = {ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface IgnoreInterceptor {

}

然后去拦截器

//添加注解的过滤掉
if (handler instanceof HandlerMethod) {
    HandlerMethod handlerMethod = (HandlerMethod) handler;
    IgnoreInterceptor methodAnnotation = handlerMethod.getMethodAnnotation(IgnoreInterceptor.class);
    if (methodAnnotation != null){
        System.out.println("Method @IgnoreInterceptor");
        return true;
    }
    /*Class<?> clazz = handlerMethod.getBeanType();
    if (AnnotationUtils.findAnnotation(clazz, IgnoreInterceptor.class) != null) {
        System.out.println("Class @UnAuthRequest");
        return true;
    }*/
}

 

<think>好的,用户想知道如何在后端移除或禁用拦截器。首先,我需要回忆一下不同框架中拦截器的配置方式。根据提供的引用内容,有提到Spring的@Component注解、Dio拦截器添加方法,还有MyBatis的拦截器配置。 首先,用户可能是在不同的框架下工作,比如Spring或者Dio(可能是Flutter中的HTTP客户端)。需要分情况讨论。比如在Spring中,拦截器通常通过注册到WebMvcConfigurer来添加,所以要禁用的话可能需要注释掉相关配置或者使用条件注解。比如引用3提到用@Component来声明拦截器,但可能还需要在配置类中添加它,所以移除拦截器可以从配置类入手,或者使用@ConditionalOnProperty根据配置动态启用。 然后看Dio的示例,引用2中是通过dio.interceptors.add添加自定义拦截器,所以直接移除这行代码或者通过条件判断来控制是否添加。比如用if语句包裹,根据配置决定是否添加。 另外,MyBatis的拦截器在引用5中提到是通过mybatis.plugin.sql-log.enabled属性控制,可能是在配置文件中设置,或者使用@ConditionalOnProperty注解。用户如果想禁用,只需要将enabled设为false即可。 还需要考虑不同的场景,比如在Spring Boot中,可能有多个方法:排除组件扫描,使用配置文件控制,或者在配置类中动态注册。用户可能需要具体的步骤,比如在配置类中注释掉addInterceptor的方法,或者使用@Profile注解在特定环境下禁用。 要确保回答覆盖不同框架,并且给出具体代码示例,比如如何用条件注解,或者修改配置属性。同时要检查是否有其他可能的移除方式,比如直接删除拦截器类,但通常不推荐,而是通过配置来灵活控制。 总结,回答需要分点说明不同框架下的方法,结合引用中的例子,给出具体的步骤和代码片段,确保用户可以根据自己的情况选择合适的方式。</think>在后端代码中移除或禁用拦截器(Interceptor)的方法会根据具体框架和实现方式有所不同。以下是基于常见场景的解决方案: --- ### 一、根据框架类型选择禁用方式 #### 1. **Spring Framework 中禁用拦截器** - **方法一:移除拦截器注册** 在Spring配置类中注释或删除添加拦截器的代码: ```java @Configuration public class WebConfig implements WebMvcConfigurer { //@Override //public void addInterceptors(InterceptorRegistry registry) { // registry.addInterceptor(new AuthInterceptor()); // 注释此行 //} } ``` - **方法二:排除组件扫描** 若拦截器类标注了`@Component`(如引用[^3]),可在扫描路径中排除: ```java @SpringBootApplication @ComponentScan(excludeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, classes = AuthInterceptor.class)) public class Application { } ``` #### 2. **Dio(Flutter HTTP客户端)中移除拦截器** 直接删除或注释添加拦截器的代码(如引用[^2]): ```dart dio.interceptors.add(CustomInterceptor()); // 删除此行 ``` #### 3. **条件化启用拦截器** 通过配置文件动态控制拦截器: ```java @Configuration @ConditionalOnProperty(name = "mybatis.plugin.sql-log.enabled", havingValue = "true") // 如引用[^5] public class SqlLogInterceptorConfig { // 拦截器配置 } ``` 将配置属性`mybatis.plugin.sql-log.enabled`设为`false`即可禁用。 --- ### 二、针对特定请求绕过拦截 若需保留拦截器但**临时绕过检查**(如引用[^1]的Token验证逻辑): 1. **修改拦截器逻辑** 在`preHandle`方法中添加白名单: ```java public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { if ("/interceptor/test".equals(request.getRequestURI()) && request.getParameter("token") != null) { return true; // 放行带token的请求 } // 其他逻辑 } ``` 2. **使用注解排除路径** 在Spring配置中设置排除路径: ```java registry.addInterceptor(authInterceptor).excludePathPatterns("/public/**"); ``` --- ### 三、彻底移除自定义拦截器 1. **代码层面** - 删除拦截器类文件(如`AuthInterceptor.java`) - 清理所有相关的注册和依赖注入代码 2. **依赖管理** 若拦截器通过第三方库引入,在构建工具(如Maven/Gradle)中移除对应依赖。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhl_BeginLife

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值