public class LdapHelper {
private static DirContext ctx;
public static DirContext getCtx() {
if (ctx != null ) {
return ctx;
}
String account = "zhanghao"; //设置访问账号
String password = "mima"; //设置账号密码
String root = "DC=corp,DC=homelink,DC=com,DC=cn"; // root
Hashtable<String,String> env = new Hashtable<String,String>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://172.1.1.1:389/" + root);
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, account );
env.put(Context.SECURITY_CREDENTIALS, password);
try {
ctx = new InitialDirContext(env);
} catch (javax.naming.AuthenticationException e) {
Logger.getLogger(LdapHelper.class.getName()).log(Level.ERROR, "连接AD服务器账户错误", e);
} catch (Exception e) {
Logger.getLogger(LdapHelper.class.getName()).log(Level.ERROR, "连接AD服务器错误", e);
}
return ctx;
}
public static void closeCtx(){
try {
ctx.close();
} catch (NamingException ex) {
Logger.getLogger(LdapHelper.class.getName()).log(Level.ALL, "关闭AD连接错误", ex);
}
}
/**
* 验证账户在AD是否生效
* @param sysID
* @param userCode
* @return 0 没有验证 。 1 没有这个数据。 2 数据错误。 3 成功。 4 账号错误。
* @throws Exception
*/
public static int valAccout(String sysID,String userCode) {
int ret = 0;
if (sysID != null && !"".equals(sysID) && userCode != null && !"".equals(userCode)){
SearchControls constraints = new SearchControls();
constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
String query = "(&(objectClass=*)(pager=" + sysID + "))";
try{
NamingEnumeration<SearchResult> en = ctx.search("", query, constraints);
if(en == null){
Logger.getLogger(LdapHelper.class.getName()).log(Level.ALL, "系统号"+sysID+"的账号在AD服务器中没有查找到数据", null);
return 1;
}
if(!en.hasMoreElements()){
Logger.getLogger(LdapHelper.class.getName()).log(Level.ALL, "系统号"+sysID+"的账号在AD服务器中发生错误", null);
return 2;
}
while (en != null && en.hasMoreElements()){//maybe more than one element
Object obj = en.nextElement();
if(obj instanceof SearchResult){
SearchResult entry = (SearchResult) obj;
Attributes attr = entry.getAttributes();
Attribute att = attr.get("sAMAccountName");
String value = att.get().toString();
if(value != null ){
if(userCode.equals(value)){
ret = 3;
}else{
ret = 4;
}
}
}
}
}catch(Exception e){
Logger.getLogger(LdapHelper.class.getName()).log(Level.ALL, "系统号"+sysID+"的账号在做AD验证时发生错误,错误编号为"+ ret, e);
ret = 2;
}
}
return ret;
}
/**
* 验证AD账户
* @param systemID 系统号
* @param userCode 用户名
* @return 0 没有验证 。 1 没有这个数据。 2 数据错误。 3 成功。 4 账号错误。
*/
public static int valUser(String systemID,String userCode) {
int ret = 0;
if (systemID != null && !"".equals(systemID) && userCode != null && "".equals(userCode)){
try {
getCtx();
ret = valAccout(systemID,userCode);
} catch (Exception e) {
Logger.getLogger(LdapHelper.class.getName()).log(Level.ALL, "AD验证系统号" + systemID + "的用户登录错误,该用户code:" + userCode, null);
}finally{
closeCtx();
}
}else{
Logger.getLogger(LdapHelper.class.getName()).log(Level.ALL, "获取验证信息系统号" + systemID + "userCode" + userCode, null);
}
return ret;
}
public static void main(String[] args) throws Exception {
getCtx();
valAccout("10500100","nj_wangying");
closeCtx();
}
}
分享到:
相关推荐
本文将详细介绍如何使用 Java 实现与 Active Directory 的连接以及进行用户登录验证的过程。 #### 二、关键概念与术语解释 1. **Active Directory (AD)**:一种由微软开发的目录服务,用于Windows Server操作系统...
下面我们将深入探讨如何使用Java和SpringBoot实现基于LDAP的AD域账号验证。 首先,我们需要了解LDAP的基本结构。LDAP目录通常采用树形结构,其中包含多个条目(entries),每个条目都有唯一的DN(Distinguished ...
7. **安全性考虑**: 为了保护敏感信息,应使用SSL/TLS加密连接,并使用短生命周期的TLS票据(tickets)进行身份验证,避免密码在网络中明文传输。 8. **性能优化**: 对于大量用户验证,可以考虑缓存已验证的用户...
然后使用`InitialLdapContext`进行连接,如果无异常抛出,即代表登录验证成功。 ```java public LdapContext adLogin(JSONObject json) { // ... 省略部分代码 ... } ``` 3. **636端口登录(SSL)**: - ...
在这篇文章中,我们将探讨使用 JAVA 实现 LDAP 的 AD 域免证书查询、修改、删除、新增、启用、禁用和修改密码的操作。 首先,让我们了解什么是 LDAP 和 AD 域。LDAP(Lightweight Directory Access Protocol)是一...
1. **导入AD域证书**:在Java应用中使用AD域服务之前,必须先导入AD域的证书,以建立安全的SSL/TLS连接。这通常涉及将证书导入到Java的信任库(cacerts),可以通过`keytool`命令行工具完成。 2. **配置环境**:...
在描述中提到的"java 基于NTLM协议集成AD账号域登录",这通常涉及到以下步骤: 1. **配置AD连接**:在Java代码中设置AD服务器的URL、域名、用户名和密码。 2. **NTLM认证实现**:使用支持NTLM的库(如jcifs、jcacert...
验证AD域账号登陆,获取AD域用户列表,获取用户邮箱,修改密码等AD域操作
本文将深入探讨如何使用Java进行LDAP与AD的连接,并通过提供的源代码示例进行解析。 首先,让我们了解LDAP与AD的基本概念。LDAP是一种应用层协议,它使用TCP/IP来查找和检索分布式目录服务中的信息。这些信息可以...
在“Springboot-LDAP针对AD域控做用户和组织进行同步”的场景中,开发人员会创建一个Spring Boot应用,配置LDAP连接参数(如服务器地址、端口、基础DN等),并设置LDAP数据源。通过Spring Security的`...
在这个"修改AD域密码及新增账号demo.zip"压缩包中,我们看到的是一个基于Java操作LDAP(轻量级目录访问协议)来与AD域进行交互的示例代码,目的是为了演示如何修改AD用户的密码以及如何新增AD账号。 首先,理解Java...
这篇内容将深入探讨如何使用Java来创建AD/LDAP账号,这对于系统管理员和开发人员来说是一项基本技能。 首先,让我们了解AD和LDAP的基本概念。活动目录是微软提出的一种分布式数据库,用于存储网络资源(如用户、...
CAS(Central Authentication Service)是Java开发的一个开源的单点登录(Single Sign-On,简称SSO)框架,主要用于解决网络应用中的身份验证问题。本压缩包提供了CAS服务端自定义认证的实现,以及CAS客户端的配置...
开发者可能使用了JDBC(Java Database Connectivity)API来连接Java应用程序与SQL Server数据库,执行SQL语句进行数据的增删改查操作。 项目的实现可能涉及以下关键知识点: 1. **Java基础**:包括类、对象、继承...
- `index.jsp`:这通常是Web应用的首页,可能包含一个登录表单或者已经使用NtlmHttpFilter进行身份验证的页面。 - `META-INF`:这是一个标准的Java Web应用目录,通常包含应用的元数据,如MANIFEST.MF文件,该文件...
这里,-x表示使用简单绑定,-LLL抑制多行值,-b指定搜索基DN,-D和-w用于管理员身份验证。 2. 使用ldapexport工具:某些 LDAP 客户端软件,如OpenLDAP,提供了ldapexport工具,可以方便地将目录数据导出为LDIF文件...
2. 用户认证:Jive支持多种身份验证机制,如内置、LDAP、AD等,根据实际需求进行设置。 3. 权限管理:定义不同角色的权限,如管理员、普通用户、访客等,确保信息的安全。 六、性能优化 1. 数据库优化:如索引设置...
在上面的代码中,我们定义了一个只有 root 帐号的身份验证提供程序,使用内存中的用户信息进行验证。 在注册自定义的 AuthenticationProvider 时,我们需要使用 Spring Security 的 Java 配置方式,而不是 XML 配置...
在安卓手机上进行应用开发管理是一项日常且重要的工作,尤其涉及到员工考勤管理时,高效、便捷的系统显得尤为关键。本项目采用日历视图作为核心展示方式,结合Bmob后端服务,构建了一个全面的员工考勤管理系统。下面...