我正在使用JCIFS在Windows远程共享目录上创建一个目录。 它不会使身份验证失败,并继续调用 mkdir(( 方法。 但是,文件夹是在 linux 文件系统上创建的,位于 tomcat 安装的根目录,而不是在 Windows 共享目录中。没有任何例外。
我使用的是 JCIFS SMB 版本 1.3.19。Java 应用程序是一个 servlet,使用 Tomcat 在 Linux 盒子上运行。 进行 SMB 调用时,如代码块所示,应用会创建请求的目录,但它是在 Tomcat 安装目录的根目录中创建的。 我在调用 mkdir(( 方法之前使用 NtlmPasswordAuthentication。
public void create() {
try {
String smbUrl = String.format("smb://WIN-2016-AD-DNS/profiles/" + userName);
LOGGER.info("smbUrl = " + smbUrl);
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(domain, "jdoe", "password");
SmbFile dir = new SmbFile(smbUrl, auth);
if (dir.isDirectory()) {
LOGGER.info("Directory already exists");
} else {
try {
dir.mkdir();
LOGGER.info("Successfully created folder on share");
} catch (Exception e) {
logExceptionError("Failed to create Directory with SMB mkdir", e, 0);
}
}
} catch (Exception e) {
logExceptionError("Failed to create Directory with SMB", e, 0);
}
}
。
我终于想通了问题所在。我将整个Tomcat服务器环境设置在Windows平台而不是Linux上,看看我是否会有更好的运气。 事实证明,我在其中一个雄猫日志中找到了一个条目......
SEVERE [ajp-nio-8009-exec-10] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [ADuser] in context with path [] threw exception [Servlet execution threw an exception] with root cause
java.lang.ClassNotFoundException: jcifs.smb.NtlmPasswordAuthentication
我不知道为什么我的应用程序中没有捕获此异常。 所以我将jcifs库复制到Tomcats的"lib"文件夹中,重新启动Tomcat并且它起作用了。 我回到Linux环境并做了同样的事情,它在那里也有效。