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
相关产品推荐
相关产品推荐

