【环境变量中阿里云通义API认证失败】WebClientResponseException$Unauthorized: 401 Unauthorized

直接说明解决方案:重新启动 IDEA 工具

报错描述:

复制代码
2026-08-19 17:05:55 ERROR [ForkJoinPool.commonPool-worker-1] o.s.ai.chat.model.MessageAggregator - Aggregation Error
org.springframework.web.reactive.function.client.WebClientResponseException$Unauthorized: 401 Unauthorized from POST https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation
	at org.springframework.web.reactive.function.client.WebClientResponseException.create(WebClientResponseException.java:322)
	Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: 
Error has been observed at the following site(s):
	*__checkpoint ⇢ 401 UNAUTHORIZED from POST https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation [DefaultWebClient]
Original Stack Trace:
		at org.springframework.web.reactive.function.client.WebClientResponseException.create(WebClientResponseException.java:322)
		at org.springframework.web.reactive.function.client.DefaultClientResponse.lambda$createException$1(DefaultClientResponse.java:214)
		at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:106)
		at reactor.core.publisher.FluxOnErrorReturn$ReturnSubscriber.onNext(FluxOnErrorReturn.java:162)
		at reactor.core.publisher.FluxDefaultIfEmpty$DefaultIfEmptySubscriber.onNext(FluxDefaultIfEmpty.java:122)
		at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:129)
		at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onNext(FluxContextWrite.java:107)
		at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.onNext(FluxMapFuseable.java:299)
		at reactor.core.publisher.FluxFilterFuseable$FilterFuseableConditionalSubscriber.onNext(FluxFilterFuseable.java:337)
		at reactor.core.publisher.Operators$BaseFluxToMonoOperator.completePossiblyEmpty(Operators.java:2096)
		at reactor.core.publisher.MonoCollect$CollectSubscriber.onComplete(MonoCollect.java:145)
		at reactor.core.publisher.FluxPublish$PublishSubscriber.checkTerminated(FluxPublish.java:634)
		at reactor.core.publisher.FluxPublish$PublishSubscriber.drain(FluxPublish.java:494)
		at reactor.core.publisher.FluxPublish$PublishSubscriber.onComplete(FluxPublish.java:355)
		at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onComplete(FluxContextWrite.java:126)
		at reactor.core.publisher.FluxMapFuseable$MapFuseableConditionalSubscriber.onComplete(FluxMapFuseable.java:350)
		at reactor.core.publisher.FluxFlattenIterable$FlattenIterableSubscriber.drainAsync(FluxFlattenIterable.java:371)
		at reactor.core.publisher.FluxFlattenIterable$FlattenIterableSubscriber.drain(FluxFlattenIterable.java:724)
		at reactor.core.publisher.FluxFlattenIterable$FlattenIterableSubscriber.onComplete(FluxFlattenIterable.java:273)
		at reactor.adapter.JdkFlowAdapter$SubscriberToRS.onComplete(JdkFlowAdapter.java:160)
		at java.net.http/jdk.internal.net.http.ResponseSubscribers$PublishingBodySubscriber.complete(ResponseSubscribers.java:866)
		at java.net.http/jdk.internal.net.http.ResponseSubscribers$PublishingBodySubscriber.lambda$new$2(ResponseSubscribers.java:797)
		at java.base/java.util.concurrent.CompletableFuture$UniAccept.tryFire$$$capture(CompletableFuture.java:739)
		at java.base/java.util.concurrent.CompletableFuture$UniAccept.tryFire(CompletableFuture.java)
		at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:531)
		at java.base/java.util.concurrent.CompletableFuture.complete(CompletableFuture.java:2206)
		at java.net.http/jdk.internal.net.http.ResponseSubscribers$PublishingBodySubscriber.lambda$subscribe$0(ResponseSubscribers.java:894)
		at java.base/java.util.concurrent.CompletableFuture.uniAcceptNow(CompletableFuture.java:778)
		at java.base/java.util.concurrent.CompletableFuture.uniAcceptStage(CompletableFuture.java:756)
		at java.base/java.util.concurrent.CompletableFuture.thenAccept(CompletableFuture.java:2241)
		at java.net.http/jdk.internal.net.http.ResponseSubscribers$PublishingBodySubscriber.subscribe(ResponseSubscribers.java:890)
		at reactor.adapter.JdkFlowAdapter$FlowPublisherAsFlux.subscribe(JdkFlowAdapter.java:68)
		at reactor.core.publisher.InternalFluxOperator.subscribe(InternalFluxOperator.java:68)
		at reactor.core.publisher.FluxPublish.connect(FluxPublish.java:106)
		at reactor.core.publisher.FluxAutoConnect.subscribe(FluxAutoConnect.java:62)
		at reactor.core.publisher.Flux.subscribe(Flux.java:8891)
		at org.springframework.http.client.reactive.AbstractClientHttpResponse$SingleSubscriberPublisher.subscribe(AbstractClientHttpResponse.java:112)
		at reactor.core.publisher.FluxSource.subscribe(FluxSource.java:71)
		at reactor.core.publisher.Flux.subscribe(Flux.java:8891)
		at reactor.core.publisher.MonoFlatMapMany$FlatMapManyMain.onNext(MonoFlatMapMany.java:196)
		at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onNext(FluxContextWrite.java:107)
		at reactor.core.publisher.FluxDoFinally$DoFinallySubscriber.onNext(FluxDoFinally.java:113)
		at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onNext(MonoPeekTerminal.java:180)
		at reactor.core.publisher.FluxPeekFuseable$PeekConditionalSubscriber.onNext(FluxPeekFuseable.java:854)
		at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:74)
		at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:122)
		at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onNext(FluxOnErrorResume.java:79)
		at reactor.core.publisher.FluxPeek$PeekSubscriber.onNext(FluxPeek.java:200)
		at reactor.core.publisher.FluxPeek$PeekSubscriber.onNext(FluxPeek.java:200)
		at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.complete(MonoIgnoreThen.java:294)
		at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.onNext(MonoIgnoreThen.java:188)
		at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:122)
		at reactor.core.publisher.MonoCompletionStage$MonoCompletionStageSubscription.apply(MonoCompletionStage.java:121)
		at reactor.core.publisher.MonoCompletionStage$MonoCompletionStageSubscription.apply(MonoCompletionStage.java:67)
		at java.base/java.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:955)
		at java.base/java.util.concurrent.CompletableFuture$UniHandle.tryFire(CompletableFuture.java:932)
		at java.base/java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:531)
		at java.base/java.util.concurrent.CompletableFuture.postFire(CompletableFuture.java:635)
		at java.base/java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:865)
		at java.base/java.util.concurrent.CompletableFuture$Completion.exec(CompletableFuture.java:504)
		at java.base/java.util.concurrent.ForkJoinTask.doExec$$$capture(ForkJoinTask.java:511)
		at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java)
		at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1450)
		at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:2019)
		at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:187)
