在项目中用到了域集成,使用jcifs来做,已经实现了,但现在的问题是域认证服务器上对某些用户的认证IP进行了限制,这些用户只能在固定IP上去就行域认证,如果在别的ip上进行认证的话就会不成功。
但是因为用户是登录到我们的系统,然后通过我们的系统去进行域认证的,所以域认证的IP就是我们服务器的IP,而不是用户本机的IP,这就导致了部分认证有IP限制的用户不弄登录我们的系统。
现在的问题是有没有什么办法在进行域认证的时候只认证用户的用户名和密码,而不认证其他的相关信息呢?期盼各位解惑
但是因为用户是登录到我们的系统,然后通过我们的系统去进行域认证的,所以域认证的IP就是我们服务器的IP,而不是用户本机的IP,这就导致了部分认证有IP限制的用户不弄登录我们的系统。
现在的问题是有没有什么办法在进行域认证的时候只认证用户的用户名和密码,而不认证其他的相关信息呢?期盼各位解惑
其实还有一种方法,就是在域服务器上在那些IP受限的用户给加上我们服务器的IP就可以了,但现在用户非常多,加很麻烦,所以就想是不是有那种验证的时候只验证用户名和密码,而不验证其余信息的方法
domainController = DocumentConfig.getKey("jcifs.http.domainController");
domain = DocumentConfig.getKey("jcifs.smb.client.domain");
System.out.println(domainController);
System.out.println(domain);
Config.setProperty("jcifs.smb.client.soTimeout", "300000");
Config.setProperty("jcifs.http.domainController",domainController);
Config.setProperty("jcifs.smb.client.domain", domain);
Config.setProperty("jcifs.netbios.cachePolicy", "1200");
}
//到域服务器验证
public static boolean loginNtlm(String user,String password ){
boolean breturn = false;
try {
NtlmPasswordAuthentication ntlm = null;
InetAddress ip = InetAddress.getByName(domainController);
UniAddress dc = new UniAddress(ip); ntlm = new NtlmPasswordAuthentication(domain, user, password);
System.out.println("user="+user +" password="+password);
SmbSession.logon(dc, ntlm);
LogStream _tmp = log;
if(LogStream.level > 2){
log.println("NtlmHttpFilter: " + ntlm + " successfully authenticated against " + dc);
}
breturn =true;
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SmbException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return breturn;
}不知道你说的配置ip域集成是什么意思?
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
response.addHeader("WWW-Authenticate", "NTLM");
这两句代码就可以了。