在 Java(通常指 Spring / Spring Boot)中,“排除拦截器”一般指:某些 URL 不需要经过拦截器(Interceptor)处理。下面按常见场景给你总结方法。
@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/**"
)
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface NoInterceptor {
}
@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);
}
@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 过滤器,不是 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 配置 |
如果你能告诉我:
我可以给你更精确的代码。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。