Java LDAP统一身份认证
不多说直接看代码,如下:
import java.util.Hashtable;
import javax.naming.AuthenticationException;
import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
import javax.naming.ldap.Control;
import javax.naming.ldap.InitialLdapContext;
import javax.naming.ldap.LdapContext;
/**
* 用户登陆认证,LDAP跨域认证,通过LDAP对用户进行更新
*
*/
public class LdapCheck {
private static LdapContext ctx = null;
private static Control[] connCtls = null;
/**** 定义LDAP的基本连接信息 ******/
// LDAP的连接地址(ldap://ip:port/)port默认为389
private static String URL = "?";
// LDAP的根DN
private static String BASEDN = "dc=?,dc=?,dc=?";
// LDAP的连接账号(身份认证管理平台添加的应用账号,应用账号格式:uid=?,ou=?,dc=????)
private static String PRINCIPAL = "uid=?,ou=?,dc=?,dc=?,dc=?";
// LDAP的连接账号的密码(身份认证管理平台添加的应用账号的密码)
private static String PASSWORD = "?";
public static void main(String[] args) {
// 登录用户的用户名和密码
String username = "?";
String password = "?";
System.out.println(authenticate(username, password));
closeCtx();
}
// 校验用户名密码的方法
public static boolean authenticate(String usr, String pwd) {
boolean valide = false;
if (pwd == null || pwd == "")
return false;
if (ctx == null) {
getCtx();
}
String userDN = getUserDN(usr);
if ("".equals(userDN) || userDN == null) {
return false;
}
try {
ctx.addToEnvironment(Context.SECURITY_PRINCIPAL, userDN);
ctx.addToEnvironment(Context.SECURITY_CREDENTIALS, pwd);
ctx.reconnect(connCtls);
valide = true;
} catch (AuthenticationException e) {
System.out.println(userDN + " is not authenticated");
System.out.println(e.toString());
valide = false;
} catch (NamingException e) {
System.out.println(userDN + " is not authenticated");
valide = false;
}
return valide;
}
public static void getCtx() {
if (ctx != null) {
return;
}
Hashtable<String, String> env = new Hashtable<String, String>();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, URL + BASEDN);
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, PRINCIPAL);
env.put(Context.SECURITY_CREDENTIALS, PASSWORD);
try {
// 链接ldap
ctx = new InitialLdapContext(env, connCtls);
} catch (javax.naming.AuthenticationException e) {
System.out.println("Authentication faild: " + e.toString());
} catch (Exception e) {
System.out.println("Something wrong while authenticating: " + e.toString());
}
}
public static void closeCtx() {
try {
if (ctx != null)
ctx.close();
} catch (NamingException ex) {
}
}
public static String getUserDN(String uid) {
String userDN = "";
try {
SearchControls constraints = new SearchControls();
constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
NamingEnumeration<?> en = ctx.search("", "uid=" + uid, constraints);
if (en == null) {
System.out.println("Have no NamingEnumeration.");
}
if (!en.hasMoreElements()) {
System.out.println("Have no element.");
}
while (en != null && en.hasMoreElements()) {
Object obj = en.nextElement();
if (obj instanceof SearchResult) {
SearchResult si = (SearchResult) obj;
userDN += si.getName();
userDN += "," + BASEDN;
} else {
System.out.println(obj);
}
System.out.println();
}
} catch (Exception e) {
System.out.println("Exception in search():" + e);
}
return userDN;
}
}
Java LDAP统一身份认证相关推荐
- 使用宁盾LDAP目录服务为WiKi等开源系统提供统一身份认证
成长型科技企业(100-500人),往往应用系统不多(5~6套),常见的有Gitlab.wiki.自研LDAP应用等,但应用的维护几乎以手动单独操作为主. 在以前:由于企业没有搭建AD域或OpenDJ ...
- 统一身份认证(SSO/AD域/LDAP)
统一身份认证(SSO/AD域/LDAP) 单点登录 单点登录:(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一.SSO的定义是在多个应用系统中,用户只需要登 ...
- JAVA——基于HttpClient的通过单点登录方式(统一身份认证平台)登录正方教务系统[1999-2020]基本解决方案
问题分析 通过HttpClient获取网页数据源,通过Jsoup解析数据.先模拟登录统一身份认证平台,再通过单点登录方式登录正方教务系统,最后获取相关信息.模拟浏览器正常操作,封装请求头信息获取SES ...
- signature=4f0a1c9773fc07031e260b016c514c92,基于LDAP的统一身份认证系统设计与实现
摘要: 随着IT技术和网络技术的蓬勃发展,各种基于网络的应用系统已在当前的商业环境中大量存在.因商业应用业务需要,用户每天可能需要登录到许多不同的应用系统.为保证安全性,通常各系统均要求对用户进行身份 ...
- LDAP服务器ca系统,基于LDAP的统一身份认证系统与CA认证的集成.pdf
基于LDAP的统一身份认证系统与CA认证的集成 , 第 33 卷 第 8 期 宜春学院学报 Vol. 33 No. 8 2011 年 8 月 Journal of Yichun College Aug ...
- java单点登录统一认证,JEECG 集成KiSSO单点登录实现统一身份认证
JEECG 集成KiSSO单点登录实现统一身份认证 JEECG 如何为其他第三方系统实现统一身份认证服务,实现单点登录? 第三方系统如何对接呢? 今天为大家揭开这层面纱,让大家了解实质,使用它更快速的 ...
- 构建基于分布式SOA架构的统一身份认证体系
摘要:本文充分利用SOA架构松耦合的特点,通过规范统一网络接口实现业务系统整合,既提升系统安全性,又简化资源访问操作,具有重要的理论和现实意义. 统一身份认证旨在将分散在各个信息系统中的用户和权限资源 ...
- cas如何实现多系统间的相互认证_统一身份认证和单点登录的区别
首先大家会遇到这样一个问题,统一身份认证和单点登录的概念是什么? 百度百科对统一身份认证的定义 所谓身份认证,就是判断一个用户是否为合法用户的处理过程.最常用的简单身份认证方式是系统通过核对用户输入的 ...
- FreeIPA 统一身份认证实现
1.FreeIPA 简介 FreeIPA是一个用于Linux/Unix环境开源的身份管理系统,提供集中式帐户管理和身份验证,与Windows Active Directory或LDAP的作用类似.Fr ...
- 分布式系统统一身份认证
最近要做我们这边电信下面的信息港的分布式统一认证,一开始挺一筹莫展的,现在总算有点思路了,看了北大,清华,东大等的教育网设计方案,发现他们一般都是用J2EE+webservice,我用的是.net+W ...
最新文章
- DevOps和SRE有什么不同,每个意味着什么
- python 装饰器装饰类_5分钟的Python装饰器指南
- gdb 调试 TuMediaService
- Python入门学习笔记(3)
- 《Python Cookbook(第3版)中文版》——1.5 实现优先级队列
- MongoDB,分组,聚合
- 【硬件】存储的RAID技术详解
- 测视力距离5米还是3米_装B冷知识 | 小孔镜为什么可以提高视力?
- JSP脚本连接数据库
- 重启路由器可以换IP吗
- 深度置信网络学习总结
- MISRA C-2012规则中文版
- java 微博发布时间_java 对新浪微博微博的发表时间解析
- 2018年度中国IT行业杰出人物奖出炉
- 【noip模拟赛1】古韵之鹊桥相会(最短路)
- Windows照片查看器无法显示此图片,因为计算机上的可用内存可能不足的最好解决办法。
- 汽车多媒体主机接口EMC设计
- 北京大学可视化发展前沿暑期学校第四讲
- java 如何使用ocr_Java使用tess4J进行OCR图像识别
- nowcoder15162 小H的询问