本地开发环境的 MES(Spring Boot + EasyUI 微服务架构,部署在内网)突然报错:基础数据页点「下载导入模板」,接口抛 jcifs.smb.SmbAuthException: Access is denied.(jcifs 1.3.17)。模板存在文件服务器的 SMB 共享里,这行异常有两种完全不同的解读——“你的凭据我认了,但你不能进来”(授权问题),还是”你根本不是你”(认证问题)。两种解读指向的修法天差地别。
这类报错最怕一步跨错:看到 Access denied 就去改密码、重置账号、怀疑 NTLM 版本,改一圈发现方向全错。这次排查没有赌任何一个”想当然”的修复,而是用一个 20 行的 Java 探针把三种假设(账号密码错 / NTLM 协商不兼容 / 单共享 ACL 漏授权)逐一拆开,最后锁定第三种——文件服务器上单个共享目录漏了给服务账号授权,一条 icacls 修完当场生效,服务重启都不用。
这篇复盘完整定位过程,重点讲三个可复用的手法:denied 与 absent 的语义区分、同账号跨共享对比、修复后验证到与报错完全相同的操作层。