SMB协议操作共享文件

在 java 开发中,避免不了要对共享文件进行操作,前段时间小编就做了类似的需求,这里记录开发中遇到的坑,一是记录,而是希望有同样需求的小伙伴烧踩一些坑。

在连接共享文件时 ,我们避免不了要输入用户名&密码,但是smb协议可以有两种写法

方法一:

/*

*   Smb://(用户名):(密码)@(ip)/(共享文件名称)

*/

String path="Smb://dzjz:123@172.16.192.106/unupload/";


SmbFile smbFile=newSmbFile(path);

然后就可以进行后续的验证了。
但是:::: 这种写法会有个坑,其中的@符是连接作用,假如你的密码中有特殊字符(例如:@!#。。等),这样的话你的共享文件一直是链接不上的,那么有没有解决办法呢  肯定是有的下面我们来时第二种方法

方法二:

/*

* 还是上面的 用户名密码

*/

String domainip="172.16.192.106";

String userName="dzjz";

String passWord="123";

String fileName="unupload";

String url="smb://172.16.192.106/unupload/" ;

NtlmPasswordAuthentication auth =new NtlmPasswordAuthentication(domainip, username, password);

SmbFile outDirFile =newSmbFile(url, auth);

//或者 SmbFile outDirFile =newSmbFile("smb://"+domainip+"/"+fileName+"/", auth);

这样就可以完美解决了用户名或者密码中存在摊位数字符的问题。

这种写法简单的来说就是优先验证用户信息 ,然后给你个封装好的钥匙,再去打开你想要访问的共享文件,具体原理就不在这里说了 有兴趣的大家可以看下源码。

还有一点,也是比较坑的一点:就是smb协议访问的共享文件是加了同步锁的,当有一个smb协议扎起使用连接着当前的共享文件时,其他的协议是无法连接通过的。(关于这一点大家可以看下源码的具体实现。)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,991评论 19 139
  • 1. Samba简介 Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构...
    garyond阅读 14,370评论 2 29
  • 1、第八章 Samba服务器2、第八章 NFS服务器3、第十章 Linux下DNS服务器配站点,域名解析概念命令:...
    哈熝少主阅读 3,775评论 0 10
  • 本文是Medusa和Hydra快速入门手册的第二部分,第一部分的传送门这两篇也是后续爆破篇的一部分,至于字典,放在...
    LinuxSelf阅读 2,917评论 0 4
  • 一、概念(载录于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434阅读 8,453评论 6 152