Spring Boot从1.3.5升级至2.7.1实现OIDC认证报错,求最低版本与解决方法
我正尝试将运行在Spring Boot 1.3.5.RELEASE版本的Web应用升级至2.7.1版本,最终目标是在应用中实现OIDC认证。
当前依赖版本
<spring.boot.version>1.3.5.RELEASE</spring.boot.version> <spring.version>4.1.3.RELEASE</spring.version> <spring.integration.version>4.1.3.RELEASE</spring.integration.version> <org.hibernate.version>4.3.10.Final</org.hibernate.version> <aspectj.version>1.8.7</aspectj.version>
我的核心疑问:
- 我了解到实现OIDC认证需使用OAuth2客户端依赖,而该依赖需要Spring Security 5.x.x版本(请纠正我的认知)。请问在当前低版本环境下如何实现OIDC认证?
- 尝试直接升级Spring Boot至2.7.1版本,解决多个构建问题后,运行应用时出现如下错误:
2022-10-26 21:26:31.251 INFO 14788 --- [main] o.s.core.annotation.MergedAnnotation : Failed to introspect annotations on public org.springframework.transaction.PlatformTransactionManager org.springframework.boot.autoconfigure.orm.jpa.JpaBaseConfiguration.transactionManager(org.springframework.beans.factory.ObjectProvider): java.lang.ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy
请问我遗漏了什么?
- 实现OIDC认证所需的Spring及Spring Boot最低版本是多少?
1. OIDC认证的最低版本要求
你的认知正确:Spring官方原生的OAuth2客户端支持(包含OIDC功能)从Spring Security 5.0开始引入,对应的Spring Boot最低版本是2.0.0.RELEASE。Spring Boot 2.x系列默认集成Spring Security 5.x,因此想要使用官方原生支持的OIDC,必须升级到Spring Boot 2.x及以上版本。
2. 低版本环境实现OIDC的方案
如果坚持使用Spring Boot 1.3.x(Spring 4.1.x),只能通过以下两种方式实现:
- 使用第三方客户端库:比如
pac4j,它支持Spring 4.x环境,提供了开箱即用的OIDC集成能力,无需依赖Spring Security 5.x。 - 手动实现OIDC流程:自行处理授权请求发起、令牌获取、用户信息解析、令牌验证等全流程,但这种方式工作量大,且需要自行处理安全细节(如签名校验、令牌过期管理等),不推荐用于生产环境。
3. 升级到Spring Boot 2.7.1报错的原因及解决
你遇到的ArrayStoreException: sun.reflect.annotation.TypeNotPresentExceptionProxy错误,核心原因是依赖版本不兼容或缺失必要类,具体解决步骤:
- 升级Hibernate版本:Spring Boot 2.7.x默认适配Hibernate 5.6.x,而你当前使用的Hibernate 4.3.10.Final版本差异过大,存在大量API不兼容。建议移除自定义的
org.hibernate.version配置,让Spring Boot的依赖管理自动适配对应版本,或手动指定Hibernate 5.6.x版本。 - 清理依赖冲突:使用
mvn dependency:tree(Maven)或./gradlew dependencyInsight --dependency spring-core(Gradle)命令检查依赖树,排查是否有旧版本的Spring组件(如Spring Core、Spring Transaction)被残留引入,导致类加载冲突。 - 适配JPA配置:Spring Boot 2.x的JPA自动配置逻辑与1.x差异较大,比如
ObjectProvider的使用、事务管理器的初始化方式。检查你的自定义JPA配置类,移除过时的注解或类引用,适配新的API。 - 确认Java版本:Spring Boot 2.7.x要求运行环境为Java 8及以上,而Spring Boot 1.3.x支持Java 7,确保你的运行环境符合版本要求。
内容的提问来源于stack exchange,提问作者Sel_va