2026-08-19 17:05:55 ERROR [loomBoundedElastic-3] o.s.ai.chat.model.MessageAggregator - Aggregation Error

我们在确认了阿里云的 API Key 并配置到环境变量中发现不能使用显示 401 错误, 并且重新生成 API Key 并更新环境变量还是报错,并且在其他的 API Key 引用例如 chat-box 或者 Codex 中引用相同的 API 发现能使用

并且将环境变量的引用替换成明文执行发现也可以正常使用

yml 复制代码
  ai:
    dashscope:
      api-key: ${AI_ALI_DASHSCOPE_API_KEY}  #api-key
      chat:
        options:
          model: glm-5 # model: qwen3-max-2026-01-23
          temperature: 0.8
      embedding:
        enabled: true
        options:
          model: text-embedding-v3  #使用阿里云通用文本向量 V3 模型
          dimensions: 1024     #指定输出向量维度为 1024,

原因:环境变量是在进程启动时加载到内存中的,进程运行期间不会自动感知外部变化。

复制代码
操作系统
    ↓ 启动时复制
IDEA进程(JVM)← 环境变量已固化到内存
    ↓ 启动时继承
你的Java程序 ← 环境变量已固化到内存

当IDEA启动时,它会从操作系统复制一份环境变量的快照到自己的进程内存中。之后操作系统修改了 .bashrc 或系统设置,IDEA进程毫不知情,因为它不会主动回去问操作系统"环境变量变了吗"。

解决:重新启动编程软件(如 IDEA)

相关推荐
jikemaoshiyanshi1 小时前
AI 训练 GPU 利用率偏低,如何通过云上高性能存储优化成本?AWS 基于 I/O 瓶颈分层选型
人工智能·云计算·aws
真上帝的左手1 天前
19. 大数据- 湖仓一体&BI - 阿里云实践
大数据·阿里云·云计算
小新讲网安2 天前
云安全攻防实战:AWS与阿里云渗透测试全流程指南
安全·web安全·网络安全·阿里云·自动化·云计算·aws
皮皮虾❀2 天前
广州云服务器价格:阿里云代理商折扣报价单指南
运维·服务器·阿里云
过去式的美好2 天前
阿里云 2 核 2G 服务器搭建 AI 知识库:从 0 到可用(附踩坑实录)
服务器·人工智能·阿里云
星野川崎2063 天前
电商多店运维:云机长期挂机频繁掉线、账号无故风控原因剖析与解决方案
大数据·运维·云计算·电商
AKAMAI3 天前
Akamai Cloud Pulse 审计日志现已全面开放使用
人工智能·云计算
workflower3 天前
智能无人机成低空经济核心赛道
运维·人工智能·机器学习·机器人·云计算·无人机