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

Spring Boot集成Spring Security启动失败:CGLIB类包不一致错误

解决Spring Boot 2.3.4集成Spring Security启动失败的CGLIB代理异常

核心问题分析

报错$javax.servlet.GenericFilter$$FastClassBySpringCGLIB$$7c2c92ce not in same package as lookup class的本质是:
CGLIB生成代理类时,要求生成的FastClass必须与目标类处于同一包下,但javax.servlet.GenericFilter属于系统提供的受保护包,应用代码没有权限在该包下创建新类。当自定义JwtAuthenticationFilter继承GenericFilter并被Spring Security通过CGLIB代理时,就会触发这个代码生成异常,直接导致嵌入式Tomcat启动失败;同时因为启动流程中断,Hikari连接池的初始化线程无法正常回收,进而出现线程泄漏警告。

解决方案

1. 切换为JDK动态代理

修改Spring AOP的代理模式,放弃CGLIB改用JDK动态代理(基于接口):

  • 若使用方法级安全注解(如@PreAuthorize),在配置类上添加:
    @EnableGlobalMethodSecurity(prePostEnabled = true, proxyTargetClass = false)
    
  • 或者在配置文件中全局设置:
    # application.properties
    spring.aop.proxy-target-class=false
    
    注:GenericFilter实现了Filter接口,完全兼容JDK动态代理。

2. 调整自定义Filter的继承类

避免直接继承javax.servlet.GenericFilter,改为继承Spring提供的OncePerRequestFilter(该类位于org.springframework.web.filter包,属于应用可代理范围):

public class JwtAuthenticationFilter extends OncePerRequestFilter {
    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
        // 你的JWT校验、认证逻辑
        filterChain.doFilter(request, response);
    }
}

3. 排查依赖冲突

检查项目依赖树,确保javax.servlet-api、Spring Security与Spring Boot 2.3.4.RELEASE版本匹配:

  • Maven用户执行:mvn dependency:tree
  • Gradle用户执行:gradle dependencies
    排除重复或版本不兼容的依赖,比如确保Spring Security版本为5.3.x(与Spring Boot 2.3.x对应)。

4. 解决Hikari线程泄漏警告

该警告是启动失败的衍生问题,只要修复CGLIB代理异常、Tomcat正常启动后,Hikari的初始化线程会被自动回收,警告会消失。若问题解决后仍存在警告,可调整Hikari配置参数(如connectionTimeout、initializationFailTimeout)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 22:45:33