温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何排除java拦截器

发布时间:2026-10-08 03:49:06 来源:亿速云 阅读:82 作者:小樊 栏目:编程语言

在 Java(通常指 Spring / Spring Boot)中,“排除拦截器”一般指:某些 URL 不需要经过拦截器(Interceptor)处理。下面按常见场景给你总结方法。


一、Spring MVC 拦截器排除指定路径(最常用)

1️⃣ 在注册拦截器时排除路径

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginInterceptor())
                .addPathPatterns("/**")          // 拦截所有
                .excludePathPatterns(              // 排除以下
                        "/login",
                        "/register",
                        "/static/**",
                        "/error"
                );
    }
}

✅ 适合:登录拦截、鉴权拦截


二、排除静态资源

Spring Boot 默认已排除:

/static/**
/public/**
/resources/**
/META-INF/resources/**

如果你自定义了拦截器,建议手动排除:

.excludePathPatterns(
    "/css/**",
    "/js/**",
    "/images/**"
)

三、使用注解方式排除(推荐)

1️⃣ 自定义注解

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface NoInterceptor {
}

2️⃣ 拦截器中判断

@Override
public boolean preHandle(HttpServletRequest request,
                        HttpServletResponse response,
                        Object handler) {

    if (handler instanceof HandlerMethod) {
        HandlerMethod hm = (HandlerMethod) handler;
        if (hm.hasMethodAnnotation(NoInterceptor.class)) {
            return true;
        }
    }
    // 正常拦截逻辑
    return checkLogin(request);
}

3️⃣ 使用

@NoInterceptor
@GetMapping("/test")
public String test() {
    return "no interceptor";
}

✅ 适合:个别接口跳过拦截


四、基于路径规则动态排除

@Override
public boolean preHandle(...) {
    String uri = request.getRequestURI();
    if (uri.startsWith("/api/public")) {
        return true;
    }
    return checkAuth(request);
}

五、Spring Security 的情况(注意区分)

如果你用的是 Spring Security 过滤器,不是 Interceptor:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests()
        .antMatchers("/login", "/public/**").permitAll()
        .anyRequest().authenticated();
}

六、常见错误

❌ 拦截器里写了 return false 但没排除路径
❌ 静态资源被拦截导致页面打不开
❌ 把 Interceptor 和 Filter 混淆


总结

场景 推荐方式
排除 URL excludePathPatterns
排除方法 自定义注解
静态资源 显式排除
安全框架 Spring Security 配置

如果你能告诉我:

  • 用的是 Spring Boot 还是纯 Spring
  • 是 Interceptor 还是 Filter
  • 想排除的是 登录 / 接口 / 静态资源

我可以给你更精确的代码。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手