通过LDAP服务器验证用户身份
2009-03-18 23:05
501 查看
最近做的项目中,登录时需要连接到远程LDAP服务器对用户身份进行合法性验证,并获取登录用户权限等数据。下面是Java中访问LDAP的核心代码,供大家参考:
public boolean authenticateUserViaLdap(String username, String password)
throws LogicException {
Hashtable srchEnv = new Hashtable(11);
// 从ldap.properties配置文件中获取LDAP服务器的一些属性
String ldapURL = PropertyUtils.getProperty("ldap.server.url",
PROPFILEPATH);
String ldapPort = PropertyUtils.getProperty("ldap.server.port",
PROPFILEPATH);
String authMode = PropertyUtils.getProperty("ldap.server.auth.mode",
PROPFILEPATH);
String searchBase = PropertyUtils.getProperty(
"ldap.server.search.base", PROPFILEPATH);
String authPrincipal = PropertyUtils.getProperty(
"ldap.server.auth.principal", PROPFILEPATH);
// replace the word [username] in authPrincipal with the user's name
String resultAuthPrincipal = "";
resultAuthPrincipal = authPrincipal.substring(0, authPrincipal
.indexOf("[username]"))
+ username;
if (authPrincipal.length() > (authPrincipal.indexOf("[username]") + "[username]"
.length())) {
resultAuthPrincipal += authPrincipal.substring(authPrincipal
.indexOf("[username]")
+ "[username]".length());
}
logger.debug("security principal: " + resultAuthPrincipal);
srchEnv.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory");
srchEnv.put(Context.SECURITY_AUTHENTICATION, authMode);
srchEnv.put(Context.SECURITY_PRINCIPAL, resultAuthPrincipal);
srchEnv.put(Context.SECURITY_CREDENTIALS, password);
srchEnv.put(Context.PROVIDER_URL, ldapURL + ":" + ldapPort);
String[] returnAttribute = { "dn" };
SearchControls srchControls = new SearchControls();
srchControls.setReturningAttributes(returnAttribute);
srchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);
String searchFilter = "(cn=" + username + ")";
try {
DirContext srchContext = new InitialDirContext(srchEnv);
NamingEnumeration srchResponse = srchContext.search(searchBase,
searchFilter, srchControls);
String distName = srchResponse.nextElement().toString();
logger.debug("user authentication successful.");
return true;
} catch (NamingException namEx) {
logger.error("user authentication failed.");
logger.error(namEx, namEx.fillInStackTrace());
}
return false;
}
public boolean authenticateUserViaLdap(String username, String password)
throws LogicException {
Hashtable srchEnv = new Hashtable(11);
// 从ldap.properties配置文件中获取LDAP服务器的一些属性
String ldapURL = PropertyUtils.getProperty("ldap.server.url",
PROPFILEPATH);
String ldapPort = PropertyUtils.getProperty("ldap.server.port",
PROPFILEPATH);
String authMode = PropertyUtils.getProperty("ldap.server.auth.mode",
PROPFILEPATH);
String searchBase = PropertyUtils.getProperty(
"ldap.server.search.base", PROPFILEPATH);
String authPrincipal = PropertyUtils.getProperty(
"ldap.server.auth.principal", PROPFILEPATH);
// replace the word [username] in authPrincipal with the user's name
String resultAuthPrincipal = "";
resultAuthPrincipal = authPrincipal.substring(0, authPrincipal
.indexOf("[username]"))
+ username;
if (authPrincipal.length() > (authPrincipal.indexOf("[username]") + "[username]"
.length())) {
resultAuthPrincipal += authPrincipal.substring(authPrincipal
.indexOf("[username]")
+ "[username]".length());
}
logger.debug("security principal: " + resultAuthPrincipal);
srchEnv.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory");
srchEnv.put(Context.SECURITY_AUTHENTICATION, authMode);
srchEnv.put(Context.SECURITY_PRINCIPAL, resultAuthPrincipal);
srchEnv.put(Context.SECURITY_CREDENTIALS, password);
srchEnv.put(Context.PROVIDER_URL, ldapURL + ":" + ldapPort);
String[] returnAttribute = { "dn" };
SearchControls srchControls = new SearchControls();
srchControls.setReturningAttributes(returnAttribute);
srchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);
String searchFilter = "(cn=" + username + ")";
try {
DirContext srchContext = new InitialDirContext(srchEnv);
NamingEnumeration srchResponse = srchContext.search(searchBase,
searchFilter, srchControls);
String distName = srchResponse.nextElement().toString();
logger.debug("user authentication successful.");
return true;
} catch (NamingException namEx) {
logger.error("user authentication failed.");
logger.error(namEx, namEx.fillInStackTrace());
}
return false;
}
相关文章推荐
- 错误提示:通过 Web 服务器的身份验证的用户无权打开文件系统上的文件
- SMTP 服务器要求安全连接或客户端未通过身份验证的各个解决方案(C#)
- Python通过LDAP验证、查找用户(class,logging)
- 通过将目录服务器配置为拒绝不请求签名(完整性验证)的 SASL (协商式、Kerberos、NTLM 或摘要式) LDAP 绑定和在明 文(非 SSL/TLS 加密的)连接上执行的 LDAP 简单绑定
- SMTP 服务器要求安全连接或客户端未通过身份验证的各个解决方案(C#)
- 页面是怎么知道用户通过了身份验证
- SQL Server中服务器身份验证及用户登录
- SMTP 服务器要求安全连接或客户端未通过身份验证的各个解决方案(C#)
- yii restfull 方法验证用户身份通过token
- 应用层之用户-服务器交互: 身份验证与cookie
- FTP服务器配置与管理(3) 用户身份验证与权限管理 推荐
- Asp.net(C#)中,怎么通过域验证用户身份?
- NetScaler的部署实验之六更新NetScaler配置LDAP用户身份验证
- 解决: 关于配置局域网内通过一台WEB服务器连接到域服务器进行身份验证的IP设置
- SMTP 服务器要求安全连接或客户端未通过身份验证。 服务器响应为: Authentication
- 备用NAP服务器RADIUS无线身份验证不通过,无线控制器时常Active / Block切换故障实例分析
- Java程序通过LDAP对用户进行登陆验证
- VB.NET LDAP 用户身份验证
- java 域服务器 验证 到与服务器端用域用户进行身份验证: