【环境变量中阿里云通义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)

相关推荐
jqpwxt10 分钟前
启点创新科技景区私有化票务管理系统:智慧景区数字化建设核心服务商,以本地部署筑牢景区数字化安全与稳定底座
大数据·人工智能·科技·云计算·旅游
ZhangJun9533 分钟前
三次握手、四次挥手的具体细节和流程详解,附加思考题
tcp/ip·计算机网络·云计算
腾讯云大数据3 小时前
腾讯云数据智能体TCDataAgent升级:大数据平台不只“给人用”,也要“给Agent用”
大数据·云计算·腾讯云
河北小博博1 天前
阿里云 ChatOps Agent 让非标准化环境可修复:内核漏洞换盘后的容器恢复
阿里云·云计算
边境悍匪1 天前
蜗牛学苑 Java 智能体学习 Day49|贯穿项目 5 订单下单业务 思维导图复盘
java·开发语言·spring boot·学习·阿里云
会议咨询1 天前
2026年数据科学、云计算与智能技术国际会议(DCIT 2026)
云计算·数据科学·智能技术
ha_lydms2 天前
MaxCompute中窗口函数
大数据·hadoop·阿里云·云计算·dataworks·maxcompute·odps
GPU实战笔记2 天前
云端 GPU 暂停任务:如何把短期关机与七天资源释放边界分开判断?
云计算·云服务器·数据盘·gpu云计算·实例生命周期
QYR-分析2 天前
刚需赛道:全球一次性有创压力传感器市场深度解析
云计算
小白跃升坊2 天前
阿里云2026年AI Agent 开发者调研报告解读:企业 Agent 到底卡在哪
阿里云·agent·ai agent·ai工程·调研报告