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

如何在WebClient中实现类似RestTemplate获取AccessToken的功能

Spring Security 5.2 WebClient 令牌获取与使用方案

Spring Security 5.2 配套的WebClient OAuth2 组件设计逻辑和旧版OAuth2RestTemplate不同,WebClient本身没有直接提供获取AccessToken的方法,令牌管理逻辑被独立拆分到专属组件中,以下是对应解决方案:

场景1:仅需调用外部微服务(官方推荐用法)

无需手动获取AccessToken,通过配置OAuth2过滤器,WebClient会自动完成令牌的获取、刷新、请求头注入全流程,代码侵入性最低。

配置示例(Servlet环境)

@Bean
WebClient oauth2WebClient(ClientRegistrationRepository clientRegistrationRepository,
                          OAuth2AuthorizedClientRepository authorizedClientRepository) {
    ServletOAuth2AuthorizedClientExchangeFilterFunction oauth2Filter =
            new ServletOAuth2AuthorizedClientExchangeFilterFunction(clientRegistrationRepository, authorizedClientRepository);
    // 可选配置:设置默认使用的OAuth2客户端ID,固定调用同一授权方服务时可简化调用代码
    oauth2Filter.setDefaultClientRegistrationId("your-oauth-client-id");
    return WebClient.builder()
            .apply(oauth2Filter.oauth2Configuration())
            .build();
}

调用示例

// 直接发起请求,无需手动处理令牌逻辑
Mono<String> serviceResponse = oauth2WebClient.get()
        .uri("外部微服务请求地址")
        .retrieve()
        .bodyToMono(String.class);

如果是响应式WebFlux环境,将过滤器替换为ServerOAuth2AuthorizedClientExchangeFilterFunction即可。

场景2:业务需要手动获取AccessToken字符串

如果你的逻辑确实需要拿到明文令牌做其他处理,可通过Spring自动装配的OAuth2AuthorizedClientManager组件获取,WebClient内部也是基于该组件完成令牌获取的。

代码示例

@Autowired
private OAuth2AuthorizedClientManager authorizedClientManager;

public String getAccessToken() {
    // 从安全上下文获取当前用户认证信息,客户端凭证模式可传入匿名Authentication实例
    Authentication currentAuth = SecurityContextHolder.getContext().getAuthentication();
    // 构造授权请求
    OAuth2AuthorizeRequest authRequest = OAuth2AuthorizeRequest
            .withClientRegistrationId("your-oauth-client-id")
            .principal(currentAuth)
            .build();
    // 执行授权,获取包含令牌的客户端实例
    OAuth2AuthorizedClient authorizedClient = authorizedClientManager.authorize(authRequest);
    // 获取AccessToken明文
    return authorizedClient.getAccessToken().getTokenValue();
}

提示:该组件会自动处理令牌过期刷新逻辑,无需自己判断令牌有效期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 22:09:01