LDAP基础:2:使用Java验证OpenLdap用户登录
这篇文章整理一下如何使用Java进行OpenLdap用户登陆验证。
事前准备
有自己的Ldap服务器或者使用OpenLdap搭建一个简单的服务器,可以参看:
- https://blog.csdn.net/liumiaocn/article/details/83719568
Java相关的类
在java中主要使用javax.naming来进行验证,验证过程中会使用到:
- javax.naming.Context;
- javax.naming.directory.DirContext;
- javax.naming.directory.InitialDirContext;
代码示例
这里给出最简单的代码验证示例
[root@platform ~]# cat LdapDemo.java
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;public class LdapDemo{public static void main(String[] args){System.out.println("IPAdress: " + args[0]);System.out.println("Username: " + args[1]);System.out.println("Password: " + args[2]);Hashtable tbl = new Hashtable(4);String LDAP_URL = "ldap://" +args[0]+ "/dc=example,dc=org";tbl.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");tbl.put(Context.PROVIDER_URL, LDAP_URL);tbl.put(Context.SECURITY_AUTHENTICATION, "simple");tbl.put(Context.SECURITY_PRINCIPAL, args[1]);tbl.put(Context.SECURITY_CREDENTIALS, args[2]);System.out.println("env setting");DirContext context = null;try {System.out.println("login verification begins...");context = new InitialDirContext(tbl);System.out.println("login successfully.");} catch (Exception ex) {System.out.println("login failed.");} finally {try {if (context != null) {context.close();context = null;}tbl.clear();} catch (Exception e) {System.out.println("exception happened.");}}}
}
[root@platform ~]#
验证
事前准备:需要准备如下环境,这里从宿主机访问容器中运行的OpenLdap服务,本文相关信息如下:
- Ldap使用的IP: 172.17.0.3
- 用户名:cn=admin,dc=example,dc=org
- 用户密码:admin
[root@platform ~]# ldapsearch -x -H ldap://172.17.0.3 -b dc=example,dc=org -D "cn=admin,dc=example,dc=org" -w admin
# extended LDIF
#
# LDAPv3
# base with scope subtree
# filter: (objectclass=*)
# requesting: ALL
## example.org
dn: dc=example,dc=org
objectClass: top
objectClass: dcObject
objectClass: organization
o: Example Inc.
dc: example# admin, example.org
dn: cn=admin,dc=example,dc=org
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword:: e1NTSEF9RTBJMTlqaW1BTVlaZ0h2aEhPbm5YVVdWRmQxaEtBRnM=# search result
search: 2
result: 0 Success# numResponses: 3
# numEntries: 2
[root@platform ~]#
结果确认
成功登陆用例
[root@platform ~]# javac LdapDemo.java
[root@platform ~]# java LdapDemo "172.17.0.3" "cn=admin,dc=example,dc=org" "admin"
IPAdress: 172.17.0.3
Username: cn=admin,dc=example,dc=org
Password: admin
env setting
login verification begins...
login successfully.
[root@platform ~]#
失败登陆用例
使用错误的用户密码,结果显示无法登陆
[root@platform ~]# javac LdapDemo.java
[root@platform ~]# java LdapDemo "172.17.0.3" "cn=admin,dc=example,dc=org" "admin1"
IPAdress: 172.17.0.3
Username: cn=admin,dc=example,dc=org
Password: admin1
env setting
login verification begins...
login failed.
[root@platform ~]#
总结
Java中使用javax.naming可以对Ldap用户信息进行验证,使用这点可以完成SSO之类功能的集成。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
