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

如何在Java/Spring应用中通过SAMR协议对接Samba服务器?

Spring应用通过SAMR协议集成Samba DC的最小可复现示例

1. 依赖配置(Maven)

首先在pom.xml中添加JCIFS现代化分支的依赖,它对SAMR协议支持更完善:

<dependency>
    <groupId>org.codelibs</groupId>
    <artifactId>jcifs-ng</artifactId>
    <version>2.1.35</version>
</dependency>

2. 核心SAMR操作组件

以下是Spring环境下可直接使用的组件,实现查询Samba域用户的基础功能:

import jcifs.CIFSContext;
import jcifs.context.BaseContext;
import jcifs.smb.SAMR;
import jcifs.smb.SamrUserInfo;
import jcifs.smb.SmbSession;
import jcifs.smb.SmbTransport;
import jcifs.smb.ntlmssp.NtlmPasswordAuthentication;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import java.util.List;

@Component
public class SambaSamrClient {
    // 对应docker-compose中配置的Samba DC地址,需在本地hosts映射127.0.0.1 my.company
    private static final String SAMBA_DC_HOST = "my.company";
    // 域管理员账号
    private static final String ADMIN_ACCOUNT = "Administrator";
    // 对应docker-compose密钥中的管理员密码
    private static final String ADMIN_PASSWORD = "your-admin-password";
    // 对应docker-compose中的REALM配置
    private static final String DOMAIN_REALM = "MY.COMPANY";

    private CIFSContext cifsContext;

    @PostConstruct
    public void initCifsContext() {
        this.cifsContext = new BaseContext();
    }

    public List<SamrUserInfo> fetchDomainUsers() throws Exception {
        // 构建NTLM认证对象
        NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(
                DOMAIN_REALM, ADMIN_ACCOUNT, ADMIN_PASSWORD
        );

        // 建立到Samba DC的SMB连接
        try (SmbTransport transport = cifsContext.getTransport(SAMBA_DC_HOST, 445)) {
            transport.connect();
            SmbSession session = SmbSession.getInstance(transport, auth);

            // 初始化SAMR协议实例并执行查询
            try (SAMR samr = new SAMR(session)) {
                int domainHandle = samr.openDomain(session.getRemoteHost(), DOMAIN_REALM);
                List<SamrUserInfo> userList = samr.queryUsers(domainHandle);
                
                samr.closeDomain(domainHandle);
                return userList;
            }
        }
    }
}

3. 功能验证测试

编写Spring Boot测试类快速验证功能:

import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class SambaSamrClientTest {

    @Autowired
    private SambaSamrClient samrClient;

    @Test
    public void testFetchUsers() throws Exception {
        samrClient.fetchDomainUsers().forEach(user -> 
            System.out.printf("账号名: %s, 全名: %s%n", user.getAccountName(), user.getFullName())
        );
    }
}

4. 关键注意事项

  • 本地域名解析:在本地hosts文件添加127.0.0.1 my.company,确保Spring应用能访问到Docker中的Samba DC
  • 密钥配置:在docker-compose同目录创建secrets/samba-admin-password文件,写入和代码中一致的管理员密码
  • 端口权限:确保本地防火墙开放445、139等映射端口,避免连接被拦截
  • 权限要求:SAMR协议操作需要域管理员权限,必须使用Administrator账号执行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 19:52:42