jcifs实现域用户自动登录碰到的问题和解决方案
1、首先下载jcifs-1.3.15.jar
2、在WEB项目加入上面这个jar,并在web.xml中加入下面内容
<filter>
<filter-name>NtlmHttpFilter</filter-name>
<filter-class>jcifs.http.NtlmHttpFilter</filter-class>
<init-param>
<param-name>jcifs.http.domainController</param-name>
<param-value>192.168.0.24</param-value>
</init-param>
<init-param>
<param-name>jcifs.smb.client.domain</param-name>
<param-value>szjz</param-value>
</init-param>
<init-param>
<param-name>jcifs.util.loglevel</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>jcifs.smb.lmCompatibility</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>jcifs.smb.client.useExtendedSecurity</param-name>
<param-value>false</param-value>
</init-param>
</filter>
第一个问题出现了,就是域用户访问会提示要求输入用户名和密码这是多郁闷的一件事啊,搞这个东东为的就是想自动登录还冒出个框来,在网上找了下大多都没提这个事,经本人摸索找到了方法:设置IE浏览器的安全-Internet-自定义级别-用户验证选择“自动使用当前用户名和密码登录”。
第二个问题又来了,自动登录后会报异常
jcifs.smb.SmbException: NTLMv2 requires extended security (jcifs.smb.client.useExtendedSecurity must be true if jcifs.smb.lmCompatibility >= 3
查了所有中文网站没见有解决方法的,最后还是在官方网站找到了一条信息,有个哥们说是jcifs存在BUG,需要将jcifs.smb.NtlmPasswordAuthentication类中的LM_COMPATIBILITY常量的改成非STATIC,下了源码把这个改了,重新打包,问题解决。
特将此问题记下,供其他使用jcifs的兄弟参考。
1 楼 tho 2012-09-28 兄弟,你说的是这行吗?
private static final int LM_COMPATIBILITY =
Config.getInt("jcifs.smb.lmCompatibility", 3);
如何修改? 2 楼 tho 2012-09-29 把static去了 配置文件除了日志类型(jcifs.util.loglevel)是3外,其他跟你的一样。
但还是不行。
第一个人成功登录,
第二个用户登录报错,信息如下:
ERROR [STDERR] NtlmHttpFilter: 192.168.1.109\user: 0xC0000022: jcifs.smb.SmbAuthException: Access is denied. 3 楼 cqm56 2012-10-12 非常感谢,我在linux上测试一直一会正确,一会错误(windows没有报错)。按照你这种方式解决了这个问题。 4 楼 cqm56 2012-10-12 把static去了 配置文件除了日志类型(jcifs.util.loglevel)是3外,其他跟你的一样。
但还是不行。
第一个人成功登录,
第二个用户登录报错,信息如下:
ERROR [STDERR] NtlmHttpFilter: 192.168.1.109\user: 0xC0000022: jcifs.smb.SmbAuthException: Access is denied.
======================
这个错误有两种解决方式:
1、添加
<init-param>
<param-name>jcifs.smb.client.soTimeout</param-name>
<param-value>5000</param-value>
</init-param>
表示等5秒后,第二个人可以登录。
2、添加
<init-param>
<param-name>jcifs.smb.client.username</param-name>
<param-value>username</param-value>
</init-param>
<init-param>
<param-name>jcifs.smb.client.password</param-name>
<param-value>password</param-value>
</init-param>
其中username和password是域账号 5 楼 tho 2012-10-12 多谢!
<init-param>
<param-name>jcifs.smb.client.soTimeout</param-name>
<param-value>5000</param-value>
</init-param>
5000是不是可以设置少点,例如100或者0.