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

升级至Spring Boot 3后缺失OAuth2相关类的解决方案咨询

Spring Boot 3.x/Spring Security 6.x 网关OAuth2类替换问题

将网关服务从Spring Boot 2.5.2升级至3.x版本后,发现DefaultAccessTokenConverter、OAuth2Authentication、OAuth2AuthenticationManager和RemoteTokenServices类被移除或迁移至其他库,无法直接使用。

升级前后依赖对比

升级前(Spring Boot 2.5.2)build.gradle依赖:

implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'org.springframework.cloud:spring-cloud-starter-gateway'
implementation 'org.springframework.cloud:spring-cloud-starter-security'
implementation 'org.springframework.cloud:spring-cloud-starter-oauth2'
implementation 'org.springframework.security:spring-security-oauth2-resource-server'
implementation 'org.springframework.security:spring-security-oauth2-jose'
implementation 'org.springframework.security:spring-security-config'
implementation 'org.springframework.cloud:spring-cloud-starter-oauth2:2.2.5.RELEASE'

升级后(Spring Boot 3.x)build.gradle依赖:

implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springframework.cloud:spring-cloud-starter-gateway'
implementation 'org.springframework.security:spring-security-oauth2-authorization-server:1.0.0'

遇到的问题

已配置Spring Security 6.x/Spring Boot 3.x对应的OAuth2依赖,但Spring Security 6.x迁移指南中未找到上述类的相关替换说明。曾看到一篇关于从OAuth2迁移至Spring Security 5的问答,但自身缺乏足够认证服务经验,无法确认是否适用。

上述类在网关服务中被大量使用,不确定如何替换。以下是OAuth2Authentication的典型使用示例:

@Override
public OAuth2Authentication extractAuthentication(final Map<String, ?> map) {
    OAuth2Authentication authentication = super.extractAuthentication(map);

    authentication.getOAuth2Request().getExtensions().computeIfAbsent(GIVEN_NAME,
        v -> map.get(GIVEN_NAME) != null ? map.get(GIVEN_NAME).toString() : "");
    authentication.getOAuth2Request().getExtensions().computeIfAbsent(PREFERRED_NAME,
        v -> map.get(PREFERRED_NAME) != null ? map.get(PREFERRED_NAME).toString() : "");
    authentication.getOAuth2Request().getExtensions().computeIfAbsent(CLIENT_NAME,
        v -> map.get(CLIENT_NAME) != null ? map.get(CLIENT_NAME).toString() : "");
    authentication.getOAuth2Request().getExtensions().computeIfAbsent(FEATURES,
            v -> map.get(FEATURES) != null ? String.join(DELIMITER,
                    (List<String>) map.get(FEATURES)) : "");
    authentication.getOAuth2Request().getExtensions().computeIfAbsent(PARTITION_ROLES,
            v -> map.get(PARTITION_ROLES) != null ? String.join(DELIMITER,
                    (List<String>) map.get(PARTITION_ROLES)) : "");
    return authentication;
}

恳请提供替换方案,谢谢!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 06:35:20