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

Java环境下无需身份验证使用smbj模块连接SMB共享的示例咨询

SMBJ Java 无身份验证(匿名)连接SMB共享实用示例

前置依赖

首先在项目中引入smbj依赖,Maven配置如下:

<dependency>
    <groupId>com.hierynomus</groupId>
    <artifactId>smbj</artifactId>
    <version>0.12.2</version>
</dependency>

前置准备

  • 确认SMB服务端已开启匿名访问权限,目标共享文件夹已为匿名/Everyone用户开放对应读写权限
  • 确认服务器445端口可正常访问,无防火墙、安全组拦截
  • SMBJ仅支持SMB2、SMB3协议,不支持SMB1,需确认服务端已开启对应版本的SMB协议

完整可运行代码示例

核心逻辑是使用AuthenticationContext.anonymous()生成匿名身份上下文,无需传入用户名、密码即可完成认证:

import com.hierynomus.smbj.SmbConfig;
import com.hierynomus.smbj.SmbClient;
import com.hierynomus.smbj.connection.Connection;
import com.hierynomus.smbj.session.Session;
import com.hierynomus.smbj.share.DiskShare;
import com.hierynomus.smbj.share.FileIdBothDirectoryInformation;
import com.hierynomus.smbj.auth.AuthenticationContext;
import java.io.IOException;
import java.io.InputStream;

public class SmbAnonymousDemo {
    public static void main(String[] args) {
        // 构建SMB连接配置,匿名访问一般无需开启数据加密
        SmbConfig config = SmbConfig.builder()
                .withEncryptData(false)
                .build();

        // 自动关闭资源的try块管理客户端生命周期
        try (SmbClient client = new SmbClient(config)) {
            // 连接SMB服务器,替换为你的服务器IP/域名
            Connection connection = client.connect("192.168.3.25");

            // 匿名身份认证,核心逻辑,无需传入账号密码
            Session session = connection.authenticate(AuthenticationContext.anonymous());

            // 连接目标共享文件夹,替换为你的共享文件夹名称
            try (DiskShare share = (DiskShare) session.connectShare("public_share")) {
                // 示例1:遍历共享根目录下的所有文件和文件夹
                for (FileIdBothDirectoryInformation item : share.list("")) {
                    System.out.printf("类型:%s,名称:%s%n", 
                            item.getFileAttributes().isDirectory() ? "文件夹" : "文件",
                            item.getFileName());
                }

                // 示例2:读取共享内的指定文件内容
                // try (InputStream is = share.openInputStream("test/info.txt")) {
                //     byte[] content = is.readAllBytes();
                //     System.out.println("文件内容:" + new String(content));
                // }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

常见问题排查

  • 若返回权限错误,优先排查服务端共享权限、NTFS权限配置是否对匿名用户开放
  • 若连接超时,检查445端口连通性,确认服务端未禁用SMB2/SMB3协议
  • 高版本Windows系统默认关闭SMB匿名访问,需在控制面板-网络和共享中心-高级共享设置中关闭「密码保护的共享」,同时开启Guest账户,共享文件夹添加Everyone权限
  • Linux Samba服务需在配置中添加map to guest = Bad User、guest ok = yes配置项才能支持匿名访问

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 22:36:03