You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Security配置permitAll后自定义Interceptor未生效问题求助

问题分析与解决方案

一、@Override注解报错问题

在Spring Boot 3.x(对应Spring 6+)版本中,org.springframework.web.servlet.HandlerInterceptor接口的preHandle、postHandle、afterCompletion方法已改为default方法(带有默认实现)。此时直接实现该接口时,若添加@Override注解报错,原因及解决方式如下:

  • 类导入错误:确保导入的是org.springframework.web.servlet.HandlerInterceptor,而非其他包下的同名类。
  • 编译器校验问题:部分IDE或Java版本对接口default方法的@Override注解校验严格,可直接移除该注解,不影响功能实现。

修正后的拦截器代码示例:

@Component
public class JwtTokenAdminInterceptor implements HandlerInterceptor {
    private static final Logger log = LoggerFactory.getLogger(JwtTokenAdminInterceptor.class);

    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        log.info("Received request: {} {}", request.getMethod(), request.getRequestURI());
        if (!(handler instanceof HandlerMethod)) {
            log.info("Handler is not a HandlerMethod, skip interception");
            return true;
        }
        log.info("Interceptor is called.");
        return true;
    }
}

二、拦截器未生效问题

从你的配置来看,拦截器已注册但未触发,排查方向及解决办法:

  1. 请求路径匹配问题

    • 确认测试请求路径属于/admin/**且不在排除列表/admin/employee/login中,例如测试POST /admin/employee/list而非登录接口。
    • 若需匹配/admin本身,需在addPathPatterns中补充该路径:.addPathPatterns("/admin/**", "/admin")。
  2. @EnableWebMvc的影响

    • 在Spring Boot中,@EnableWebMvc会禁用自动配置的WebMvcAutoConfiguration,可能导致DispatcherServlet映射路径异常,使请求无法到达拦截器。
    • 解决方案:移除@EnableWebMvc注解,Spring Boot自动配置的WebMvc会与你的WebMvcConfiguration(实现WebMvcConfigurer)兼容生效。
  3. 请求类型排查

    • 若发送的是OPTIONS预检请求,拦截器中handler不会是HandlerMethod,会直接返回true且不打印目标日志。可添加请求方法日志,确认请求类型。
  4. Bean注入验证

    • 在WebMvcConfiguration中添加日志打印jwtTokenAdminInterceptor实例,或在拦截器构造方法中添加日志,确认Bean已被正确创建并注入。

修正后的WebMvc配置示例:

@Configuration
public class WebMvcConfiguration implements WebMvcConfigurer {

    private static final Logger log = LoggerFactory.getLogger(WebMvcConfiguration.class);

    @Autowired
    private JwtTokenAdminInterceptor jwtTokenAdminInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        log.info("Start registering custom interceptors...");
        registry.addInterceptor(jwtTokenAdminInterceptor)
                .addPathPatterns("/admin/**", "/admin")
                .excludePathPatterns("/admin/employee/login");
    }
}

内容的提问来源于stack exchange,提问作者Rrobinvip

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 09:13:18